示例:用户、角色、菜单表的权限管理。

一、数据库要求:

1、用户表users:uid用户编号、uname用户名称

2、用户角色表usersRoles:uid用户编号、rid角色编号

3、角色表roles:rid角色编号、rname角色名称

4、角色菜单表rolesMenu:rid角色编号、mid菜单编号

5、菜单表menu:mid菜单编号、mname菜单名称

二、创建实体类:

1、用户实体类Users.java:

@Entity // 指名该类为实体类
@Table(name = "users") // 对应数据库表users
public class Users {/*** 用户编号*/@Id // 指名该列名为ID@GenericGenerator(name = "myid", strategy = "guid")@GeneratedValue(generator = "myid")private String uid;/*** 用户名称*/@Column(name = "uname")private String uname;/*** 用户保存N个角色的set集合*/@ManyToMany(targetEntity = Roles.class)@Cascade(value = { CascadeType.SAVE_UPDATE })@JoinTable(name = "usersroles", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "rid"))private Set<Roles> sr = new HashSet<>();/*** * 创建一个新的实例 Users.**/public Users() {super();}/*** * 创建一个新的实例 Users.** @param uid* @param uname* @param sr*/public Users(String uid, String uname, Set<Roles> sr) {super();this.uid = uid;this.uname = uname;this.sr = sr;}public String getUid() {return uid;}public void setUid(String uid) {this.uid = uid;}public String getUname() {return uname;}public void setUname(String uname) {this.uname = uname;}public Set<Roles> getSr() {return sr;}public void setSr(Set<Roles> sr) {this.sr = sr;}}

2、角色实体类Roles.java:

@Entity // 指名该类为实体类
@Table(name = "roles") // 对应数据库表roles
public class Roles {/*** 角色编号*/@Id // 指名该列名为ID@GenericGenerator(name = "myid", strategy = "guid")@GeneratedValue(generator = "myid")private String rid;/*** 角色名称*/@Column(name = "rname")private String rname;/*** 用来保存N个用户,set集合唯一性,transient去除不必要的属性值*/@ManyToMany(targetEntity = Users.class)@Cascade(value = { CascadeType.SAVE_UPDATE })@JoinTable(name = "usersroles", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = @JoinColumn(name = "rid"))private transient Set<Users> su = new HashSet<>();/*** 用于保存N个菜单*/@ManyToMany(targetEntity = Menu.class)@Cascade(value = { CascadeType.SAVE_UPDATE })@JoinTable(name = "rolesmenu", joinColumns = @JoinColumn(name = "rid"), inverseJoinColumns = @JoinColumn(name = "mid"))private Set<Menu> sm = new HashSet<>();/*** * 创建一个新的实例 Roles.**/public Roles() {super();}public Roles(String rid, String rname, Set<Users> su, Set<Menu> sm) {super();this.rid = rid;this.rname = rname;this.su = su;this.sm = sm;}public String getRid() {return rid;}public void setRid(String rid) {this.rid = rid;}public String getRname() {return rname;}public void setRname(String rname) {this.rname = rname;}public Set<Users> getSu() {return su;}public void setSu(Set<Users> su) {this.su = su;}public Set<Menu> getSm() {return sm;}public void setSm(Set<Menu> sm) {this.sm = sm;}}

3、菜单实体类Menu.java:

@Entity // 指名该类为实体类
@Table(name = "menu") // 对应数据库表menu
public class Menu {/*** 菜单编号*/@Id // 指名ID@GenericGenerator(name = "myid", strategy = "guid")@GeneratedValue(generator = "myid")private String mid;/*** 菜单名称*/@Column(name = "mname")private String mname;/*** 保存N个角色,transient去除不必要的属性值*/@ManyToMany(targetEntity = Roles.class)@Cascade(value = { CascadeType.SAVE_UPDATE })@JoinTable(name = "rolesmenu", joinColumns = @JoinColumn(name = "rid"), inverseJoinColumns = @JoinColumn(name = "mid"))private transient Set<Roles> sr = new HashSet<>();public Menu() {super();}public Menu(String mid, String mname, Set<Roles> sr) {super();this.mid = mid;this.mname = mname;this.sr = sr;}public String getMid() {return mid;}public void setMid(String mid) {this.mid = mid;}public String getMname() {return mname;}public void setMname(String mname) {this.mname = mname;}public Set<Roles> getSr() {return sr;}public void setSr(Set<Roles> sr) {this.sr = sr;}}

三、创建hibernate.cfg.xml配置文件(src/main/resources路径下)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.password">sasa</property><property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8</property><property name="hibernate.connection.username">root</property><!-- 显示sql语句 --><property name="show_sql">true</property><!-- 格式化sql语句 --><property name="format_sql">true</property><!-- 配置映射:引入实体类--><mapping class="com.zking.struts2_hibernate.entity.Users" /><mapping class="com.zking.struts2_hibernate.entity.Roles" /><mapping class="com.zking.struts2_hibernate.entity.Menu" /></session-factory>
</hibernate-configuration>

四、创建实现方法的类UsersAction.java:

@Results({ @Result(name = "success", location = "/index.jsp"), @Result(name = "error", location = "/404.jsp") }) // 跳转页面
public class UsersAction {// 创建Configurationprivate Configuration configuration;// 创建SessionFactoryprivate SessionFactory sessionFactory;// 创建Sessionprivate Session session;// 创建事务private Transaction transaction;/*** * @Title: before* @Description:最开始执行的方法* @return void*/public void before() {configuration = new Configuration().configure();sessionFactory = configuration.buildSessionFactory();session = sessionFactory.openSession();transaction = session.beginTransaction();}/*** * @Title: after* @Description:最后执行的方法* @return void*/public void after() {transaction.commit();session.close();sessionFactory.close();}/*** * @Title: addUser* @Description: 新增数据* @return void*/@Action("addUser")public void addUser() {// 调用最开始执行的方法before();// 创建users表对象Users u = new Users();u.setUname("chenchao");// 创建roles表对象Roles r1 = new Roles();r1.setRname("student");Roles r2 = new Roles();r2.setRname("staff");// 用户表和角色表互相设值u.getSr().add(r1);u.getSr().add(r2);r1.getSu().add(u);r2.getSu().add(u);// 创建menu表对象Menu m1 = new Menu();m1.setMname("attend class");Menu m2 = new Menu();m2.setMname("be on duty");// 角色表和菜单表互相设值r1.getSm().add(m1);r2.getSm().add(m2);m1.getSr().add(r1);m2.getSr().add(r2);// 保存session.save(u);// 调用最后执行的方法after();}/*** * @Title: findRolesAll* @Description: 查询数据* @return void*/@Action("findRolesAll")public void findRolesAll() throws Exception {// 调用最开始执行的方法before();@SuppressWarnings("unchecked")// 得到集合信息List<Users> luser = session.createQuery(" from Users").list();// 转为JSON格式String out = JSON.toJSONString(luser);System.out.println(out);// 打印到页面ServletActionContext.getResponse().getWriter().println(out);// 刷新ServletActionContext.getResponse().getWriter().flush();// 关闭ServletActionContext.getResponse().getWriter().close();}}

五、创建index.jsp页面,用来获取后台数据(使用ajax):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-3.2.1.js"></script>
<script type="text/javascript">
$(function(){dataBind();
});function dataBind(){$.ajax({type : "post",dataType : "json",data : {t : new Date()},url : "findRolesAll",//访问数据地址success : function(date) {var table='<table align="center" width="80%"><tr><td>用户名</td><td>角色名</td><td>菜单名</td></tr>';$.each(date,function(index,item){//循环用户表信息console.log(item);//打印table+="<tr><td>"+item.uname+"</td><td></td><td></td></tr>";$.each(item.sr,function(index,item){//循环角色表信息table+="<tr><td></td><td>"+item.rname+"</td><td></td></tr>";$.each(item.sm,function(index,item){//循环菜单表信息table+="<tr><td></td><td></td><td>"+item.mname+"</td></tr>";});});});table+="</table>";$('#div1').html(table);}});
}</script>
</head>
<body><div id="div1"></div>
</body>
</html>

在Mavne环境下,实现struts2和hibernate的NVN关系的注解式开发?相关推荐

  1. eclipse 环境下整合 struts2+spring+hibernate 开发web应用常见问题及解答

    索引 1. org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned b ...

  2. 【编程不良人】快速入门Spring学习笔记08---事务属性、Spring整合Structs2框架(SM)、Spring整合Mybatis+Struts2(SSM)、Spring注解、SSM注解式开发

    1. 事务属性 1.1 事务传播属性 配套视频:[编程不良人]快速入门Spring,SpringBoot.SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili # ...

  3. SSM(spring.struts2.mybatis)注解式开发步骤

    SSM注解式开发步骤 1.引入依赖 spring.mybatis.struts2.mybatis-spring.struts2-spring-plugin.mysql|oracle.fastjson. ...

  4. JNI和NKD入门系列二,mac环境下配置NDk,并在android studio上进行JNI开发

    1.下载并配置NDK NDK各版本下载地址在此http://blog.csdn.net/shuzfan/article/details/52690554,对应好各自系统.(压缩文件记得解压) 接下来将 ...

  5. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

  6. 在OpenCV环境下对图像做Gamma校正

    什么是Gamma校正? Gamma校正是对输入图像灰度值进行的非线性操作,使输出图像灰度值与输入图像灰度值呈指数关系. 上面中的指数γ即为Gamma. 经过Gamma校正后的输入和输出图像灰度值关系如 ...

  7. linux如何运行java程序,Linux环境下运行简单java程序

    一.安装java 1.下载jdk8 选择对应jdk版本下载.(Tips:可在Windows下载完成后,通过FTP或者SSH到发送到Linux上) 2. 登录Linux,切换到root用户 su roo ...

  8. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException

    Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException 参考文章: (1 ...

  9. Spring、Struts2+Spring+Hibernate整合步骤

    所使用的Jar包: Hibernate: Spring(使用MyEclipse自动导入框架功能) Struts2: 注解包和MySql驱动包: 1.配置Hibernate和Spring: <be ...

最新文章

  1. Android Broadcast Receiver
  2. 精心安利8个良心好用的学习神器和办公神器
  3. UESTC 1698 The Game
  4. 把json对象串转换成map对象
  5. Ubuntu 20.04 LTS安装搜狗输入法,只需三条命令,还能自动更新
  6. centos6.4 安装 mysql_CentOS6.4 安装MySQL
  7. Hadoop IO 文件压缩 序列化
  8. TransCenter解读
  9. jsp调用controller方法_SpringMVC五大核心组件及调用过程
  10. oracle system表空间扩容,Oracle 11g system表空间快速增长解决
  11. Bash on Windows 抢鲜测试 -- 介绍及安装
  12. 清华周界详解《基于图神经网络的事实验证》 | 百万人学 AI
  13. PowerCMD——cmd的命令行工具
  14. Java解析中文数字字符串
  15. ImDisk 命令行用法
  16. JRuby: Wiki: RailsWithH2InJNDIOnJetty — Project Kenai
  17. 共享计算机桌面需要密码,win10局域网共享文件需要输密码怎么办?_win10访问共享文件需要密码的解决办法-爱纯净...
  18. 计算机组成存储器实验心得,《计算机组成原理》存储器读写实验报告
  19. (神州优车)数据交换平台架构分享
  20. js 正则替换手机号中间四位为****

热门文章

  1. 一维离散动力学系统的混沌研究【基于matlab的动力学模型学习笔记_8】
  2. Rpm、Yum(程序包管理)
  3. 如何设置EXCEL里标题在每页都打印?
  4. 腾讯云服务器搭建NextCloud云盘
  5. CH343芯片应用—硬件设计指南
  6. 苹果申请新专利,iPhone或取消刘海设计
  7. android之手机截屏小程序
  8. 互联网单点登录集成方案
  9. Node的数据库编程
  10. 今年,我只赚了一点点