Hibernate简单增删改查

一、准备工作

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

}


最后来看一下整个项目的目录截图:

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

w_t_y_y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值