转载请注明出处:http://blog.csdn.net/tyhj_sf/article/details/51851163

引言

Hibernate是一个轻量级的持久层开源框架,它是连接java应用程序和关系数据库的中间件,负责java对象和关于Hibernate内部对JDBC API进行封装,负责java对象的持久化。由于他封装了所有的数据訪问细节,使的业务逻辑层开发专注于实现,它是一种优秀的ORM映射工具,提供了完好的对象–关系映射服务。开发过程不依赖容器。灵活性非常大,开源无缝集成到不论什么一个java系统中。

Hibernate5配置

版本号



这里是下载地址:http://hibernate.org/orm/

涉及到訪问数据库还须要数据库驱动器相关的jar包:

搭建使用hibernate的开发环境

你能够创建一个Java project或者一个web project。以上的方式创建的项目均可測试hibernate环境。

本次以创建一个web工程的方式演示搭建开发环境的具体步骤。

1)创建一个web项目。



2)将相关hibernate的包和数据库驱动器的包导入到例如以下图路径:



注意:hibernate的jar包,选择例如以下指定路径下的所有jar将其导入。

3)(在线安装eclipse的插件:hibernate tools。方便编辑”.cfg.xml”和“hbm.xml”格式的文件。安装方法若不熟可自行Google或百度,非本文重点。不再细说。



在src目录创建hibernate.cfg.xml文件:

<?xml version="1.0" encoding="UTF-8"?

>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/example/domain/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>

上面这个配置文件主要是数据库连接的相关配置,仅仅要配置成你自己的数据库设置就可以。

对于这个maping属性:

<mapping resource="com/example/domain/User.hbm.xml"/>

在你创建完以下的步骤 4和5后,就能够补上,假设有多个javabean类及相应的 **.hbm.xml文件。就须要加入多个这种maping属性。

4)创建你的项目中的javabean类,如User.java

public class User implements Serializable{

    /**
*
*/
private static final long serialVersionUID = 2015771159L; // @Id
// @Basic(fetch=FetchType.EAGER)
// @GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
// @Basic(fetch=FetchType.LAZY)
// @Column(length=50)
private String emailName;
// @Basic(fetch=FetchType.LAZY)
// @Column(length=50)
private String emailPassword; public User() {
// TODO Auto-generated constructor stub
} public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getEmailName() {
return emailName;
}
public void setEmailName(String emailName) {
this.emailName = emailName;
}
public String getEmailPassword() {
return emailPassword;
}
public void setEmailPassword(String emailPassword) {
this.emailPassword = emailPassword;
}
@Override
public int hashCode() {
return id != null ? id.hashCode() : 0;
} @Override
public boolean equals(Object o) {
if ( this == o ) {
return true;
}
if ( !( o instanceof User ) ) {
return false;
} if ( id == null ) {
return false;
} return id.equals( ((User) o).id );
} @Override
public String toString() {
// TODO Auto-generated method stub
return super.toString()+"[id="+id+"EmailName="+emailName+"EmailPassword="+emailPassword+"]";
}

5)编写数据库表及字段到javabean类User的映射文件。

这个样例中必须创建为文件名称:User.hbm.xml,能够放User类所在包中。

<?xml version="1.0"?

>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-7-8 1:31:59 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.example.domain.User" table="USER">
<id name="id" type="java.lang.Long">
<column name="ID" not-null="true"/>
<generator class="increment"/>
</id>
<property generated="never" lazy="false" name="emailName" type="java.lang.String">
<column length="50" name="EMAILNAME" not-null="false"/>
</property>
<property generated="never" lazy="false" name="emailPassword" type="java.lang.String">
<column name="EMAILPASSWORD"/>
</property>
</class>
</hibernate-mapping>

Hibernate5的使用

接着上述的几节内容。我来说说做关键部分,hibernate的使用。

这一部分我建议看看hibernate的官方文档。毕竟网上的样例各种hibernate版本号的样例都有。不同版本号提供的接口不同,用法也有非常多差别,并且最新的hibernate版本号的使用demo非常难找到。

基本使用思路

**在使用Hibernate运行持久化操作前。须要得到一个Session对象。有了Session对象,就能够以面向对象的方式保存、获取、更新和删除对象。

Session对象能够通过SessionFactory(会话工厂类)的openSession方法来获得。

因此还须要获取SessionFactory对象**,它通过例如以下方式获得:

