第一个 Hibernate 应用程序
2015-12-09 22:58
405 查看
1. 新建Java Project
2. 在项目下新建资源文件夹 res : 存放配置文件
3. 在项目下新建类库文件夹lib : 存放jar类库文件
4. Hibernate程序必要的类库:Build Path->Add To Build Path
a) 数据库连接库:
mysql-connector-java-5.1.38-bin.jar
b) Hibernate5库:(必选导入的包)
lib\required
hibernate-core-5.0.5.Final.jar
jboss-logging-3.3.0.Final.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
javassist-3.18.1-GA.jar
lib\osgi\
geronimo-jta_1.1_spec-1.1.1.jar
5. Hibernate配置文件参考: hibernate-release-5.0.5.Final\project\etc
a) hibernate.cfg.xml(复杂配置)
注意:头文件hibernate-configuration-3.0.dtd,根据自己的数据环境进行配置
b) hibernate.properties(简单配置/参考)
c) log4j.properties(可选,日志配置)
ehcache.xml(可选,二级缓存配置)
2. 编写Event.hbm.xml映射文件(映射头文件hibernate-mapping-3.0.dtd)
3. 把映射文件配置到hibernate.cfg.xml
4. 编写持久层EventDao.java
5. 编写EventDao的测试类TestEventDao
项目结构:
Event.java
package com.demo.entity;
import java.util.Date;
public class Event
{
//属性名 默认为 表列名
private Long id; //表的 主键
private String title; //表的 列 varchar
private Date date; //表的 列 datetime(默认) time date
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public Date getDate() {
return date;
}
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDate(Date date) {
this.date = date;
}
}
Event.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 package="com.demo.entity">
<class name="Event" table="event">
<id name="id" column="EVENT_ID">
<generator class="native"/><!-- 主键的生成策略 -->
</id>
<property name="date" type="date" column="EVENT_DATE"/>
<property name="title" length="25"/>
</class>
</hibernate-mapping>
HibernateUtil.java
package com.demo.util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil
{
//static final常量:声明的时候必须要初始化,只初始化1次
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// 加载 hibernate.cfg.xml
StandardServiceRegistry registry =
new StandardServiceRegistryBuilder().configure().build();
// 根据 hibernate.cfg.xml 配置 初始化 SessionFactory
return new MetadataSources(registry).buildMetadata().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
//公共访问单例方法
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
TestEvent.java
package com.demo.test;
import java.util.Date;
import org.hibernate.Session;
import com.demo.entity.Event;
import com.demo.util.HibernateUtil;
public class TestEvent
{
public static void main(String[] args) {
TestEvent test = new TestEvent();
Event event = new Event();
event.setTitle("市场活动");
event.setDate(new Date());
test.saveEvent(event);
}
private void saveEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.save(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
private void updateEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.update(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
private void deleteEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.delete(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
}
hibernate.cfg.xml
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库地址-->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo</property>
<!-- 连接数据库所需账号-->
<property name="connection.username">root</property>
<!-- 连接数据库所需密码-->
<property name="connection.password">root</property>
<!-- 数据库连接池数量 -->
<property name="connection.pool_size">1</property>
<!-- 数据库方言(解决跨数据库平台问题) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- thread安全模式 :自动创建/关闭 session -->
<property name="current_session_context_class">thread</property>
<!-- 是否提供缓冲 -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射文件路径配置 -->
<mapping resource="com/demo/entity/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
和上面例子不同的文件为:
Event.java
package com.demo.entity;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_event")
public class Event
{
//属性名 默认为 表列名
private Long id; //表的 主键
private String title; //表的 列 varchar
private Date date; //表的 列 datetime(默认) time date
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
//@GeneratedValue//ID生成策略:// 4.0 AUTO 默认为 IDENTITY // 5.0 AUTO默认为SEQUENCE
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public Date getDate() {
return date;
}
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDate(Date date) {
this.date = date;
}
}
然后在修改hibernate.cfg.xml中 <mapping resource="com/demo/entity/Event.hbm.xml"/>为<mapping class="com.demo.entity.Event"/>
2. 在项目下新建资源文件夹 res : 存放配置文件
3. 在项目下新建类库文件夹lib : 存放jar类库文件
4. Hibernate程序必要的类库:Build Path->Add To Build Path
a) 数据库连接库:
mysql-connector-java-5.1.38-bin.jar
b) Hibernate5库:(必选导入的包)
lib\required
hibernate-core-5.0.5.Final.jar
jboss-logging-3.3.0.Final.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
javassist-3.18.1-GA.jar
lib\osgi\
geronimo-jta_1.1_spec-1.1.1.jar
5. Hibernate配置文件参考: hibernate-release-5.0.5.Final\project\etc
a) hibernate.cfg.xml(复杂配置)
注意:头文件hibernate-configuration-3.0.dtd,根据自己的数据环境进行配置
b) hibernate.properties(简单配置/参考)
c) log4j.properties(可选,日志配置)
ehcache.xml(可选,二级缓存配置)
基于映射文件的hibernate例子:
1. 编写Domain(Entity/Pojo)类Event.java。2. 编写Event.hbm.xml映射文件(映射头文件hibernate-mapping-3.0.dtd)
3. 把映射文件配置到hibernate.cfg.xml
4. 编写持久层EventDao.java
5. 编写EventDao的测试类TestEventDao
项目结构:
Event.java
package com.demo.entity;
import java.util.Date;
public class Event
{
//属性名 默认为 表列名
private Long id; //表的 主键
private String title; //表的 列 varchar
private Date date; //表的 列 datetime(默认) time date
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public Date getDate() {
return date;
}
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDate(Date date) {
this.date = date;
}
}
Event.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 package="com.demo.entity">
<class name="Event" table="event">
<id name="id" column="EVENT_ID">
<generator class="native"/><!-- 主键的生成策略 -->
</id>
<property name="date" type="date" column="EVENT_DATE"/>
<property name="title" length="25"/>
</class>
</hibernate-mapping>
HibernateUtil.java
package com.demo.util;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
public class HibernateUtil
{
//static final常量:声明的时候必须要初始化,只初始化1次
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// 加载 hibernate.cfg.xml
StandardServiceRegistry registry =
new StandardServiceRegistryBuilder().configure().build();
// 根据 hibernate.cfg.xml 配置 初始化 SessionFactory
return new MetadataSources(registry).buildMetadata().buildSessionFactory();
}
catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
//公共访问单例方法
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
TestEvent.java
package com.demo.test;
import java.util.Date;
import org.hibernate.Session;
import com.demo.entity.Event;
import com.demo.util.HibernateUtil;
public class TestEvent
{
public static void main(String[] args) {
TestEvent test = new TestEvent();
Event event = new Event();
event.setTitle("市场活动");
event.setDate(new Date());
test.saveEvent(event);
}
private void saveEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.save(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
private void updateEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.update(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
private void deleteEvent(Event event){
//1.HibernateUtil获取SessionFactory来创建一个Session
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
//2.通过Session开启事务
session.beginTransaction();
//3.核心API save update delete find get ...
session.delete(event);
//4.通过Session提交事务
session.getTransaction().commit();
}
}
hibernate.cfg.xml
<!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="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 连接数据库地址-->
<property name="connection.url">jdbc:mysql://localhost:3306/hibernatedemo</property>
<!-- 连接数据库所需账号-->
<property name="connection.username">root</property>
<!-- 连接数据库所需密码-->
<property name="connection.password">root</property>
<!-- 数据库连接池数量 -->
<property name="connection.pool_size">1</property>
<!-- 数据库方言(解决跨数据库平台问题) -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- thread安全模式 :自动创建/关闭 session -->
<property name="current_session_context_class">thread</property>
<!-- 是否提供缓冲 -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- 是否显示sql语句 -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<!-- 映射文件路径配置 -->
<mapping resource="com/demo/entity/Event.hbm.xml"/>
</session-factory>
</hibernate-configuration>
基于注解方式的hibernate例子:
红色为必选添加的注解基于Annotations的映射:
注解名 | 声明位置 | 用途 |
@Entity | Class的上方 | 声明一个映射实体对象 |
@Table | Class的上方, @Entity的下方 可配值: name uniqueConstraints schema indexes catalog | 声明映射数据库的名字,唯一约束等。建议使用全小写表名解决Mysql不同平台表名大小写兼容问题。 |
@Id | 主键的属性或get方法上方 | 声明一个主键属性 |
@GeneratedValue | 可声明于@Id注解下方 可配值: strategy=GenerationType.AUTO strategy=GenerationType.SEQUENCE strategy=GenerationType.IDENTITY strategy=GenerationType.TABLE | 主键值的生成策略 |
@Version | Integer字段属性或get方法上方 | 乐观锁 |
@Transient | 易失变量,不会被持久化到数据库.例如系统运行中使用,但是不需要保存到数据库. | |
@Temporal | @Temporal(TemporalType.DATE) @Temporal(TemporalType.TIME) @Temporal(TemporalType.TIMESTAMP)//默认 | Date数据类型的时间精度. |
@Enumerated | // @Enumerated(EnumType.ORDINAL) //默认,存下标索引 // @Enumerated(EnumType.STRING) //枚举值 | 枚举类型的存储精度 |
@Lob | 根据属性的类型配合使用 @Lob+String 大文本 @Lob+Byte[] 文件/图片字节 |
Event.java
package com.demo.entity;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_event")
public class Event
{
//属性名 默认为 表列名
private Long id; //表的 主键
private String title; //表的 列 varchar
private Date date; //表的 列 datetime(默认) time date
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
//@GeneratedValue//ID生成策略:// 4.0 AUTO 默认为 IDENTITY // 5.0 AUTO默认为SEQUENCE
public Long getId() {
return id;
}
public String getTitle() {
return title;
}
public Date getDate() {
return date;
}
public void setId(Long id) {
this.id = id;
}
public void setTitle(String title) {
this.title = title;
}
public void setDate(Date date) {
this.date = date;
}
}
然后在修改hibernate.cfg.xml中 <mapping resource="com/demo/entity/Event.hbm.xml"/>为<mapping class="com.demo.entity.Event"/>
相关文章推荐
- linux 搭建 svn 服务器
- Scrum Meeting 7-20151209
- android - Building Web Apps in WebView
- HBase集群安装-2 Zookeeper安装
- Ceph知识树
- D3.js实现随机散点图(附带横纵坐标轴)
- 欢迎使用CSDN-markdown编辑器
- stl学习
- Android开发中获取assets文件夹下Xml文件的问题
- 第五章 回溯法-批处理作业调度
- windows、Linux、Mac系统回车换行符的区别
- 使用百度语音识别REST API,做全平台语音识别
- 【数据结构】冒泡排序算法示例
- 一些正则规则
- leetcode 003 Longest Substring Without Repeating Characters(java)
- Android Studio错误Error:(23, 17) Failed to resolve: junit:junit:4.12解决方案
- java 静态方法调用非静态内部类报错
- 属性传值 ,代理传值,单例
- 内部类、异常、其他
- 异常——总结