hibernate动态表名映射--仅仅有想不到,没有做不到
近期的一个项目有一个需求,有N个考核单位,要对每一个考核单位生成一张考核情况表。这样做的目的是横切数据库,这这个需求的实现中,我的组员遇到了一个技术问题,我将我的解决的方法和整个思考过程与大家分享,
思路:
用一个配置文件。一个类去映射多个表,(每一个表的结构同样)。依照平时的做法。有多少个表就要 写多少个配置文件,岂不是非常麻烦。如何才干仅仅写一个配置文件就能达到上述目的呢? 经过研究,发现Hibernate中的NamingStrategy能够达到这个目的。
它是用来定义表名和列名映射规 则的一个接口。我们要通过实现这个接口来实现自己的命名策略。这个接口中包括的十个方法,当中的 public String classToTableName(String
className)是通过类名来映射表名的。实现我们的想法就要用 到这种方法。好了,以下来看怎么做:
步骤:
1、自己定义一个类MyNamingStrategy来实现NamingStrategy。(这样你要实现10个方法,假设其它方法 不须要,我们能够通过继承它的一个适配器类DefaultNamingStrategy来仅仅实现我们须要的方法)好了。我 们就继承DefaultNamingStrategy 吧。
2、实现public String classToTableName(String className)方法来实现自己命名策略。
我这的业务须要是每隔一个月就要换一个表。比方1月用biz_1,那么2月就用biz_2….可是这些表的结构是同样的。
我们要做的就是通过获得月份来动态的选择表。我们从这种方法中这样写:
<span style="font-size:18px;">/**
*这个类是又一次定义一个hibernate的命名规范
**/
public class MyNamingStrategy extends DefaultNamingStrategy { //这是为了实现单例
public static final MyNamingStrategy INSTANCE = new MyNamingStrategy(); //又一次定义名称映射关系
public String classToTableName(String className) { //自己的名称定义规则
return “biz_” + Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } } </span>
好了,这样就能够依据月份来动态的选择表名了。
3、使用命名策略。
要使用这个命名策略能够这样:
<span style="font-size:18px;">Configuration cfg = new Configuration()
.setNamingStrategy(MyNamingStrategy.INSTANCE)
.configure(“hibernate.cfg.xml”)
.addFile(“biz.hbm.xml”); </span>
ok,这样就能够实现我们的动态表名映射啦!
总结:
非常多时候,我是常常被自己的思维所束缚,这是我的一种思维惯性,并且我仅仅要找到一种解决这个问题的方法,就会当作宝典收藏,别人有比你好的,也会有种排斥的信息,二者恰恰是阻碍我们进步的牢笼,我们应该冲破这曾牢笼。我们应该更大胆些,想到且看到我们和曾经截然不同的一面!
hibernate动态表名映射--仅仅有想不到,没有做不到的更多相关文章
- hibernate动态表名映射
引自:http://blog.csdn.net/xvshu/article/details/39187779 最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的 ...
- 关于mysql存储过程创建动态表名及參数处理
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 近期游戏開始第二次内測,開始处理操作日志.最開始把日志放到同一个表里面,发现一天时间,平均100玩家 ...
- 数据分表Mybatis Plus动态表名最优方案的探索
一.应用场景 大家在使用Mybatis进行开发的时候,经常会遇到一种情况:按照月份month将数据放在不同的表里面,查询数据的时候需要跟不同的月份month去查询不同的表. 但是我们都知道,Mybat ...
- 使用dao时,如何同时使用动态表名和过滤字段?
使用dao时,如何同时使用动态表名和过滤字段? 发布于 630天前 作者 wukonggg 316 次浏览 复制 上一个帖子 下一个帖子 标签: 无 如题.求样例代码 1 回复 wend ...
- SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- mysql 存储过程 动态表名
今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决 ...
- sqlserver 动态表名 动态字段名 执行 动态sql
动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_execut ...
- Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)
Set类型的使用: <hibernate-mapping package="cn.model"> <class name="Department&quo ...
- Hibernate 多表关联映射- 一对多关系映射(one-to-many)
Hibernage.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...
随机推荐
- ASP.NET-技巧01
==符号的写法 ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "你的密码已更改.&qu ...
- ASP.NET-关于Global.asax的作用
这个文件相当于一个应用程序量级的 全局文件,比如你想写一个变量在项目中的所有文件中都能读取是就写在这里面 Application["name"] = "zhangran& ...
- Android socket 使用PrintWriter和BufferedReader发送和接收出现乱码问题解决
项目中用到了Android和C++的通信.选择了用socket 发送字符的方式,一開始使用的代码是: socket=new Socket(); InetSocketAddress isa = new ...
- leetCode(46):Kth Smallest Element in a BST
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...
- ORA-1157错误解决
一.错误描述 ORA-1157, "cannot identify/lock data file %s - see DBWR trace file" 引起的原因: 因为数据文件已经 ...
- oracle日常维护语句
1.如何查看数据库的状态 unix下 ps -ef | grep ora windows下 看服务是否起来 是否可以连上数据库 SQL> select status, instance_r ...
- vue 组件之间的传值
父向子传值父组件 <v-footer :projectdat="dat"></v-footer> export default { data() { ret ...
- 51nod 1307 绳子与重物 (标记父节点更新即可)
1307 绳子与重物 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量为Wi,绳子的最大负重为Ci. ...
- HTML基础——网站首页显示页面
1.表格标签: border设置边框,align设置位置(居中等),bgcolor设置背景颜色,cellspacing设置边框之间的空隙,cellpadding设置边框与里面内容的间距. table表 ...
- UI控件设置
去掉cesium默认的版权信息: 在style样式中添加 .cesium-widget-credits {display:none !important} 去掉动画控件.地址搜索控件.图层选择控件.操 ...