final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.configure() // 默认使用src目录下的hibernate.cfg.xml进行配置,若更改了路径,要附加上包路径如:"/com/example/hibernate.cfg.xml"
.build();
try {
sessionFactory = new MetadataSources( registry ).buildMetadata().buildSessionFactory();
}
catch (Exception e) {
StandardServiceRegistryBuilder.destroy( registry );
}

或者通过例如以下方式获得:

Configuration configuration = new Configuration();// 默认使用src目录下的hibernate.cfg.xml进行配置,若更改了路径。要附加上包路径如:"/com/example/hibernate.cfg.xml"
SessionFactory sf = configuration.configure().buildSessionFactory();
Session session = sf.openSession();

使用Junit測试搭建的hibernate开发环境

注意測试function中示范了hibernate的用法,这能够用在实际的开发项目中。

Userdao.java的完整源代码:

public class UserDao {

    public UserDao() {
// TODO Auto-generated constructor stub
}
public static SessionFactory getSessionFactoryInstance(){
if (sessionFactory==null) {
synchronized (SessionFactory.class) {
if (sessionFactory==null){
config=new Configuration().configure("me/seekout/wanlizhuizong/hibernate.cfg.xml");//若不指定。默认在目录src下
//使用默认配合文件。hibernate.cfg.xml
return config.buildSessionFactory();
//另外一种写法。
// StandardServiceRegistry standardServiceRegistry=new StandardServiceRegistryBuilder().configure("me/seekout/wanlizhuizong/hibernate.cfg.xml").build();
// Metadata metadata = new MetadataSources( standardServiceRegistry ).getMetadataBuilder().applyImplicitNamingStrategy(ImplicitNamingStrategyJpaCompliantImpl.INSTANCE).build();
// return metadata.getSessionFactoryBuilder().build(); }
}
}
return sessionFactory;
} /**
* @param id
* @return
* @throws Exception
*/
public User queryById(long id) throws Exception {
SessionFactory sessionFactory = HibernateConfigContext
.getSessionFactoryInstance();
Session session = sessionFactory.openSession();
Transaction transaction = null;
User user = null;
try {
transaction = session.beginTransaction();
user = (User) session.get(User.class, id);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
sessionFactory.close();
} return user;
} /**
* @param user
* 首次保存会生成id
* @throws Exception
*/
public void save(User user) throws Exception {
System.out.println("保存User数据");
SessionFactory sessionFactory = HibernateConfigContext
.getSessionFactoryInstance();
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.save(user);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
sessionFactory.close();
}
} /**
* @param user
* 已知id的User实例。 * @throws Exception
*/
public void update(User user) throws Exception {
SessionFactory sessionFactory = HibernateConfigContext
.getSessionFactoryInstance();
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.update(user);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
sessionFactory.close();
}
} /**
* @param user
* 要删除的user,已经保存到数据库的,id分配
* @throws Exception
*/
public void delete(User user) throws Exception {
SessionFactory sessionFactory = HibernateConfigContext
.getSessionFactoryInstance();
Session session = sessionFactory.openSession();
Transaction transaction = null;
try {
transaction = session.beginTransaction();
session.delete("User", user);
transaction.commit();
} catch (Exception e) {
// TODO: handle exception
if (transaction != null) {
transaction.rollback();
}
throw e;
} finally {
session.close();
sessionFactory.close();
}
} }

Junit測试程序:

public class UserTest extends TestCase {

