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

 

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

例如,李四登录系统

显示李四是操作员

可操作菜单

<a href=ServiceAction>业务管理</a>

<a href=LeaseAction>租车业务</a>

 

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<MyRole> roles;
    private List<Permission> 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" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xzit.mapper.LoginMapper">
    <resultMap id="usersQuery" type="MyUsers" autoMapping="true">
        <id column="uid" property="uid"></id>
        <collection property="roles" ofType="MyRole" autoMapping="true"></collection>
        <collection property="permissions" ofType="Permission" autoMapping="true"></collection>
    </resultMap>
    <select id="login" resultMap="usersQuery" parameterType="MyUsers">
        select u.*, r.*, p.*
        from myusers u,
             myrole r,
             myusers_myrole ur,
             myrole_permission mp,
             permission p
        WHERE u.uid = ur.uid
          and ur.rid = r.rid
          and mp.rid = r.rid
          and mp.pid = p.pid
          and u.uname = #{uname}
          and u.pwd = #{pwd}
    </select>
    <update id="update" parameterType="MyUsers">
        update myusers
        set lasttime = now()
        where uid = #{uid}
    </update>
</mapper>
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<MyRole> list = user.getRoles();
            for (MyRole role : list){
                System.out.println(role.getRname());
            }
            System.out.println("您的访问权限是:");
            List<Permission> list2 = user.getPermissions();
            for (Permission permission : list2){
                System.out.println("<a href=’"+permission.getUrl()+"’>"+permission.getPname()+"</a>");
            }
            /* 将最后访问时间,更新到数据库表中 */
            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"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"></properties>
    <!--配置日志-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!--配置别名-->
    <typeAliases>
        <!--<typeAlias type="com.xzit.model.Student" alias="Student"></typeAlias>
        <typeAlias type="com.xzit.model.Teacher" alias="Teacher"></typeAlias>-->
        <!--别名就是类名,且不区分大小写-->
        <package name="com.xzit.model"/>
    </typeAliases>
    <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC"></transactionManager>
             <dataSource type="POOLED">
                 <property name="driver" value="${jdbc.driver}"/>
                 <property name="url" value="${jdbc.url}"/>
                 <property name="username" value="${jdbc.username}"/>
                 <property name="password" value="${jdbc.password}"/>
             </dataSource>
         </environment>
     </environments>
    <mappers>
        <package name="com.xzit.mapper"/>
    </mappers>
</configuration>

 

创建表结构如下

用户表 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

 

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

例如,李四登录系统

显示李四是操作员

可操作菜单

<a href=ServiceAction>业务管理</a>

<a href=LeaseAction>租车业务</a>

 

posted @ 2022-05-08 22:40  伊万  阅读(98)  评论(0编辑  收藏  举报