壹.五表联查的功能测试
一.数据库中有5张表
1.permission表,保存权限
role表,保存角色
role_permission表,保存角色和权限的关系
role和permission是多对多关系,多对多关系的表一定会出现一张中间表,来保存他们的关系
user表,保存用户信息
user_role表,保存用户和角色的关系
user和role表也是多对多的关系
二.五表连查的sql语句
SELECT u.username,r.name,p.name
FROM user u
LEFT JOIN user_role ur ON u.id=ur.user_id
LEFT JOIN role r ON r.id=ur.role_id
LEFT JOIN role_permission rp ON r.id = rp.role_id
LEFT JOIN permission p ON p.id=rp.permission_id
WHERE u.id=3
三.我们在登录用户时
1.我们在登录用户时需要指定用户的权限,根据用户的id查询权限可能需要使用这5张表的连接查询
2.除了对权限的查询外,还需要用户的基本信息,使用用户名查询出用户对象即可
3.在UserMapper接口中添加如下两个查询
@Repository
public interface UserMapper extends BaseMapper<User> {
/**
* 根据用户输入的用户名查询用户信息的方法
*/
@Select("select * from user where username=#{username}")
User findUserByUsername(String username);//方法名自己定义的
/**
* 查询指定id的用户的所有权限
*/
@Select("SELECT p.id,p.name" +
" FROM user u" +
" LEFT JOIN user_role ur ON u.id=ur.user_id" +
" LEFT JOIN role r ON r.id=ur.role_id" +
" LEFT JOIN role_permission rp ON r.id=rp.role_id" +
" LEFT JOIN permission p ON p.id=rp.permission_id" +
" WHERE u.id=#{id}")
List<Permission> findUserPermissionsById(Integer id);//方法名自己定义的
}
四.测试两个接口
1.最好还是测试一下,保证万无一失!
测试代码如下
@Autowired
UserMapper userMapper;
@Test
public void findUser(){
User user=userMapper.findUserByUsername("tc2");
System.out.println(user);
}
@Test
public void findPermissions(){
List<Permission> list=userMapper.findUserPermissionsById(3);
for(Permission p: list){
System.out.println(p);
}
}
2.测试成功。