菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

大家好,又见面了,我是全栈君。

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

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

菜鸟学SSH(十八)——Hibernate动态模型+JRebel实现动态创建表

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

后来决定用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动态模型,眼下也算是尝试阶段吧。假设各位谁用过或者对动态模型感兴趣欢迎留言交流。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115886.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • JQuery.validationEngine表单验证插件

    JQuery.validationEngine表单验证插件一、说明JQuery.validationEngine表单验证控件功能强大,自带了样式显示模式:1.字符类型:非空验证、最大长度、最小长度、相等判断、数字和空格、数字和英文字母2.数字类型:数字、整数、最大值、最小值3.日期类型:日期(yyyy-MM-dd/yyyy/MM/dd等)、日期+时间、最小日期、最大日期、日期时间段4.业务字段:url、email、phone、ipv

  • 面向新手的Web服务器搭建(一)——IIS的搭建[通俗易懂]

    面向新手的Web服务器搭建(一)——IIS的搭建[通俗易懂]很多童鞋说自己是做移动开发的,想挂个简单的WebAPI,可是服务器又不会搭,这样一来测试就成了问题。看看网上的教程,发现略难懂,而且大多是一个转一个,没价值,所以干脆写几篇文章讲讲简单的Web服务器怎么搭,让不太涉及Web的童鞋快速上手。

  • 什么是lamp架构_什么是LAMP

    什么是lamp架构_什么是LAMPLAMP架构介绍LAMP动态网站架构LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。1、LAMP分别代表什么?L代表服务器操作系统使用LinuxA代表网站服务使用的是Apache软件基金会中的httpd软件M代表网站后台使用的数据库是MySQL数据库P代表网站是使用PHP/Perl/Python等语言开发2、Apache/MySQL/PHP各自有什么作用?2.1Apache(httpd)—–像极了饭店前台作用:提供web服务,

    2022年10月16日
  • 关于cBridge2.0,你不能错过的关键信息(一)!

    关于cBridge2.0,你不能错过的关键信息(一)!我们将持续发布一些短文,来告诉大家cBridge2.0到底为用户和LP们带来了哪些令人激动的迭代。

  • 【原创】无锁编程技术及实现

    【原创】无锁编程技术及实现无锁编程技术及实现作者:jx(360电商技术组) 1.基于锁的编程的缺点 多线程编程是多CPU系统在中应用最广泛的一种编程方式,在传统的多线程编程中,多线程之间一般用各种锁的机制来保证正确的对共享资源(share resources)进行访问和操作。在多线程编程中只要需要共享某些数据,就应当将对它的访问串行化。比如像++count(count是整型变量)这样的简单操作也得加锁,因为即便是增量操作

  • BeanUtils工具类常用方法「建议收藏」

    BeanUtils工具类常用方法「建议收藏」        BeanUtils是Apachecommons组件的成员之一,主要用于简化JavaBean封装数据的操作。它可以给JavaBean封装一个字符串数据,也可以将一个表单提交的所有数据封装到JavaBean中。使用第三方工具,需要导入jar包:BeanUtils工具常用工具类有两个:BeanUtils、ConvertUtils。BeanUtils用于封装数据,ConvertUti…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号