近期的一个项目有一个需求,有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动态表名映射--仅仅有想不到,没有做不到的更多相关文章

  1. hibernate动态表名映射

    引自:http://blog.csdn.net/xvshu/article/details/39187779 最近的一个项目有一个需求,有N个考核单位,要对每个考核单位生成一张考核情况表,这样做的目的 ...

  2. 关于mysql存储过程创建动态表名及參数处理

      转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)  近期游戏開始第二次内測,開始处理操作日志.最開始把日志放到同一个表里面,发现一天时间,平均100玩家 ...

  3. 数据分表Mybatis Plus动态表名最优方案的探索

    一.应用场景 大家在使用Mybatis进行开发的时候,经常会遇到一种情况:按照月份month将数据放在不同的表里面,查询数据的时候需要跟不同的月份month去查询不同的表. 但是我们都知道,Mybat ...

  4. 使用dao时,如何同时使用动态表名和过滤字段?

    使用dao时,如何同时使用动态表名和过滤字段?  发布于 630天前  作者 wukonggg  316 次浏览  复制  上一个帖子  下一个帖子  标签: 无 如题.求样例代码 1 回复 wend ...

  5. SpringBoot与MybatisPlus3.X整合之动态表名 SQL 解析器(七)

    pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...

  6. mysql 存储过程 动态表名

    今天写存储过程时,遇到要将表名最为参数的问题,如果不涉及到游标的话,使用prepare可以解决问题,但是,动态表名要运用在游标中的话,则prepare就得靠边站了. 集众人之智慧,最后,使用临时表解决 ...

  7. sqlserver 动态表名 动态字段名 执行 动态sql

    动态语句基本语法: 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_execut ...

  8. Hibernate 多表关联映射- Hibernate中使用的集合类型(set,list,array,bag,map)

    Set类型的使用: <hibernate-mapping package="cn.model"> <class name="Department&quo ...

  9. Hibernate 多表关联映射- 一对多关系映射(one-to-many)

    Hibernage.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...

随机推荐

  1. HDU 4334 Contest 4

    本来以为是一道水题,好吧,做了才知道,出题的人有多牛.二分搜索是不可能的了,因为会超内存... 看到别人的搜索两个集合的提示,我就自己一边去想了.终于想出来了: 可以这样做,先把每两个集合的和值枚举出 ...

  2. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER

    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER ...

  3. C++ Primer Plus的若干收获--(三)

    有时候怀疑真是怀疑自己走的路究竟是不是正确的.作为一个土生土长数学系学生,却对数学毫无兴趣,没事的时候就喜欢躲在图书馆看看有关计算机的书.有时候期末考试时候会挂个一两门的数学专业课,有时候真希望数学课 ...

  4. Android 6.0 开发人员对系统权限的使用与练习(Permissions Best Practices)

    Permissions Best Practices 在安装的过程中,用户非常easy忽略权限请求. 假设一个用户相应用感觉沮丧或者操心泄漏个人信息,那么这些用户就会不用他或者卸载它. 怎样规避这个问 ...

  5. 在GitHub上使用Hexo搭建静态博客

    搭建静态博客须要一个前提是电脑上有安装git而且有github帐号,这个不懂能够看廖雪峰先生的git教程 1.下载nodejs.在官网上能够下载 2.使用git进入你新建的一个目录,输入命令 npm ...

  6. linux使用windows中编辑的文件,格式问题

    参考:https://blog.csdn.net/yongan1006/article/details/8142527 运行脚本时出现了这样一个错误,打开之后并没有找到所谓的^M,查了之后才知道原来是 ...

  7. hdoj--1384--Intervals(差分约束)

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...

  8. VMware虚拟机ubuntu显示屏幕太小解决办法

    使用VMware安装的ubuntu虚拟机的显示屏幕太小,可以通过在VMware里安装"VMware Tool"插件解决,安装步骤记录一下. 1. 更改ISO文件路径 安装VMwar ...

  9. Python一行代码获得IP地址

    比较靠谱的方法, 通过构造UDP包获得本机IP地址   python -c "import socket;print([(s.connect(('8.8.8.8', 53)), s.gets ...

  10. xBIM 基础07 创建WebBIM文件

    系列目录    [已更新最新开发文章,点击查看详细]  xBIM项目提供了一个IFC文件的Web查看器.当你想把IFC转换成紧凑的WexBIM时,需要 xBIM Essentials 和 xBIM G ...