    public UserTest(String name) {
super(name);
} protected void setUp() throws Exception {
super.setUp();
} protected void tearDown() throws Exception {
super.tearDown();
} public void testSave() {
UserDao userDao=new UserDao();
User user=new User();
user.setEmailName("tyhj_sf@163.com");
user.setEmailPassword("ty123456789");
try {
userDao.save(user);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void testQueryById() {
UserDao userDao=new UserDao();
User user=new User();
user.setId(1L);
user.setEmailName("tyhj_sf@163.com");
user.setEmailPassword("ty123456789");
try {
assertEquals(user,userDao.queryById(1));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void testUpdate() {
UserDao userDao=new UserDao();
User user=new User();
user.setId(1L);
user.setEmailName("tyhj_sf@163.com");
user.setEmailPassword("aaasss");
try {
userDao.update(user);
assertEquals(user,userDao.queryById(1));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} public void testDelete() {
UserDao userDao=new UserDao();
User user=new User();
user.setId(1L);
user.setEmailName("tyhj_sf@163.com");
user.setEmailPassword("aaasss");
try {
userDao.delete(user);
assertNull(userDao.queryById(1));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

很多其它的数据库其它操作參照以上測试用例写就可以。Session类提供了大量方便的操作方法接口,能够參考javadoc文档使用。

Hibernate5配置与使用具体解释的更多相关文章

  1. Nginx配置文档具体解释

    Nginx的配置文档具体解释.在这儿做个总结,以便以后使用的时间查看. 下面大部分自己整理.部分来自參考 #设置用户 #user  nobody; #启动进程数(一般和server的CPU同样) #能 ...

  2. Spring MVC基本配置@controller和@RequestMapping解释

    一:配置web.xml 1)问题:spring项目中有多个配置文件mvc.xml   dao.xml 2)解决:在web.xml中 <init-param> <param-name& ...

  3. Nginx+ffmpeg的HLS开源server搭建配置及开发具体解释

    本文概述: 至眼下为止.HLS 是移动平台上很重要并十分流行的流媒体传输协议.做移动平台的流媒体开发,不知道它不掌握它 .真是一大遗憾.而HLS的平台搭建有一定的难度,本文针对对该方向有一定了解的朋友 ...

  4. MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. Nginx中location配置[转]

    关于一些对location认识的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我 ...

  6. windows mysql安装、配置

    一.MySQL的下载: 上图中,我们选择红框部分的社区版本进行下载,MySQL支持许多平台: 我的操作系统是64位的,选择对应版本MSI版下载,弹出login界面, 选择no thanks,just ...

  7. 【CNMP系列】PHP配置和调优

    上一节我们说到PHP5.6.30在CentOS7.0下的整个安装过程,http://www.cnblogs.com/riverdubu/p/6428226.html 今天我来和大家讲解一下PHP-FP ...

  8. Spring Security3详细配置

    Spring Security3详细配置 表名:RESOURCE 解释:资源表备注: 资源表 RESOURCE(资源表) 是否主键 字段名 字段描述 数据类型 长度 可空 约束 缺省值 备注 是 ID ...

  9. Linux系统centOS7在虚拟机下的安装及XShell软件的配置

    前面的话 本文将详细介绍Linux系统centOS7在虚拟机下的安装 准备工作 [系统下载] 在安装centOS7之前,首先在官网下载合适的版本 然后,选择一个链接下载即可 [虚拟机配置] 接下来,需 ...

随机推荐

  1. vue之filter用法

    1.全局写法: 全局过滤器必须写在vue实例创建之前. Vue.filter('testfilter', function (value,text) { // 返回处理后的值 return value ...

  2. 【转】 HtmlAgilityPack使用——XPath注意事项

    [转] HtmlAgilityPack使用——XPath注意事项 在使用HtmlAgilityPack这个开源的类库进行网页内容解析的时候是非常的方便(使用方法见另一篇博客<HTML解析:基于X ...

  3. spring mvc 防止重复提交表单的两种方法,推荐第二种

    第一种方法:判断session中保存的token 比较麻烦,每次在提交表单时都必须传入上次的token.而且当一个页面使用ajax时,多个表单提交就会有问题. 注解Token代码: package c ...

  4. 解决MAC下PHP连接MYSQL错误Warning: mysql_connect(): No such file or directory in conn.php

    今天在mac上用php去连接mysql数据库,出现了 mac PHP Warning:  mysql_connect(): [2002] No such file... 详细例如以下所看到的: Dir ...

  5. 使用ThoughtWorks.QRCode生成二维码

    新建Windows应用程序,加入引用ThoughtWorks.QRCode.dll,编写代码生成二维码. using System; using System.Drawing; using Syste ...

  6. UMeditor百度富文本编辑器的使用

    批量上传的图片在线管理没法查看图片 是因为jar包本身的Bug,这里暂时做了个替换展示.就是找到Img.js  然后搜索 img.set 替换下就好了 var url=list[i].url ;    ...

  7. BZOJ 1146 二分+链剖+线段树+treap

    思路: 恶心的数据结构题-- 首先 我们 链剖 把树 变成序列 再 套一个 区间 第K大就好了-- 复杂度(n*log^4n) //By SiriusRen #include <cstdio&g ...

  8. BZOJ 3224 平衡树模板题

    Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n, ...

  9. 洛谷P2598 [ZJOI2009]狼和羊的故事

    题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...

  10. ES6第一节:开发环境的搭建

    前言:由于目前浏览器对ES6的支持度不高,需要借助babel将编写好的ES6代码转换成ES5,浏览器才能解析. 需要在NodeJS环境下运行 一. 建立结构:两个文件夹和一个html文件,分别是src ...