您的位置:首页 > 其它

hibernate4框架的增删查改(包含hql)数据等功能方法

2016-11-29 09:10 363 查看
本次程序测试的是hibernate4框架的增加、修改、删除、查询等方法,每种功能都集合了几种简单的方法来进行测试,程序猿可按需获取;

hibernate框架搭建之后,使用它的流程基本是:获取configuration配置文件-->根据配置文件创建sessionFactory-->根据sessionFactory创建session-->根据session开启事务Transaction-->创建实例化对象,然后进行持久化增删改以及查询等操作-->最后关闭事务,关闭session,关闭sessionFactory;

这个流程大概面试的时候也会经常被问到,所以与其去死记硬背这些流程,倒不如从实践中获取真理,本次测试会完整还原整个流程;

实践之后,对流程的印象会更深刻喔^-^



话不多说,直接上代码:

一、整个测试的框架(简单易懂):



二、测试main方法类TestHibernate,相关的操作都已经作了详细说明:

package controller;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.hibernate.service.ServiceRegistry;

import entity.TUser;
/**
* @author xiaohe
* 测试hibernate(4)的增删查改功能方法;
* 测试前提:
*     开发工具eclipseEE(可以根据需求修改成其他开发工具);
*     搭建好hibernate框架(网上即可查阅很多搭建框架的案例,可以百度一下),本次测试使用hibernate tools自动生成数据表和映射文件;
*     本次测试使用mysql数据库,数据库表有两个(user和customer),本次测试只运用user,可根据需求更换数据库和数据表;
*     加入mysql以及hibernate4等相关jar包;
*/
public class TestH
4000
ibernate {
public static void main(String[] args){
// 实例化Configuration,
Configuration conf = new Configuration()
// 下面方法默认加载hibernate.cfg.xml文件
.configure();
// 以Configuration创建SessionFactory ,hibernate4版本之后直接使用 conf.buildSessionFactory()是已经过时了的;
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder()
.applySettings(conf.getProperties()).build();
SessionFactory sf = conf.buildSessionFactory(serviceRegistry);

// 创建Session
Session sess = sf.openSession();
// 开始事务
Transaction tx = sess.beginTransaction();
// 创建实例对象,进行持久化操作,下面将使用多种方法进行增、删、查、改测试, 需要测试哪一种方法可去掉注释;
TUser tuser = new TUser();
isadd(tuser,sess);//增
//        isdelete(tuser,sess);//删1
//        isdelete1(tuser,sess);//删2
//        isupdate(tuser,sess);//改1
//        isupdate1(tuser,sess);//改2
//        List<TUser> list = isquery1(sess);
//        System.out.println("根据年龄查询的姓名:"+list.get(0).getUserName());//查1
//        TUser user=isquery(tuser,sess);
//        System.out.println("根据id查询到的姓名:"+user.getUserName());//查2
//		  List<TUser> list = isquery2(sess);
//		  System.out.println("对象化查询的姓名:"+list.get(0).getUserName());//查3
// 提交事务
tx.commit();
// 关闭Session
sess.close();
sf.close();
}
//增加数据
public static boolean isadd(TUser tuser,Session sess){
// 添加一条记录,设置用户年龄和姓名 ,如果没设置的话插入数据库默认为null
tuser.setAge("22");
tuser.setUserName("22");
// 保存插入内容
sess.save(tuser);
return true;
}
//删除数据方法1
public static boolean isdelete(TUser tuser,Session sess){
tuser.setId((long) 4); //删除数据需指定id才能进行删除,删除id=16的项
sess.delete(tuser);
return true;
}
//删除数据方法2,使用hql
public static boolean isdelete1(TUser tuser,Session sess){
String hql = "delete TUser u where u.id=?";
Query query = sess.createQuery(hql);
query.setLong(0, (long)3);
boolean issuccess = (query.executeUpdate()>0);
return issuccess;

}
//更新数据方法1
public static boolean isupdate(TUser tuser,Session sess){
tuser = (TUser)sess.get(TUser.class,(long)3);//根据id获取唯一表行
if(tuser != null){
tuser.setUserName("xiaohe");
tuser.setAge("23");
sess.update(tuser);
}
return true;
}
//更新数据方法2,使用hql
public static boolean isupdate1(TUser tuser,Session sess){
String hql = "update TUser u set u.userName=?,u.age=? where u.id=?";
Query query = sess.createQuery(hql);
query.setString(0, "xiaoxue");
query.setString(1, "21");
query.setLong(2, (long)2);
boolean issuccess = (query.executeUpdate() > 0);
return issuccess; //执行executeUpdate()方法更新数据库数据
}
//查询数据方法1
public static TUser isquery(TUser tuser,Session sess){
TUser user=(TUser)sess.load(TUser.class, (long)2);
return user;
}
//查询数据方法2,使用hql
public static List<TUser> isquery1(Session sess){
//注意:此处TUser是类名,而不是数据库的表名,使用数据库表名是查询不到的
String hql="from TUser where age='23'";
Query query = sess.createQuery(hql);
//如果需要使用制定的age进行查询,则使用下列方法
//        String hql = "from User u where u.id=?";
//        Query query = sess.createQuery(hql);
//        query.setLong(0, id);
return query.list();
}
//查询方法3,使用对象化Criteria方法查询
public static List<TUser> isquery2(Session sess){
Criteria cri = sess.createCriteria(TUser.class);
cri.add(Restrictions.eq("age", "23"));//添加条件之后会自动执行查询方法,我们所需要做的只是获取数据
//    	cri.add(Restrictions.eq("username", "xiaohe"));//如果需要多个条件可以添加多个语句
/*需要说明一下eq等方法释义:
eq-->equal,等于
allEq --> 参数为Map对象,相当于多个Restrictions.eq的效果
gt-->great-than > 大于
ge --> great-equal >= 大于等于
lt --> less-than, < 小于
less-equal <= 小于等于
between --> 对应SQL的between子句
like --> 对应SQL的LIKE子句
...
*/
List<TUser> list = cri.list();//自动获取刚刚查询的结果集合
return list;
}
}


