mysql函数的创建以及hibernate调用mysql自定义函数以及数据对比功能,模仿中关村在线
来源:互联网 发布:幼儿园用的软件 编辑:程序博客网 时间:2024/06/10 04:06
系统业务有这样一个需求,每次版本进行变更时间,则需要创建新的记录,而不是在原来的基础上更替旧版本。
基于这样一个小小的需求,所有在数据库的设计时间,进行了表的自连接,当然这个只是假象的自连接,没有进行表自身的外键的映射;当有了很多的数据之后,需要加这个外键已经提示无法进行,只有把数据进行清空方可进行添加,但是表又是和很多的表做了外键的映射,总起来说就是一句话,表自身无法创建外键。
由此想到了只能用mysql的函数去处理了,做一个递归处理,来查询相应的信息。自己使用的是sqlyog这样一个客户端工具,创建function,就是直接在funciton右键就可以了,经过一段时间的编写,sql语句代码如下
DELIMITER $$CREATE /*[DEFINER = { user | CURRENT_USER }]*/ FUNCTION `pdm`.`getRelateData`( id VARCHAR(36)) RETURNS VARCHAR(2000) BEGIN DECLARE allIds VARCHAR(2000); DECLARE idTemp VARCHAR(36); DECLARE rootid VARCHAR(36); DECLARE tempRootId VARCHAR(36); DECLARE xin INT; SET allIds = '';/*根据传入的id找到最根的id*/SELECT relate_ver_rowid INTO tempRootId FROM <span style="font-family: Arial, Helvetica, sans-serif;">xxxxx</span>WHERE row_id = id;SET rootid = id;WHILE tempRootId IS NOT NULL AND tempRootId !='' DO SET rootid = tempRootId; SELECT relate_ver_rowid INTO tempRootId FROM <span style="font-family: Arial, Helvetica, sans-serif;">xxxxx</span> WHERE row_id = tempRootId;END WHILE; /*根据最根的rootid进行找所有的数据*/ SET idTemp = rootid; SELECT COUNT(*) INTO xin FROM <span style="font-family: Arial, Helvetica, sans-serif;">xxxxx</span>WHERE relate_ver_rowid = idTemp; WHILE xin >0 DO SET allIds = CONCAT(allIds,',',idTemp);SELECT row_id INTO idTemp FROM <span style="font-family: Arial, Helvetica, sans-serif;">xxxxx</span>WHERE relate_ver_rowid = idTemp;SELECT COUNT(*) INTO xin FROM <span style="font-family: Arial, Helvetica, sans-serif;">xxxxx</span>WHERE relate_ver_rowid = idTemp; END WHILE; IF xin = 0 THENSET allIds = CONCAT(allIds,',',idTemp); END IF; RETURN allIds; END$$DELIMITER ;
然后进行测试没有问题,接下来的问题就是怎么样在hibernate使用,这个地方我也不卖关子了,直接贴代码
业务层:
List<String> list = struDao.executeSql(" select getRelateData(?)", new Object[]{dc.getRowId()});
数据层:
Query q = this.getCurrentSession().createSQLQuery(sql);<span style="white-space:pre"></span>if (param != null && param.length > 0) {<span style="white-space:pre"></span>for (int i = 0; i < param.length; i++) { <span style="white-space:pre"></span>q.setParameter(i, param[i]);}}List list = q.list();以上就是所有的代码,然后在去做其他的内容就可以了
关于模仿中关村在线的数据对比功能在接下来的某一天会进行详细的解释,敬请期待!
转载请注明出处,代码都是一点一点码的!!!
1 0
- mysql函数的创建以及hibernate调用mysql自定义函数以及数据对比功能,模仿中关村在线
- mysql的c函数接口以及c++接口的对比
- mysql 命令以及函数
- mysql创建自定义函数
- mysql创建自定义函数
- MySQL创建自定义函数
- MySQL的YEARWEEK函数以及查询本周数据
- MySQL的YEARWEEK函数以及查询本周数据
- mysql开启创建函数的功能
- Mysql常用的数据类型以及转换函数
- mysql的日期函数以及应用
- Mysql console整数time以及IP查询相关函数调用
- mysql find_in_set函数以及group_concat
- mysql函数以及递归sql
- Mysql分组以及聚合函数
- MySql分组以及聚合函数
- MySQL 创建用户自定义函数
- MYSQL的函数功能
- 简单错误记录
- Android学习记录-ListView
- LeetCode:Word Pattern
- Asus Xtion Pro Live驱动
- 阻塞赋值与非阻塞赋值
- mysql函数的创建以及hibernate调用mysql自定义函数以及数据对比功能,模仿中关村在线
- 利用photoshop切图
- 两分钟学会在GitHub托管代码
- 常用参考网站
- Milk(sort+结构体) hd 1070
- MySQL 设置数据按条件查询下的序号
- Java基础之(八)方法覆盖
- HDU 5723 Abandoned country
- [LeetCode] 31. Next Permutation