• 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>

     

  • 相关阅读:
    【题解】Red-Blue Graph Codeforces 1288F 上下界费用流
    【题解】The Magician HDU 6565 大模拟
    HAOI2018游记
    【题解】【THUSC 2016】成绩单 LOJ 2292 区间dp
    【题解】【雅礼集训 2017 Day5】远行 LOJ 6038 LCT
    【题解】Catering World Finals 2015 上下界费用流
    《无问西东...》
    为了世界的和平~一起上caioj~~~!
    新征程~起航!
    bzoj4240: 有趣的家庭菜园(树状数组+贪心思想)
  • 原文地址:https://www.cnblogs.com/zengyu1234/p/16247352.html
Copyright © 2020-2023  润新知