hibernate的使用流程
本案例使用的hibernate版本为 hibernate-release-5.2.10.Final
为了测试,本案例在mysql数据库中创建了一个db数据库,并创建dept数据表,详细字段信息如下:
-- 创建数据库
CREATE DATABASE db;
-- 使用数据库
USE db;
-- 创建数据表
CREATE TABLE dept(
deptno INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(20),
loc VARCHAR(30)
);
-- 添加数据
INSERT INTO dept(dname,loc) VALUES('测试','地址1');
INSERT INTO dept(dname,loc) VALUES('美工部','地址2');
INSERT INTO dept(dname,loc) VALUES('测试部','地址3');
INSERT INTO dept(dname,loc) VALUES('市场部','地址4');
INSERT INTO dept(dname,loc) VALUES('维护部','地址5');
INSERT INTO dept(dname,loc) VALUES('项目部','地址6');
INSERT INTO dept(dname,loc) VALUES('电竞部','地址7');
INSERT INTO dept(dname,loc) VALUES('套路部','地址8');
INSERT INTO dept(dname,loc) VALUES('分析部','地址9');
INSERT INTO dept(dname,loc) VALUES('加工部','地址10');
创建一个java项目:项目的结构如下:(lib文件夹用于存放jar包)
1、准备jar包
下载 hibernate-release-5.2.10.Final.zip ,解压出来。
进入lib文件夹
然后进入required文件夹,将里面所有的jar拷贝到项目的lib目录下,载该文件夹拷贝的jar包如下:
接下来进入jpa-metamodel-generator文件夹拷贝如下包:
接下来进入 spatial 文件夹拷贝如下包:
接下来还需要单独拷贝一个 日志报包 log4j.ar
上面就是hibernate 需要拷贝的jar包(需要的所有jar包截图如下):
hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- dtd约束 -->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 数据库的连接信息 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/db?characterEncoding=utf8</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<!--数据库方言 -->
<!-- 配置数据库方言的作用是屏蔽数据库的差异,换句话说是使hibernate框架知道要与那种数据库取得联系 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 其它配置 -->
<!-- 显示sql语句 -->
<property name="show_sql">true</property>
<!-- 映射配置 -->
<mapping resource="cn/sz/entity/Dept.hbm.xml" />
</session-factory>
</hibernate-configuration>
注:
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
这里需要根据你的数据库版本进行填写,知道你的数据库版本之后可以按如何操作查看你的数据库版本的相关驱动类
找到如下jar包
选择
查看你数据库的版本在这里面有没有对应的类,有则拷贝类名(去除.class)作为该配置的值,如果没有则在配置中直接用 org.hibernate.dialect.MySQL5Dialect 作为该配置项的值
以上两步基本完成之后,hibernate的使用环境搭建完成。
下面我们进行一个简单的测试:
3、创建实体类--对应表(必须有无参构造函数)
package cn.sz.entity;
import java.io.Serializable;
public class Dept implements Serializable {
private Integer id;
private String name;
private String location;
public Dept() {
}
public Dept(Integer id, String name, String location) {
this.id = id;
this.name = name;
this.location = location;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
4、映射文件的配置--ORM,基于ORM思想,使实体类和关系表实现一个联系--映射
映射文件一般在与实体类同包,命名规范:类名.hbm.xml
Dept.hbm.xml
<?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>
<!-- 实体类和哪个表对应 ;table用于配置实体类和表的对应;name用于配置哪个实体类和表对应-->
<class table="dept" name="cn.sz.entity.Dept" >
<!-- id用于配置主属性和主键字段对应;id的name用于配置属性名,column用于配置字段名称 -->
<id name="id" column="deptno">
<!-- 主键生成策略 -->
<generator class="native"></generator>
</id>
<!-- property用于配置普通属性和字段的对应 -->
<property name="name" column="dname"></property>
<property name="location" column="loc"></property>
</class>
</hibernate-mapping>
5、将映射配置文件配置到主配置文件中
将如下映射信息 配置加入到 bhibernate.cfg.cml 中
<mapping resource="cn/sz/entity/Dept.hbm.xml" />
6、为了在控制台查看日志信息所以需要使用日志配置文件
log4j.properties
log4j.rootLogger=DEBUG,console,FILE
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.threshold=INFO
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.maxBackupIndex=100
##log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.Append=true
log4j.appender.FILE.File=c:/error1.log
log4j.appender.FILE.Threshold=INFO
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%5p] - %c -%F(%L) -%m%n
log4j.appender.FILE.MaxFileSize=1MB
7、调用hibernate的方法实现测试
1)读取主配置文件 --Configuration读取,configure()
2)创建一个Session工厂
3)创建Session
4)调用方法完成操作
5)释放资源
DeptTest.java
package cn.sz.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;
import cn.sz.entity.Dept;
import cn.sz.utils.HibernateUtil;
public class DeptTest {
@Test
public void testQueryById() {
// 创建一个读取主配置文件的对象
Configuration cfg = new Configuration();
// 读取主配置文件
cfg.configure();
// 创建Session工厂
SessionFactory factory = cfg.buildSessionFactory();
// 打开Session----类似JDBC中的Connection
Session session = factory.openSession();
// 完成查询操作
Dept dept = session.get(Dept.class, 18);
System.err.println(dept.getId() + "," + dept.getName() + "," + dept.getLocation());
// 释放资源
session.close();
factory.close();
}
}
结果:
注:这里使用junit测试,需要配置junit,具体可以参考http://blog.csdn.net/benxiaohai888/article/details/78231911