配置好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。
这应该是初学者才会出现的问题吧,养成一个好的编码习惯很重要。