依照上一期的继续
除了直接对应基本数据类类型、表的实体类,还可能用到多表查询。
- <select id="selectRolesByUserId" resultType="tk.mybatis.simple.model.SysRole">
- select r.id, r.role_name roleName, r.enabled, r.create_by createBy , r.create_time createTime,
- u.user_name as "user.userName",
- u.user_email as "user.userEmail"
- from sys_user u
- inner join sys_user_role ur on u.id = ur.user_id
- inner join sys_role r on ur.role_id = r.id
- where u.id = #{userid}
- </select>
这里可以看到映射的不仅是两个类,那如何解决呢?
- package tk.mybatis.simple.model;
-
- public class SysRoleExtend extends SysRole {
- private String userName;
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
- }
记得将resultType修改!为继承的,这里只加了username(为了举例),额外需要什么再加。
- package tk.mybatis.simple.model;
-
- import lombok.Data;
-
- import java.util.Date;
-
- @Data
- public class SysRole {
- private Long id;
- private String roleName;
- private Date createTime;
- private Long createBy;
- private int enabled;
- private SysUser user;
- }
增加
List selectRolesByUserId(Long userid);
- package tk.mybatis.simple.mapper;
-
- import org.apache.ibatis.session.SqlSession;
- import org.junit.Assert;
- import org.junit.Test;
- import tk.mybatis.simple.model.SysRole;
-
- import java.util.List;
-
- public class UserMapperTest extends BaseMapperTest{
- @Test
- public void testSelectRolesByUserid() {
- SqlSession sqlSession = getSqlSession();
- try {
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- List<SysRole> roleList = userMapper.selectRolesByUserId((long) 1);
- Assert.assertNotNull(roleList);
- Assert.assertTrue(roleList.size() > 0);
- } finally {
- sqlSession.close();
- }
- }
- }

之前有一个插入没有成功,导致没有一一映射,就会抛出异常,查询到的结果是null。
