学习:配置hibernate
最近实现的一系列功能(权限管理,索引持久化等)都涉及到了持久化问题
之前做了一个基于XML的管理插件,只需要在第一次读取的时候使用到XML,之后数据来自缓存,这样可以满足权限管理的功能,但是一旦权限发生动态的变化(将来的需求谁都不清楚啊……),就无法满足了。
且,XML对于索引持久化支持还是不太够,主要体现在索引重构功能点上。当索引文件有成百上千个的时候,等待重新读写、生成XML文件的时间非常非常难受。
再就是,最近又开始涉及到web引用,权限管理后台重新归纳了下需求,期望加入对后台本身的权限管理,发现需要进行大量的代码重编,主要是涉及到重写SQL,工作量略大。
所以,综上考虑,要快速的读写——数据库,要符合Java程序员的思路的代码风格——hibernate。
今天学习了下hibernate,看下配置心得吧。
首先推荐一个网站:
http://grepcode.com
这个网站的开源项目很全,基本涵盖了大部分开源项目的大部分版本,有源码,部分有文档。可以下载,也可以在线看。
最好的一点是,对当前项目的依赖性和常用项目做了归纳。
从这里我下载到了hibernate的一些依赖包。
首先是hibernate本身:
hibernate-3.2.7.ga.jar
然后是其它依赖的jar包:
antlr-2.7.6.jar
asm-all-3.3.1.jar (注意需要的是all版本)
c3p0-0.9.1.jar
cglib-2.2.2.jar(这里推荐使用2.2及以上版本,在2.1版本中会出现反射调用找不到asm中某个类方法的问题)
commons-collections-2.1.1.jar
commons-logging-1.0.4.jar
concurrent-1.3.4.jar
dom4j-1.6.1.jar
jboss-cache-1.2.2.jar(非必须)
jgroups-all-2.2.8.jar(非必须)
jta-1.1.jar
第一次学习,参考的书籍是《HIBERNATE - 符合Java习惯的关系数据库持久化》
现在记录一下配置Hibernate的注意事项:
1、事务类必须是符合Bean规范的,即是setter和getter要满足规范,我们知道hibernate是通过XML配置的内容使用反射来对类进行表-类映射的,即是说它一定有严格的格式要求。
2、*.hbm.xml文件是针对的类的mapping映射文件,.hbm.xml是约定俗成的后缀名,最好不要修改。
格式:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping> [...] </hibernate-mapping>
这个文件的位置并不一定要和类放在一起,它的位置是被hibernate.cfg.xml指定的(当然,配置hibernate有多种方式,properties或者程序制定都是可以的)
映射配置:
<mapping resource="events/Event.hbm.xml"/>
3、hibernate.cfg.xml,这是hibernate的配置文件,它用于指定数据,建立sessionFactory,配置映射文件位置,配置连接池等。
注意一点,hibernate.cfg.xml是个缺省名,你可以任意指定一个名来完成配置。
通过new Configuration().configure(String path);来完成,注意有没有“/”开头的path都是一个效果。
我们来看看查找配置文件位置的代码:
public static InputStream getResourceAsStream(String resource) {String stripped = resource.startsWith("/") ?resource.substring(1) : resource;InputStream stream = null;ClassLoader classLoader = Thread.currentThread().getContextClassLoader();if (classLoader!=null) {stream = classLoader.getResourceAsStream( stripped );}if ( stream == null ) {stream = Environment.class.getResourceAsStream( resource );}if ( stream == null ) {stream = Environment.class.getClassLoader().getResourceAsStream( stripped );}if ( stream == null ) {throw new HibernateException( resource + " not found" );}return stream;}
嗯,它不支持绝对路径。当然在实际应用中绝对路径是没用的。
当然我们也可以自己定义自己期望的寻址方式(估计之后要做的插件化里就需要做这个),比如我自己顺手写了个测试:
package myhibernate;import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream;import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; import org.hibernate.cfg.Configuration; import org.hibernate.util.ConfigHelper;public class MyConfiguration extends Configuration {/*** */private static final long serialVersionUID = 4590539009267996973L;private static Log log = LogFactory.getLog(MyConfiguration.class);protected InputStream getConfigurationInputStream(String resource)throws HibernateException {log.info("Configuration resource: " + resource);try {return new FileInputStream(resource);} catch (FileNotFoundException e) {e.printStackTrace();}return ConfigHelper.getResourceAsStream(resource);} }
如此,就可以在项目根目录找到.cfg.xml文件了。
同理的,如果对addResources进行重写,就可以修改.hbm.xml映射文件的寻址位置了
如下:
public Configuration addResource(String resourceName)throws MappingException {try {return addInputStream(new FileInputStream(resourceName));} catch (MappingException me) {throw new InvalidMappingException("resource", resourceName, me);} catch (FileNotFoundException e) {e.printStackTrace();}return super.addResource(resourceName);}
以上,则完成了hibernate的配置。
但是在开发的时候,.cfg.xml文件需要出现在.class能找到的位置上,即是说,src文件夹是不可取的。
所以,我们需要把他们放置在合用的位置,比如bin。
使用eclipse,myeclipse就没有这些烦恼。
学习:配置hibernate相关推荐
- java hibernate详细_Java事务管理学习之Hibernate详细介绍
hibernate是jdbc轻量级的封装,本身不具备事务管理的能力,在事物管理层面,一般是委托于底层的jdbc和jta来完成调度的.下面这篇文章主要给大家介绍了Java事务管理学习之Hibernate ...
- 在JAVA EE中配置hibernate以及hibernate hello world
为什么80%的码农都做不了架构师?>>> 这篇文章主要介绍hibernate的配置以及如何实现hello world.至于如何使用maven等工具获取到hibernate的ja ...
- 配置hibernate手动配置
为什么80%的码农都做不了架构师?>>> 手动配置: 1.CROD 操作 界面 testmain.java Domain service 数据持久层 数据库 Mysql Ore ...
- Hibernate基础学习(二)—Hibernate相关API介绍
一.Hibernate的核心接口 所有的Hibernate应用中都会访问Hibernate的5个核心接口. (1)Configuration接口: 配置Hibernate,启动Hibernate,创建 ...
- Hibernate学习之Hibernate注解总结
Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...
- 框架学习之Hibernate 第十节 事务原理与分析
1.事务 两种事务: ① JDBC事务:单个数据库的事务 一个SesisonFactory对应一个数据库,使用 JDBC 实现 常用代码的模板: Session session = null;Tran ...
- Spring –持久层–编写实体并配置Hibernate
欢迎来到本教程的第二部分. 当您看到本文有多长时间时,请不要惊慌–我向您保证,这主要是简单的POJO和一些生成的代码. 在开始之前,我们需要更新我们的Maven依赖项,因为我们现在将使用Hiberna ...
- Spring中配置Hibernate事务的四种方式
2019独角兽企业重金招聘Python工程师标准>>> 为了保证数据的一致性,在编程的时候往往需要引入事务这个概念.事务有4个特性:原子性.一致性.隔离性.持久性. 事务的种类有两种 ...
- 快捷配置Hibernate实现对数据库的配置(构建通道)
在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(* ...
最新文章
- python 基础笔记十一 - random模块
- webService的简单使用
- idea中查看类的继承关系图
- python openpyxl读写xlsx_python高阶教程-python操作xlsx文件(openpyxl)
- java中List Set Map使用
- 【janino】janino 加载自定义函数报错 CompileException xxx cannot be invoked in static context
- 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
- /a.out , nohut ./a.out , nohup ./a.out 的区别
- Android布局文件怎样转java,android studio中从布局文件到mainactivity.java的控制流
- Java nextInt()函数
- centos7 yum安装zabbix监控
- cass转换jpg_怎么把CAD图转换成清晰的JPG等其他格式图形文件
- utools插件合集 v1.3.5绿色版
- 【记录】qt.qpa.screen: Could not connect to any X display 解决方案
- 搜索竞价推广方式OCPC VS CPC,谁更强
- P3P求解相机姿态原理介绍
- 数据科学必备用Python进行描述性统计数据分析详解
- 京东直营店和自营店有哪些区别?
- 业务单据堆积如山?如何提升会计做账效率?
- BD15AAANB10派克伺服阀
热门文章
- 在Vue中为什么需要组合API
- go语言通道插入0_使用Go语言常遇到的问题
- WebPack配置文件抽离存放
- ubuntu 编译 hercules 主机安装 z/OS 教程
- java 排序 内存_Java内存模型(二)——重排序
- linux httpd 自动启动,在Linux启动时让Apache也自动启动
- android 动态生成直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...
- signature=27524ebaa2473e38aa641bf251dcf3cf,[Without Title]
- Windows下部署yolov5实现口罩检测
- Proxmark3 Easy Gui 4.0 5.0 5.1全卡克隆已解密的IC卡