一、根據用戶id和角色的enabled狀態獲取用戶的角色(傳參形式)
1. 接口如下:
/* * 根據用戶id和角色的enabled狀態獲取用戶的角色 * @param userId * @param enabled * */ List<SysRole> selectRolesByUserIdAndEnabled (@Param("userId")Long userId, @Param("enabled") Integer enabled);
2. xml中:
<select id="selectRolesByUserIdAndEnabled" resultType="com.example.simple.model.SysRole"> SELECT r.id, r.role_name, r.enabled, r.create_by, r.create_time FROM mybatis.sys_user u inner join mybatis.sys_user_role ur on u.id = ur.user_id INNER JOIN mybatis.sys_role r on ur.role_id = r.id where u.id = #{userId} and r.enabled = #{enabled} </select>
注:inner join:左右關聯,左右兩表均有數據時才能取對應的所有數據
3. 測試代碼如下:
@Test public void testselectRolesByUserIdAndEnabled(){ SqlSession sqlSession = getSqlSession(); try{ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<SysRole> userList = userMapper.selectRolesByUserIdAndEnabled(1L,1); Assert.assertNotNull(userList); Assert.assertTrue(userList.size()>0); }finally { sqlSession.close(); } }
二、根據用戶id和enabled狀態獲取用戶角色 (傳對象 )
1. 接口如下:
/* * 根據用戶id和enabled狀態獲取用戶角色 (傳對象 ) * */ List<SysRole> selectRolesByUserAndRole (@Param("user")SysUser user,@Param("role")SysRole role);
2. xml如下:
<select id="selectRolesByUserAndRole" resultType="com.example.simple.model.SysRole"> SELECT r.id, r.role_name, r.enabled, r.create_by, r.create_time FROM mybatis.sys_user u inner join mybatis.sys_user_role ur on u.id = ur.user_id INNER JOIN mybatis.sys_role r on ur.role_id = r.id where u.id = #{user.id} and r.enabled = #{role.enabled} </select>
3。 測試函數如下:
@Test public void testselectRolesByUserAndRole(){ SqlSession sqlSession = getSqlSession(); try{ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); SysUser sysUser = new SysUser(); sysUser.setId(1L); SysRole sysRole = new SysRole(); sysRole.setEnabled(1); List<SysRole> userList = userMapper.selectRolesByUserAndRole(sysUser,sysRole); Assert.assertNotNull(userList); Assert.assertTrue(userList.size()>0); }finally { sqlSession.close(); } }
三、根據郵箱地址和用戶名字來查詢user表(if標簽傳參)
1. 接口中:
/* * 根據郵箱地址和用戶名字來查詢user表 * */ List<SysUser> selectByUser(SysUser sysUser);
2. xml中:
<select id="selectByUser" resultType="com.example.simple.model.SysUser"> select id, user_name userName, user_password userPassword, user_email userEmail, user_info userInfo , head_img headImg, create_time createTime from sys_user <where> <if test="userName != null and userName !=''"> and user_name like concat ('%',#{userName},'%') </if> <if test="userEmail != null and userEmail !=''"> and user_email = #{userEmail} </if> </where> </select>
3. 測試函數如下:
@Test public void testSelectByUser(){ SqlSession sqlSession = getSqlSession(); try { //只查詢用戶名時 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); SysUser query = new SysUser(); query.setUserName("ad"); List<SysUser> sysUserList = userMapper.selectByUser(query); Assert.assertTrue(sysUserList.size()>0); //只查詢用戶郵箱時 query = new SysUser(); query.setUserEmail("test@mybatis.com"); sysUserList = userMapper.selectByUser(query); Assert.assertTrue(sysUserList.size()>0); //用戶郵箱和用戶名都查詢 query = new SysUser(); query.setUserName("admin"); query.setUserEmail("test@mybatis.com"); sysUserList = userMapper.selectByUser(query); Assert.assertTrue(sysUserList.size()== 0); }finally { sqlSession.close(); } }
四、根據用戶id集合查詢(傳list集合)
1. 接口中:
/* * 根據用戶id集合查詢 * */ List<SysUser> selectByIdList(List<Long> idList);
2. xml中:
<select id="selectByIdList" resultType="com.example.simple.model.SysUser"> select id, user_name userName, user_password userPassword, user_email userEmail, user_info userInfo , head_img headImg, create_time createTime from sys_user where id in <foreach collection="list" open="(" close=")" separator="," item="id" index="i"> #{id} </foreach>
3. 測試函數如下:
@Test public void testSelectByidList(){ SqlSession sqlSession = getSqlSession(); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<Long> idList = new ArrayList<Long>(); idList.add(1L); idList.add(1001L); //業務邏輯中必須校驗 idList.size() > 0 List<SysUser> sysUserList = userMapper.selectByIdList(idList); Assert.assertTrue(sysUserList.size()>0); }finally { sqlSession.close(); } }
注:collection:值為要選代循環的屬性名。
item:值為從法代對象中取出的每一個值。
index:索引值