创建表结构如下
用户表 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>