Hibernate 持久层入门实例
1、新建一个项目,导入Hibernate的jar包。和需要连接到数据库的连接包。例如:mysql-connector-java-5.1.28-bin.jar
2、在scr下创建com.huizhi.dao包、com.huizhi.po包、com.huizhi.utils包、com.huizhi.test包。
3、在scr下新建一个配置文件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="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 配置数据库jdbc驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 配置数据库连接串 --> <property name="connection.url">jdbc:mysql://192.168.1.110:3306/hibernate</property> <!-- 配置数据库连接用户名 --> <property name="connection.username">sa</property> <!-- 配置数据库连接用户密码 --> <property name="connection.password">hainan</property> <!-- 是否显示hibernate的SQL语句 --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- 实体类导出至数据库时,如果存在的表处理方式: hibernate.hbm2ddl.auto :(create-drop、create、update、validate) --> <property name="hbm2ddl.auto">update</property> <!-- 配置实体类映射 --> <mapping class="com.huizhi.po.User" /> </session-factory> </hibernate-configuration>
4、在po包下加入实体类,和映射配置文件User.hbm.xml。
package com.huizhi.po;
public class User {
private String USER_ID;
private String USER_NAME;
private String USER_PWD;
public String getUSER_ID() {
return USER_ID;
}
public void setUSER_ID(String uSER_ID) {
USER_ID = uSER_ID;
}
public String getUSER_NAME() {
return USER_NAME;
}
public void setUSER_NAME(String uSER_NAME) {
USER_NAME = uSER_NAME;
}
public String getUSER_PWD() {
return USER_PWD;
}
public void setUSER_PWD(String uSER_PWD) {
USER_PWD = uSER_PWD;
}
}<?xml version="1.0"?> <!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.huizhi.po.User"> <class name="com.huizhi.po.User" table="USER_INFO"> <id name="USER_ID"> <column name="USER_ID" /> <!-- 配置主键生成策略 --> <generator class="uuid" /> </id> <property name="USER_NAME" column="USER_NAME" /> <property name="USER_PWD" column="USER_PWD" /> </class> </hibernate-mapping>
5、在utils包下新建HibernateUtil.java文件。
package com.huizhi.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil {
/**
* @return 获取会话工厂
*/
public static SessionFactory getSessionFactory()
{
//读取Hibernate的配置文件 hibernamte.cfg.xml文件
Configuration cfg=new Configuration().configure();
//创建服务注册构建器对象,通过配置对象中加载所有的配置信息
ServiceRegistryBuilder regbulider=new ServiceRegistryBuilder().applySettings(cfg.getProperties());
//创建注册服务
ServiceRegistry sr=regbulider.buildServiceRegistry();
//创建会话工厂
SessionFactory sessionFactory=cfg.buildSessionFactory(sr);
return sessionFactory;
}
/**
* @return 获取会话对象
*/
public static Session getSession()
{
return getSessionFactory().openSession();
}
}6、在dao包下新建BaseDao.java文件。
package com.huizhi.dao;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.huizhi.utils.HibernateUtil;
public class BaseDAO {
/**
* @param obj 添加数据
* @return
*/
public static boolean add(Object obj)
{
Session session=null;
Transaction tran=null;
boolean result=false;
try
{
session=HibernateUtil.getSession();
tran=session.beginTransaction();
session.save(obj);
tran.commit();
result=true;
}
catch (Exception e)
{
if(tran!=null)
{
//事物回滚
tran.rollback();
}
}
finally
{
if(session!=null)
{
//关闭session
session.close();
}
}
return result;
}
/**
* @return 更新数据
* 参数为修改的主键id对象
*/
public static boolean update(Object object)
{
Session session=null;
Transaction tran=null;
boolean result=false;
try
{
session=HibernateUtil.getSession();
tran=session.beginTransaction();
session.update(object);
tran.commit();
result=true;
}
catch (Exception e)
{
if(tran!=null)
{
//事物回滚
tran.rollback();
}
}
finally
{
if(session!=null)
{
//关闭session
session.close();
}
}
return result;
}
/**
* @param c
* @param id 查询一条数据根据主键的id号
* @return
*/
public static Object get(Class<?> c,int id)
{
Session session=null;
Object object=null;
try
{
session=HibernateUtil.getSession();
object=session.get(c,id);
}
catch (Exception e)
{
}
finally
{
if(session!=null)
{
//关闭session
session.close();
}
}
return object;
}
/**
* @param obj
* @return 删除数据
*/
public static boolean delete(Object obj)
{
Session session=null;
Transaction tran=null;
boolean result=false;
try
{
session=HibernateUtil.getSession();
tran=session.beginTransaction();
session.delete(obj);
tran.commit();
result=true;
}
catch (Exception e)
{
if(tran!=null)
{
//事物回滚
tran.rollback();
}
}
finally
{
if(session!=null)
{
//关闭session
session.close();
}
}
return result;
}
/**
* @param <T> 查询多条记录
* @param sql sql语句
* @param param 参数数组
* @return
*/
@SuppressWarnings("unchecked")
public static <T> List<T> query(String sql,String[] param)
{
List<T> list=new ArrayList<T>();
Session session=null;
try
{
session=HibernateUtil.getSession();
Query query=session.createQuery(sql);
if(param!=null)
{
for(int i=0;i<param.length;i++)
{
query.setString(i,param[i]);
}
}
list=query.list();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
finally
{
if(session!=null)
{
session.close();
}
}
return list;
}
/**
* @param sql
* @param param 查询单条记录
* @return
*/
public static Object queryOne(String sql,String[] param)
{
Object object=null;
Session session=null;
try
{
session=HibernateUtil.getSession();
Query query=session.createQuery(sql);
if(param!=null)
{
for(int i=0;i<param.length;i++)
{
query.setString(0,param[i]);
}
object=query.uniqueResult();
}
}
catch (Exception e)
{
}
finally
{
if(session!=null)
{
session.close();
}
}
return object;
}
/**
* @param <T>
* @param sql
* @param param
* @param page
* @param size
* @return 实现分页查询
*/
@SuppressWarnings("unchecked")
public static <T> List<T> queryByPage(String sql,String[] param,int page,int size)
{
List<T> list=new ArrayList<T>();
Session session=null;
try
{
session=HibernateUtil.getSession();
Query query=session.createQuery(sql);
if(param!=null)
{
for(int i=0;i<param.length;i++)
{
query.setString(i,param[i]);
}
}
//筛选条数
query.setFirstResult((page-1)*size);
query.setMaxResults(size);
list=query.list();
}
catch (Exception e)
{
}
finally
{
if(session!=null)
{
session.close();
}
}
return list;
}
/**
* @param hql
* @param pras
* @return返回数据个数
*/
public static int getCount(String hql, String[] pras) {
int resu = 0;
Session s = null;
try {
s = HibernateUtil.getSession();
Query q = s.createQuery(hql);
if (pras != null) {
for (int i = 0; i < pras.length; i++) {
q.setString(i, pras[i]);
}
}
resu = Integer.valueOf(q.iterate().next().toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (s != null)
s.close();
}
return resu;
}
}7、在test包下新建test.java测试文件进行测试。
package com.huizhi.test;
import java.util.List;
import com.huizhi.dao.BaseDAO;
import com.huizhi.po.User;
public class test {
public static void main(String[] args) {
//添加用户
User user = new User();
user.setUSER_NAME("孙悟空");
user.setUSER_PWD("admin");
BaseDAO.add(user);
//分页查询
List<User>list = BaseDAO.queryByPage("FROM User WHERE USER_PWD=?", new String[]{"admin"}, 1, 2);
for (User user2 : list) {
System.out.println("用户名:"+user2.getUSER_NAME() +";密码:"+user2.getUSER_PWD());
}
}
}——————————————————————————————————
注解的方式:
实体类修改为
package com.huizhi.po;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="USER_INFO")
public class User {
private int USER_ID;
private String USER_NAME;
private String USER_PWD;
@Id
@Column(name = "USER_ID",nullable=false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
public int getUSER_ID() {
return USER_ID;
}
public void setUSER_ID(int uSER_ID) {
USER_ID = uSER_ID;
}
@Column(name = "USER_NAME", nullable=false, length = 100)
public String getUSER_NAME() {
return USER_NAME;
}
public void setUSER_NAME(String uSER_NAME) {
USER_NAME = uSER_NAME;
}
@Column(name = "USER_PWD",nullable=false , length = 32)
public String getUSER_PWD() {
return USER_PWD;
}
public void setUSER_PWD(String uSER_PWD) {
USER_PWD = uSER_PWD;
}
}