Hibernate3.5.3 之 CRUD

Hibernate配置文件:

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>

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>

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;
	}
}

package com.ethan.dao;

import com.ethan.domain.User;

public interface UserDao {
	public void saveUser(User user);
	public User findUserByName(String name);
	public User findUserById(int id);
	public void updateUser(User user);
	public void remove(User user);
}

package com.ethan.dao.impl;


import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import com.ethan.dao.UserDao;
import com.ethan.domain.User;
import com.ethan.hibernate.util.HibernateUtil;

public class UserDaoHibernateImpl implements UserDao {

	@Override
	public void saveUser(User user) {
		
	}

	@Override
	public User findUserByName(String name) {
		Session s = null;
		try {
			s = HibernateUtil.getSession();
			Criteria c = s.createCriteria(User.class);
			
			//unique=true
			c.add(Restrictions.eq("name", name));
			User user = (User) c.uniqueResult();
			return user;
		} finally {
			if(s!=null) {
				s.close();
			}
		}
	}

	@Override
	public User findUserById(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();
			}
		}
	}

	@Override
	public void updateUser(User user) {

	}

	//效率上有浪费,id传过来再去数据库查得到user对象
	@Override
	public void remove(User user) {
		Session s = null;
		Transaction tx = null;
		try {
			s = HibernateUtil.getSession();
			tx = s.beginTransaction();
			s.delete(user);
			tx.commit();
		} finally {
			if(s!=null) {
				s.close();
			}
		}
	}

}

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();
			}
		}
	}
}

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();
			}
		}
	}
}

测试类:

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");
	}
}

hibernate3.5.3 jar包下载地址:http://115.com/file/dp5ki6tx#hibernate3.5.3.zip

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值