最近一个项目中需要有自动生成表的功能进行数据转储,因为ORM用的是hibernate,因为我决定用hibernate实现,不仅操作方便而且易于查询。现将代码贴到此供大家学习交流。
后台的实体类映射基本都是基于注解的,但是动态生成的话还是应该选择配置文件,因为配置文件灵活易操作。
1、首先定义一个模板文件,文本的就行,配置通用属性。
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.sevenlevel.demo.User">
<!--注意entity-name,如果没有此属性的话会报重复映射异常-->
<class name="HistoryAuditInfo" table=":tableName" entity-name=":tableName">
<id name="id" column="ID" length="32">
<generator class="uuid.hex" />
</id>
<property name="name" column="C_001" />
<property name="age" column="C_002" />
</class>
</hibernate-mapping>
2、生成具体的hbm.xml配置文件
然后就是生成配置文件了,比如我要生成一张叫d_001的表,可以使用FileUtils.read()方法读取到内容后然后replaceAll(":tableName","d_001")后write到任意位置。
3、生成表和操作数据
这一步需要借助Hibernate的Configuration类完成,如果集成了Spring了的话可使用context.getBean("&sessionFactory")获取。
ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[] { "classpath:**\\spring\\session_factory.xml" });
LocalSessionFactoryBean lsf = (LocalSessionFactoryBean) ac.getBean("&sessionFactory");
Configuration cfg = lsf.getConfiguration();
cfg.setProperty(Environment.FORMAT_SQL, "true")
.addResource("cn/sevenlevel/test/dynamic.hbm.xml");
new SchemaUpdate(cfg).execute(true, true);
SessionFactory sf = cfg.buildSessionFactory();
Session s = sf.openSession();
User user=new User("张三",20);
s.save("d_001",user);
org.hibernate.Transaction tx = s.beginTransaction();
tx.commit();
s.close();
齐活!
作者邮箱:wangxiaomu@foxmail.com