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();
}