近期的一个项目有一个需求,有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. ubuntu 14.04服务器上使用nginx搭建wordpress博客详解

    过程详解 1.更新apt-get sudo apt-get update 2.安装nginx sudo apt-get install nginx 3.启动nginx sudo service ngi ...

  2. nodejs 中使用 ftp

    转自原文 nodejs 中使用 ftp 1.  npm install ftp 项目 https://github.com/mscdex/node-ftp 2.  转自 http://www.open ...

  3. HDU 4035

    dp求期望的题. 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望.E[1]即为所求. 叶子结点: E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i] ...

  4. Leetcode--easy系列4

    #58 Length of Last Word Given a string s consists of upper/lower-case alphabets and empty space char ...

  5. mybatis学习笔记(7)-输出映射

    mybatis学习笔记(7)-输出映射 标签: mybatis mybatis学习笔记7-输出映射 resultType 输出简单类型 输出pojo对象和pojo列表 resultMap result ...

  6. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

  7. BZOJ 2844 高斯消元 线性基

    思路: //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using ...

  8. C++如何调用C#编写的 DLL

    由于C#编绎出来的DLL不是计算机所能直接识别的二进制指令码,需要CLS进行再解释,说到这,我想有些朋友应该知道C#项目需要引用C++编写的DLL时,可以直接引用DLLMPORT来实现调用,而反向的话 ...

  9. IEEE Access的模板的问题

    这个模板果然问题还是有一些,比如caption换行得自己改class文件.首先感谢一下CSDN的一位网友的经验https://blog.csdn.net/baidu_21381705/article/ ...

  10. 003.JMS概述

    1. 基本概念 JMS:Java Message Service, Java消息服务,是Java EE中的一个技术. JMS规范:JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS ...