常规功能和模块自定义系统 (cfcmms)—027开发日志(创建ManyToMany的column2)
来源:互联网 发布:浙江大学软件学院 878 编辑:程序博客网 时间:2024/05/15 07:08
027开发日志(创建ManyToMany的column2)
一、我们用“用户”和“角色”模块来作为开发的例子。首先在用户类_User.java中加入@ManyToMany标签,使其可以通过hibernate来操作“角色”。
@ManyToMany(cascade = CascadeType.PERSIST, fetch = FetchType.LAZY) @JoinTable(name = "_UserRole", joinColumns = { @JoinColumn(name = "tf_userId", referencedColumnName = "tf_userId") }, inverseJoinColumns = { // _UserRole 中的字段名, _Role 中的关联字段名 @JoinColumn(name = "tf_roleId", referencedColumnName = "tf_roleId") }) public Set<_Role> tf_Roles;
二、接下来看看mysql能不能把结果集转换成一个字符串,在网上搜索了一下,还真有这个函数(如果没有这个函数的话,就准备自定义一个函数了)。函数名字为 group_concat。这个函数可以把指定字段的结果集用设定的分隔符拼接成一个字符串。例如在我的这个系统中的数据库上执行如下命令:
select group_concat(tf_roleId ,',', tf_roleName SEPARATOR '|||')from _Role得到的结果为: '0000,管理员|||0005,市级管理员|||0010,查询角色' ,里面一共有三行数据,每行用 '|||'分隔,行中的字段用 ','号来分隔。
有了这个函数,我们就可以把ManyToMany的结果集组合成一个字符串传到前台,这个结果集里面只有二列,一列是主键,一列是名字。下面来看看加到_User的表中的查询。最后一个字段加入了用户的所有角色的字符串信息。
SELECT _t9035.tf_userId AS tf_userId, _t9035.tf_userName AS tf_userName, _t9035.tf_loginName AS tf_loginName, _t9011.tf_departmentId AS P__t9011___tf_departmentId, _t9011.tf_departmentId AS _t9011___tf_departmentId, _t9011.tf_name AS _t9011___tf_name, (SELECT GROUP_CONCAT(tf_roles0_.tf_roleId, ',', role1_.tf_roleName SEPARATOR '|||') FROM _UserRole tf_roles0_ INNER JOIN _Role role1_ ON tf_roles0_.tf_roleId = role1_.tf_roleId WHERE tf_roles0_.tf_userId = _t9035.tf_userId) FROM _User _t9035 LEFT OUTER JOIN _Department _t9011 ON _t9011.tf_departmentId = _t9035.tf_departmentId ORDER BY _t9011.tf_departmentId , tf_loginName以上查询查询语句为拼接而成,拼接过程比较复杂,这里就不讲解了。
执行的结果,如下图所示:
有了这个数据,我们就可以接着开发前台的column了。
0 0
- 常规功能和模块自定义系统 (cfcmms)—027开发日志(创建ManyToMany的column2)
- 常规功能和模块自定义系统 (cfcmms)—026开发日志(创建ManyToMany的column)
- 常规功能和模块自定义系统 (cfcmms)—028开发日志(创建ManyToMany的column3)
- 常规功能和模块自定义系统 (cfcmms)—029开发日志(创建ManyToMany的column4)
- 常规功能和模块自定义系统 (cfcmms)—030开发日志(创建ManyToMany的column5)
- 常规功能和模块自定义系统 (cfcmms)—031开发日志(创建ManyToMany的column6)
- 常规功能和模块自定义系统 (cfcmms)—025开发日志(创建iconCls的field)
- 常规功能和模块自定义系统(cfcmms)—005开发环境搭建和创建项目
- 常规功能和模块自定义系统 (cfcmms)—035开发日志(每个tab有各自模式window的备忘录)
- 常规功能和模块自定义系统 (cfcmms)—012Extjs6的开发模式和发布模式
- 常规功能和模块自定义系统 (cfcmms)—032开发日志(用GoJS来绘制模块关系图)
- 常规功能和模块自定义系统(cfcmms)—001序言
- 常规功能和模块自定义系统(cfcmms)—002目录
- 常规功能和模块自定义系统(cfcmms)—003概述
- 常规功能和模块自定义系统 (cfcmms)—043模块导航功能的重构(1)
- 常规功能和模块自定义系统 (cfcmms)—044模块导航功能的重构(2)
- 常规功能和模块自定义系统 (cfcmms)—057 最新版的自定义系统演示
- 常规功能和模块自定义系统 (cfcmms)—042模块Grid的排序和筛选
- java unicode编码 与eclipse 改变编码的关系
- chain.doFilter(request,response)含义
- An App ID with identifier is not available.Please enter a different string. 或者这样的,fail to code sign
- 装饰模式
- IO流知识点
- 常规功能和模块自定义系统 (cfcmms)—027开发日志(创建ManyToMany的column2)
- 树链剖分(二)
- DLL 文件 产生dump
- LinuxShell算术运算
- 数值<1>__笔记(7)
- 20年没堵上股权漏洞,万科沦落到靠安邦搭救,王石也是心大
- SpringMVC+Mybatis框架整合源码 项目 下载 rest websocket html5
- 如何用GAT抓取log
- iOS--分段控件UISegmentedControl