自学java之hibernate操作数据库的增删查改

配置好hibernate之后,就可以使用其封装的类和方法。我把对数据库的基本操作封装在一个类中。

mysqlModel.java:

package com.models;

import java.util.List;

import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class MysqlModel {
	public static SessionFactory sFactory;
	static{
		Configuration conf = new Configuration();
		sFactory = conf.configure("hibernate.cfg.xml").buildSessionFactory();//加载hibernate的配置文件
	}
	/**
	 * 查询表内所有数据
	 * @param table 表名
	 * @return 返回对象的List
	 */
	@SuppressWarnings("rawtypes")
	public static List getAll(String table){
		Session session = sFactory.openSession();
		List results = session.createQuery("from "+table).list();
		session.close();
		return results;
	}
	/**
	 * 返回一组值
	 * @param table 表名
	 * @param where 查询条件
	 * @return 返回对象
	 */
	public static Object getOne(String table,String where){
		Session session = sFactory.openSession();
		Object result = session.createQuery("from "+table+" where "+where).uniqueResult();
		session.close();
		return result;
	}
	/**
	 * 添加一个对象的数据到数据库
	 * @param ob
	 */
	public static void add(Object ob) throws SecurityException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException{
		Session session = sFactory.openSession();
		Transaction ts = session.beginTransaction();
		session.save(ob);
		ts.commit();
		session.close();
	}
	/**
	 * 删除对应表的相关数据
	 * @param table 表名
	 * @param where 删除条件
	 */
	public static void delete(String table,String where){
		Session session = sFactory.openSession();
		Transaction ts = session.beginTransaction();
		Query query = session.createQuery("delete from "+table+" where "+where);
		query.executeUpdate();
		ts.commit();
		session.close();
	}
	/**
	 * 删除对象在存储在数据库的对应数据
	 * @param ob 
	 */
	public static void deleteByObject(Object ob){
		Session session = sFactory.openSession();
		Transaction ts = session.beginTransaction();
		session.delete(ob);
		ts.commit();
		session.close();
	}
	/**
	 * 更新对象数据库内对应的数据
	 * @param ob
	 */
	public static void update(Object ob){
		Session session = sFactory.openSession();
		Transaction ts = session.beginTransaction();
		session.update(ob);
		ts.commit();
		session.close();
	}
	
	/**使用sql语句增删改查
	 * @param hql
	 * 
	 */
	public static void queryByHql(String hql){
		Session session = sFactory.openSession();
		Transaction ts = session.beginTransaction();
		Query query = session.createQuery(hql);
		query.executeUpdate();
		ts.commit();
		session.close();
	}
}

网上查了一下,hibernate的session工厂打开的新session最好每次用完就关闭。

资料来源:http://bbs.csdn.net/topics/310130728



之后在需要使用的地方可以直接调用类方法操作数据库:

MainTest.java:

package com.main;

import com.models.MysqlModel;
import com.test.hibernate.Admin;

public class MainTest { 
	
	public static void main(String[] args) {  
		Admin admin = (Admin) MysqlModel.getOne("Admin", "id="+4);
		System.out.println(admin.getName());
    }  
	
}  

ok,hibernate的初级阶段的学习就到这里结束!

最后总结一下:

刚开始学习使用hibernate时,代码总是提示很多错误,最后才知道是在使用类方法的时候,导入的类包不对,比如我要获取表中所有数据,返回的是list,这时候应该选择导入的是java.util下面的list,而不是其他(包括hibernate自身下面的)的list。

这应该是初学者才会出现的问题吧,养成一个好的编码习惯很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值