springboot 中 mybatis constructor标签与注解的使用

时间:2019-01-22
本文章向大家介绍springboot 中 mybatis constructor标签与注解的使用,主要包括springboot 中 mybatis constructor标签与注解的使用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

springboot 中 mybatis constructor标签与注解的使用

constructor标签与@ConstructorArgs注解就是根据构造方法构造对象"

user表:

role表:

user - entity:

public class User implements Serializable {

	private Integer id;

	private String name;

	private Gender gender;

	private List<Role> roleList;

	public User(){

	}

	public User(Integer id, String name, Gender gender) {
		this.id = id;
		this.name = name;
		this.gender = gender;
	}

	public User(Integer id, String name, Gender gender, List<Role> roleList) {
		this.id = id;
		this.name = name;
		this.gender = gender;
		this.roleList = roleList;
	}
   get set ......
}

role-entity

public class Role implements Serializable {

	private Integer id;

	private String role;

	private User user;

	get set ......
}

user-mapper

@Repository
public interface UserMapper {
	List<User> findAll2();
}

role-mapper

@Repository
public interface RoleMapper {

	@Select("select * from mk_role where user_id = #{userId}")
	@Results({
			@Result(column = "id", property = "id"),
			@Result(column = "role", property = "role")
	})
	List<Role> getRoleByUserId(Integer userId);
}

user-mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.demo.mapper.UserMapper">

    <resultMap
            id="userMap2"
            type="user">
        <constructor>
            <arg column="id" javaType="Integer"/>
            <arg column="name" javaType="String"/>
            <arg column="gender" javaType="Gender" typeHandler="com.demo.typehandler.EnumTypeHandler"/>
            <arg select="com.demo.mapper.RoleMapper.getRoleByUserId" javaType="List" column="id" />
        </constructor>
        <!--可与collection混用-->
        <!--<collection -->
                <!--property="roleList" column="id" select="com.demo.mapper.RoleMapper.getRoleByUserId"/>-->
    </resultMap>
    
    <select id="findAll2" resultMap="userMap2" >
        select * from mk_user;
    </select>

</mapper>

注解方式:
userMapper

@Repository
public interface UserMapper {
	@Select("select * from mk_user")
	@ConstructorArgs(value = {
			@Arg(column = "id", javaType = Integer.class),
			@Arg(column = "name", javaType = String.class),
			@Arg(column = "gender", javaType = Gender.class, typeHandler = EnumTypeHandler.class),
			@Arg(column = "id", javaType = List.class, select = "com.demo.mapper.RoleMapper.getRoleByUserId")
	})
	List<User> findAll2();
}