zoukankan      html  css  js  c++  java
  • 菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

    项目用的是SSH基础框架,当中有一些信息非常相似,但又不尽同样。假设每个建一个实体的话,那样实体会太多。假设分组抽象,然后继承,又不是特别有规律。鉴于这样的情况。就打算让用户自己配置要加入的字段,然后生成相应的表。


    须要动态配置的部分实例:



    上图仅仅是一小部分,一个一个组合起来大概有三百多。每一项相应一个实体,显然不好,就算是依照规律归归类还是有不少。于是就想到了在执行期来确定这些东西。開始有尝试过动态编译生成实体类,后来发如今数据存取上都存在问题,由于是后来生成的,所以仅仅能用反射来获取。这样一来无法事先确定类型,也就没法用注入的方式接收前端传过来的数据,也不能向前端提供数据了。

    后来决定用Hibernate的动态模型来处理这个问题,可能有的人不是非常了解Hibernate的动态模型,以下我们就来介绍一下。


    我们通经常使用实体类来跟表进行映射。当我们须要一个user表的时候,通常都须要写一个相似以下的实体类:

    public class User {
    	private Long id;
    	private String name;
    	private String password;
    	
    	// setter、getter...	
    }

    然后用配置文件或注解来描写叙述映射关系,假设使用动态模型的话,则不须要编写实体类,仅仅须要写一个配置文件就可以:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    
    <hibernate-mapping>
    	<!-- 此处不须要类名。和包名 -->  
    	<class entity-name="User">
    		<id name="id" type="java.lang.Long" column="ID">
    			<generator class="native"/>
    		</id>
    		<property name="name" type="java.lang.String" column="name"/>
    		<property name="password" type="java.lang.String" column="password"/>
    	</class>
    </hibernate-mapping>

    然后通过Map进行操作:

    session.beginTransaction();
    //通过Map映射实体与数据库
    Map user = new HashMap();
    user.put("name", "动态模型");
    user.put("password", "123456");
    session.save("User", user);
    session.getTransaction().commit();
    session.close();

    发出的SQL语句:insert into User (name, password) values (?, ?)


    有人说动态映射存入数据非常方便。 可是从数据取出数据好像比較难处理。事实上这个问题能够通过事先做好约定来解决。


    上一篇博客介绍了JRebel,它能够让Tomcat支持热部署。JRebel+Hibernate动态模型双剑合璧。就能够实现我们动态建表的要求了。


    在Spring的配置文件里加入:

    <property name="mappingLocations">  
    	<list>  
    		<value>classpath:/com/tgb/entitycfg/*.hbm.xml</value>  
    	</list>  
    </property>

    採用通配符来配置hbm.xml文件。就是为了兼容执行期生成的动态模型配置文件,而JRebel能够检測到配置文件的变化,从而将新增的配置载入进来。须要说明的是JRebel的动态载入属于懒载入,即在你用到改动的东西是,才会将你改动的内容又一次载入进来。


    我也是初次使用Hibernate动态模型,眼下也算是尝试阶段吧。假设各位谁用过或者对动态模型感兴趣欢迎留言交流。



  • 相关阅读:
    gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
    PHP学习-链接数据库
    教程笔记《JavaScript深入浅出》
    读书笔记《高性能网站建设指南》之雅虎军规
    CSS3边框图片-像素虚边的问题
    WebStorm设置手机测试服务器-局域网内其他设备访问
    gulp的安装和使用
    H5canvas赛车游戏-基于lufylegend引擎
    WebStorm设置左侧菜单栏背景色和样式
    基于jquery的-获取短信验证码-倒计时
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5221078.html
Copyright © 2011-2022 走看看