Mybatis实现一对多查询


创建表结构如下

用户表 users

字段

类型

长度

主键

自增

备注

uid

Int

 

Y

Y

 

uname

varchar

 

 

 

帐号

pwd

varchar

 

 

 

密码

lasttime

datetime

 

 

 

最后访问时间

角色表role

字段

类型

长度

主键

自增

备注

rid

Int

 

Y

Y

 

rname

varchar

 

 

 

角色名称

用户_角色中间表 users_role

字段

类型

长度

主键

自增

备注

uid

Int

 

Y

 

用户id

rid

Int

 

Y

 

角色id

访问权限表 permision

字段

类型

长度

主键

自增

备注

pid

Int

 

Y

Y

 

pname

Varchar

 

 

 

权限名称

url

Varchar

 

 

 

访问地址

角色_权限表 role_permision

字段

类型

长度

主键

自增

备注

pid

Int

 

Y

 

权限id

rid

Int

 

Y

 

角色id

 

为数据库表模拟一些数据

 

例如:

用户表

Uid

用户名

密码

最后访问时间

1

张三

111111

 

2

李四

222222

 

3

王五

333333

 

 

角色表

Rid

rname

1

超级管理员

2

操作员

3

财会

 

 

 

 

用户_角色表

Uid

rid

1

1

1

2

2

2

3

3

 

访问权限表

pid

权限名称

访问地址

1

用户管理

UserAction

2

业务管理

ServiceAction

3

年报管理

YearCountAction

4

月报管理

MonthCountAction

5

数据初始

InitAction

6

租车业务

LeaseAction

 

角色_权限表

Rid

pid

1

1

1

2

1

3

1

4

1

5

1

6

2

2

2

6

3

3

3

4

 

要求实现,从键盘录入帐号和密码,如果正确,显示当前用户的角色和所有能操作的权限名称以及可访问的地址,并将最后访问时间,更新到数据库表中。

例如,李四登录系统

显示李四是操作员

可操作菜单

ServiceAction>业务管理

LeaseAction>租车业务

 

package com.xzit.model;

import lombok.Data;

@Data
public class MyRole {
    private int rid;
    private String rname;
}
package com.xzit.model;

import lombok.Data;

import java.util.Date;
import java.util.List;

@Data
public class MyUsers {
    private int uid;
    private String uname;
    private String pwd;
    private Date datetime;
    private List roles;
    private List permissions;
}
package com.xzit.model;

import lombok.Data;

@Data
public class Permission {
    private int pid;
    private String pname;
    private String url;
}
package com.xzit.mapper;

import com.xzit.model.MyUsers;

public interface LoginMapper {
    MyUsers login(MyUsers user);
    void update(int uid);
}
<?xml version="1.0" encoding="UTF-8" ?>


    
        
        
        
    
    
    
        update myusers
        set lasttime = now()
        where uid = #{uid}
    
package com.xzit.test;

import com.xzit.mapper.LoginMapper;
import com.xzit.model.MyRole;
import com.xzit.model.MyUsers;
import com.xzit.model.Permission;
import com.xzit.util.SessionUtil;
import org.apache.ibatis.session.SqlSession;

import java.io.IOException;
import java.util.List;

public class TestLogin {
    public static void main(String[] args) throws IOException {
        SqlSession session = SessionUtil.getSession();
        LoginMapper mapper = session.getMapper(LoginMapper.class);
        MyUsers u = new MyUsers();
        u.setUname("李四");
        u.setPwd("222222");
        /*Scanner scanner =new Scanner(System.in);
        System.out.println("请登录系统:");
        u.setUname(scanner.next());
        u.setPwd(scanner.next());*/
        MyUsers user=mapper.login(u);
        if (user==null){
            System.out.println("登录失败");
        }else {
            System.out.println("欢迎用户"+user.getUname());
            System.out.println("您的角色是:");
            List list = user.getRoles();
            for (MyRole role : list){
                System.out.println(role.getRname());
            }
            System.out.println("您的访问权限是:");
            List list2 = user.getPermissions();
            for (Permission permission : list2){
                System.out.println(""+permission.getPname()+"");
            }
            /* 将最后访问时间,更新到数据库表中 */
            mapper.update(user.getUid());
            session.commit();
        }
        session.close();
    }
}
package com.xzit.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

public class SessionUtil {
    public static SqlSession getSession() throws IOException {
        return new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml")).openSession();
    }
}
#mysql????
#mysql5 com.mysql.cj.jdbc.Driver
jdbc.driver=com.mysql.cj.jdbc.Driver
#mysql5 jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useUnicode=true
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8&useUnicode=true&serverTimezone=GMT%2B8&useSSL=false
jdbc.username=root
jdbc.password=zengyu1234
<?xml version="1.0" encoding="UTF-8"?>


    
    
    
        
    
    
    
        
        
        <package name="com.xzit.model"/>
    
    default="development">
         
             
             
                 
                 
                 
                 
             
         
     
    
        <package name="com.xzit.mapper"/>
    

创建表结构如下

用户表 users

字段

类型

长度

主键

自增

备注

uid

Int

 

Y

Y

 

uname

varchar

 

 

 

帐号

pwd

varchar

 

 

 

密码

lasttime

datetime

 

 

 

最后访问时间

角色表role

字段

类型

长度

主键

自增

备注

rid

Int

 

Y

Y

 

rname

varchar

 

 

 

角色名称

用户_角色中间表 users_role

字段

类型

长度

主键

自增

备注

uid

Int

 

Y

 

用户id

rid

Int

 

Y

 

角色id

访问权限表 permision

字段

类型

长度

主键

自增

备注

pid

Int

 

Y

Y

 

pname

Varchar

 

 

 

权限名称

url

Varchar

 

 

 

访问地址

角色_权限表 role_permision

字段

类型

长度

主键

自增

备注

pid

Int

 

Y

 

权限id

rid

Int

 

Y

 

角色id

 

为数据库表模拟一些数据

 

例如:

用户表

Uid

用户名

密码

最后访问时间

1

张三

111111

 

2

李四

222222

 

3

王五

333333

 

 

角色表

Rid

rname

1

超级管理员

2

操作员

3

财会

 

 

 

 

用户_角色表

Uid

rid

1

1

1

2

2

2

3

3

 

访问权限表

pid

权限名称

访问地址

1

用户管理

UserAction

2

业务管理

ServiceAction

3

年报管理

YearCountAction

4

月报管理

MonthCountAction

5

数据初始

InitAction

6

租车业务

LeaseAction

 

角色_权限表

Rid

pid

1

1

1

2

1

3

1

4

1

5

1

6

2

2

2

6

3

3

3

4

 

要求实现,从键盘录入帐号和密码,如果正确,显示当前用户的角色和所有能操作的权限名称以及可访问的地址,并将最后访问时间,更新到数据库表中。

例如,李四登录系统

显示李四是操作员

可操作菜单

ServiceAction>业务管理

LeaseAction>租车业务