最近实现的一系列功能(权限管理,索引持久化等)都涉及到了持久化问题

之前做了一个基于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相关推荐

  1. java hibernate详细_Java事务管理学习之Hibernate详细介绍

    hibernate是jdbc轻量级的封装,本身不具备事务管理的能力,在事物管理层面,一般是委托于底层的jdbc和jta来完成调度的.下面这篇文章主要给大家介绍了Java事务管理学习之Hibernate ...

  2. 在JAVA EE中配置hibernate以及hibernate hello world

    为什么80%的码农都做不了架构师?>>>    这篇文章主要介绍hibernate的配置以及如何实现hello world.至于如何使用maven等工具获取到hibernate的ja ...

  3. 配置hibernate手动配置

    为什么80%的码农都做不了架构师?>>>    手动配置: 1.CROD 操作 界面 testmain.java Domain service 数据持久层 数据库 Mysql Ore ...

  4. Hibernate基础学习(二)—Hibernate相关API介绍

    一.Hibernate的核心接口 所有的Hibernate应用中都会访问Hibernate的5个核心接口. (1)Configuration接口: 配置Hibernate,启动Hibernate,创建 ...

  5. Hibernate学习之Hibernate注解总结

    Hibernate学习之Hibernate注解总结http://www.bieryun.com/3269.html 一.类级别的注解 @Entity name:表的名字(可选)一般表名和类名相同 必须 ...

  6. 框架学习之Hibernate 第十节 事务原理与分析

    1.事务 两种事务: ① JDBC事务:单个数据库的事务 一个SesisonFactory对应一个数据库,使用 JDBC 实现 常用代码的模板: Session session = null;Tran ...

  7. Spring –持久层–编写实体并配置Hibernate

    欢迎来到本教程的第二部分. 当您看到本文有多长时间时,请不要惊慌–我向您保证,这主要是简单的POJO和一些生成的代码. 在开始之前,我们需要更新我们的Maven依赖项,因为我们现在将使用Hiberna ...

  8. Spring中配置Hibernate事务的四种方式

    2019独角兽企业重金招聘Python工程师标准>>> 为了保证数据的一致性,在编程的时候往往需要引入事务这个概念.事务有4个特性:原子性.一致性.隔离性.持久性. 事务的种类有两种 ...

  9. 快捷配置Hibernate实现对数据库的配置(构建通道)

    在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(* ...

最新文章

  1. python 基础笔记十一 - random模块
  2. webService的简单使用
  3. idea中查看类的继承关系图
  4. python openpyxl读写xlsx_python高阶教程-python操作xlsx文件(openpyxl)
  5. java中List Set Map使用
  6. 【janino】janino 加载自定义函数报错 CompileException xxx cannot be invoked in static context
  7. 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
  8. /a.out , nohut ./a.out , nohup ./a.out 的区别
  9. Android布局文件怎样转java,android studio中从布局文件到mainactivity.java的控制流
  10. Java nextInt()函数
  11. centos7 yum安装zabbix监控
  12. cass转换jpg_怎么把CAD图转换成清晰的JPG等其他格式图形文件
  13. utools插件合集 v1.3.5绿色版
  14. 【记录】qt.qpa.screen: Could not connect to any X display 解决方案
  15. 搜索竞价推广方式OCPC VS CPC,谁更强
  16. P3P求解相机姿态原理介绍
  17. 数据科学必备用Python进行描述性统计数据分析详解
  18. 京东直营店和自营店有哪些区别?
  19. 业务单据堆积如山?如何提升会计做账效率?
  20. BD15AAANB10派克伺服阀

热门文章

  1. 在Vue中为什么需要组合API
  2. go语言通道插入0_使用Go语言常遇到的问题
  3. WebPack配置文件抽离存放
  4. ubuntu 编译 hercules 主机安装 z/OS 教程
  5. java 排序 内存_Java内存模型(二)——重排序
  6. linux httpd 自动启动,在Linux启动时让Apache也自动启动
  7. android 动态生成直线,Android使用自定义view在指定时间内匀速画一条直线的实例代码...
  8. signature=27524ebaa2473e38aa641bf251dcf3cf,[Without Title]
  9. Windows下部署yolov5实现口罩检测
  10. Proxmark3 Easy Gui 4.0 5.0 5.1全卡克隆已解密的IC卡