搭建环境使用到的jar包:
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>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate_db?characterEncoding=UTF-8</property>
<property name="connection.username">root</property>
<property name="connection.password"></property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/ethan/domain/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
com.ethan.util:
package com.ethan.hibernate.util;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public final class HibernateUtil {
private static SessionFactory sf = null;
private HibernateUtil(){}
//当虚拟机加载类的时候执行,保证执行一次
static {
Configuration cfg = new Configuration();
cfg.configure();
sf = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sf;
}
public static Session getSession() {
return sf.openSession();
}
/**
* 保存各种对象
* @param entity
*/
public static void add(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(entity);
tx.commit();
} finally {
if(s!=null) {
s.close();
}
}
}
public static void update(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.update(entity);
tx.commit();
} finally {
if(s!=null) {
s.close();
}
}
}
public static void delete(Object entity) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.delete(entity);
tx.commit();
} finally {
if(s!=null) {
s.close();
}
}
}
public static Object get(Class clazz,Serializable id) {
Session s = null;
try {
s = HibernateUtil.getSession();
Object obj = s.get(clazz, id);
return obj;
} finally {
if(s!=null) {
s.close();
}
}
}
}
com.ethan.domain:
package com.ethan.domain;
import java.util.Date;
public class User {
private Integer id;
private String name;
private Date birthday;
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 Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "id="+id+"\tname="+name;
}
}
User.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 package="com.ethan.domain">
<class name="User">
<id name="id">
<generator class="native"></generator>
</id>
<!-- name unique -->
<property name="name" unique="true"/>
<property name="birthday"/>
</class>
</hibernate-mapping>
com.ethan.hibernate 操作类:
package com.ethan.hibernate;
import java.util.Date;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;
import com.ethan.domain.User;
import com.ethan.hibernate.util.HibernateUtil;
/**
* sessionFactory--->driverManager
* session -----> connection
* @author ETHAN
*
*/
public class Base {
private static SessionFactory sf = null;
public static void main(String args[]) {
Session s = HibernateUtil.getSession();
//开启事务,jdbc自动提交,hibernate必须手动提交
User user = new User();
user.setBirthday(new Date());
user.setName("aaa");
addUser2(user);
}
public static void addUser(User user) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(user);
//持久态
user.setName("持久态");
tx.commit();
} catch (HibernateException e) {
if(tx!=null) {
tx.rollback();
}
//必须抛出异常 让上层处理,不要吞没
throw e;
} finally {
if(s!=null) {
s.close();
}
}
}
//如果有异常会抛出,效果同上
public static void addUser2(User user) {
Session s = null;
Transaction tx = null;
try {
s = HibernateUtil.getSession();
tx = s.beginTransaction();
s.save(user);
tx.commit();
} finally {
if(s!=null) {
s.close();
}
}
}
public static User getUser(int id) {
Session s = null;
try {
s = HibernateUtil.getSession();
User user = (User) s.get(User.class, id);
return user;
} finally {
if(s!=null) {
s.close();
}
}
}
public static User loadUser(int id) {
Session s = null;
try {
s = HibernateUtil.getSession();
//产生代理对象,user永远不会为null
User user = (User) s.load(User.class, id);
//懒加载,初始化对象数据
Hibernate.initialize(user);
return user;
} finally {
if(s!=null) {
s.close();
}
}
}
}
package com.ethan.hibernate;
import java.util.Date;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import com.ethan.domain.User;
import com.ethan.hibernate.util.HibernateUtil;
public class HibernateQuery {
public static void query(String name) {
Session s = null;
try {
s = HibernateUtil.getSession();
// String hql = "from User as user where user.name=?";
String hql = "from User as user where user.name=:name";
Query query = s.createQuery(hql);
//query.setString(0, name);
//不依赖位置
query.setString("name", "aaa");
//分页,跨数据库可移植
query.setFirstResult(0);
query.setMaxResults(4);
List<User> list = query.list();
//唯一结果
//query.uniqueResult();
for(User user:list) {
System.out.println(user);
}
} finally {
if(s!=null) {
s.close();
}
}
}
public static void cri(String name) {
Session s = null;
try {
s = HibernateUtil.getSession();
Criteria c = s.createCriteria(User.class);
//c.add(Restrictions.eq("name", name));
c.add(Restrictions.or(Restrictions.eq("name", name), Restrictions.eq("birthday", new Date())));
c.setFirstResult(0);
c.setMaxResults(4);
List<User> list = c.list();
//唯一结果
//c.uniqueResult();
for(User user:list) {
System.out.println(user);
}
} finally {
if(s!=null) {
s.close();
}
}
}
}
com.ethan.test 测试类:
package com.ethan.test;
import static org.junit.Assert.*;
import java.util.Date;
import org.junit.Test;
import com.ethan.domain.User;
import com.ethan.hibernate.Base;
public class TestHibernate {
@Test
public void getUser() {
System.out.println(Base.getUser(6));
}
@Test
public void loadUser() {
System.out.println(Base.loadUser(6));
}
@Test
public void addUser() {
User user = new User();
user.setBirthday(new Date());
user.setName("aaa");
Base.addUser(user);
}
}
package com.ethan.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.Test;
import com.ethan.domain.User;
import com.ethan.hibernate.HibernateQuery;
import com.ethan.hibernate.util.HibernateUtil;
public class QueryTest {
@Test
public void query() {
HibernateQuery.query("aaa");
}
@Test
public void cri() {
HibernateQuery.cri("aaa");
}
}