一、准备工作
1.建立数据库think,建立数据表user,里面有name和pwd字段,均为varchar类型。
2.在eclipse中创建MyFirstHibernate工程,在bin目录下添加相关包。
3.在src目录下编写*.cfg.xml配置文件,
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="connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- 数据库连接的URL -->
<property name="connection.url">jdbc:mysql://localhost:3306/think</property>
<!-- 数据库连接用户名 -->
<property name="connection.username">root</property>
<!-- 数据库连接密码 -->
<property name="connection.password">****</property>
<!-- Hibernate方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 打印SQL语句 -->
<property name="show_sql">true</property>
<!-- 映射文件 -->
<mapping resource="com/zt/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
二、在src目录下创建com.zt包,
1.在com.zt包下编写User.java文件,做为持久化类:
package com.zt;
import java.io.Serializable;
public class User implements Serializable{
private String name;
private String pwd;
public User(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
在相同目录(com.zt包下)编写User.hbm.xml文件,映射这个持久化类:
需要注意的是,我的user数据表中没有建立主键,所以映射文件需要把所有字段做为联合主键,必要条件是这个持久化类是序列化的类,如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 信息字段配置信息 -->
<hibernate-mapping>
<class name="com.zt.User" table="user">
<composite-id>
<key-property name="name" type="java.lang.String">
<column name="name" length="200" />
</key-property>
<key-property name="pwd" type="java.lang.String">
<column name="pwd" length="200" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
2.编写Hibernate初始化类,作为工具类为后面的增删改查做准备。
com.zt.HibernateUtil.java:
package com.zt;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();//ThreadLocal对象
private static SessionFactory sessionFactory = null;//SessionFactory对象
//静态块
static {
try {
// 加载Hibernate配置文件
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err.println("创建会话工厂失败");
e.printStackTrace();
}
}
/**
* 获取Session
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession(): null;
threadLocal.set(session);
}
return session;
}
/**
* 重建会话工厂
*/
public static void rebuildSessionFactory() {
try {
// 加载Hibernate配置文件
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err.println("创建会话工厂失败");
e.printStackTrace();
}
}
/**
* 获取SessionFactory对象
* @return SessionFactory对象
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* 关闭Session
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();//关闭Session
}
}
}
3.增:
com.zt..AddUser.java:
package com.zt;
import org.hibernate.Session;
public class AddUser {
/**
* 添加商品
*/
public static void main(String[] args) {
Session session = null; //声明Session对象
User product = new User();//实例化持久化类
//为持久化类属性赋值
product.setName("皮皮虾");
product.setPwd("123");
//Hibernate的持久化操作
try {
session = HibernateUtil.getSession();//获取Session
session.beginTransaction();//开启事务
session.save(product);//执行数据库添加操作
session.getTransaction().commit();//事务提交
} catch (Exception e) {
session.getTransaction().rollback();//事务回滚
System.out.println("数据添加失败");
e.printStackTrace();
}finally{
HibernateUtil.closeSession();//关闭Session对象
}
}
}
4.删:
com.zt.DeleteUser.java:
package com.zt;
import org.hibernate.Query;
import org.hibernate.Session;
public class DeleteUser {
//利用get()方法装载对象
public static void main(String[] args){
Session session = null; //声明Session对象
try {
//Hibernate的持久化操作
session = HibernateUtil.getSession();//获取Session
String hql = "delete from User user where user.name=?";//这里用?
Query q = session.createQuery(hql);
q.setParameter(0, "皮皮虾");
q.executeUpdate();
// System.out.println("名称:"+user.getName());
//System.out.println("密码:"+user.getPwd());
} catch (Exception e) {
System.out.println("对象装载失败");
e.printStackTrace();
} finally{
HibernateUtil.closeSession();//关闭Session
}
}
}
5.改:
com.zt.UpdateUser.java:
package com.zt;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class UpdateUser {
//利用get()方法装载对象
public static void main(String[] args){
Session session = null; //声明Session对象
try {
//Hibernate的持久化操作
session = HibernateUtil.getSession();//获取Session
Transaction trans=session.beginTransaction();
String hql="update User user set user.pwd=? where user.name=?";
Query q=session.createQuery(hql);
q.setParameter(0, "456");
q.setParameter(1, "皮皮虾");
int ret=q.executeUpdate();
trans.commit();
} catch (Exception e) {
System.out.println("对象装载失败");
e.printStackTrace();
} finally{
HibernateUtil.closeSession();//关闭Session
}
}
}
6.查询并输出:
com.zt.FindUser.java:
package com.zt;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
public class FindUser {
private static List<Object[]> list=new ArrayList<Object[]>();
//利用get()方法装载对象
public static void main(String[] args){
Session session = null; //声明Session对象
try {
//Hibernate的持久化操作
session = HibernateUtil.getSession();//获取Session
String hql = "select user.name,user.pwd from User user ";//这里用?
Query q = session.createQuery(hql);
//q.setParameter(0, "123");
//q.executeUpdate();
list=q.list();
for(int i=0;i<list.size();i++){
System.out.print(list.get(i)[0]);
System.out.println(list.get(i)[1]);
}
} catch (Exception e) {
System.out.println("对象装载失败");
e.printStackTrace();
} finally{
HibernateUtil.closeSession();//关闭Session
}
}
}