三、实体类TUser

package entity;

public class TUser implements java.io.Serializable {

private Long id;
private String age;
private String userName;

public TUser() {
}

public TUser(String age, String userName) {
this.age = age;
this.userName = userName;
}

public Long getId() {
return this.id;
}

public void setId(Long id) {
this.id = id;
}

public String getAge() {
return this.age;
}

public void setAge(String age) {
this.age = age;
}

public String getUserName() {
return this.userName;
}

public void setUserName(String userName) {
this.userName = userName;
}

}

四、说明:

1. TCustomer的实体类和TUser的实体类格式是一样的,两个实体类对应的表分别为Customer和User,他们的映射关系在TCustomer.hbm.xml和TUser.hbm.xml里面进行配置~

2. hibernate.cfg.xml为连接数据库的配置文件;hibernate.reveng.xml是hibernate对数据库表进行逆向生成POJO类可自动生成的,在生成映射代码的时候需要用到,这些都是在使用hibernate tools搭建的时候可以自动生成的,所以不必担心~

3. 为方便大家搭建框架,附上搭建框架个人认为比较好的一篇文章链接:http://www.cnblogs.com/abllyboy/archive/2010/12/23/1914577.html,希望能对搭建框架不是很懂的亲们有所帮助~

4. 附上本次测试使用到的相关jar包链接:http://download.csdn.net/detail/alan_liuyue/9696324~

5. 因为网上已经有很多hibernate测试的项目实例,所以在这里就免得多此一举,就不再上传这次测试的实例,如果确实有需要的话可以留下邮箱,可以单独发送~

五、结束语

实践是检验真理的标准;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