hibernate4框架的增删查改(包含hql)数据等功能方法
2016-11-29 09:10
363 查看
本次程序测试的是hibernate4框架的增加、修改、删除、查询等方法,每种功能都集合了几种简单的方法来进行测试,程序猿可按需获取;
hibernate框架搭建之后,使用它的流程基本是:获取configuration配置文件-->根据配置文件创建sessionFactory-->根据sessionFactory创建session-->根据session开启事务Transaction-->创建实例化对象,然后进行持久化增删改以及查询等操作-->最后关闭事务,关闭session,关闭sessionFactory;
这个流程大概面试的时候也会经常被问到,所以与其去死记硬背这些流程,倒不如从实践中获取真理,本次测试会完整还原整个流程;
实践之后,对流程的印象会更深刻喔^-^
;
话不多说,直接上代码:
一、整个测试的框架(简单易懂):
二、测试main方法类TestHibernate,相关的操作都已经作了详细说明:
三、实体类TUser
四、说明:
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测试的项目实例,所以在这里就免得多此一举,就不再上传这次测试的实例,如果确实有需要的话可以留下邮箱,可以单独发送~
五、结束语
实践是检验真理的标准;
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测试的项目实例,所以在这里就免得多此一举,就不再上传这次测试的实例,如果确实有需要的话可以留下邮箱,可以单独发送~
五、结束语
实践是检验真理的标准;
相关文章推荐
- Java通过MyBatis框架对MySQL数据进行增删查改的基本方法
- CI框架的数据操作(增删改查)方法总结
- 原创springmvc+spring3+hibernate4框架整合,实现增删改查功能
- springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能
- 应用开发框架之——根据数据表中的存储的方法名称来调用方法
- asp.net Mvc中实现在View页面中嵌入公用动态数据,实现方法为:include(包含动态页面数据)
- GridView中的数据导出到Excel方法(包含处理模板列)
- GridView中的数据导出到Excel方法(包含处理模板列)
- displaytag的使用方法(用于数据表格的显示和功能控制)
- ASE中数据结果集分页功能的三种实现方法
- [译]OOSE第4章:面向对象系统的研发 4.2 功能/数据方法Function/data methods
- 使用Excel“自动化”功能将数据输出到Excel的三种高效方法对比实验
- Hibernate查询数据的几种方式以及HQL用法及参数的几种使用方法
- C# WinForm 实现增删改查等功能(Access版) 系列之八-导出数据到Excel
- ASP.NET实现增删改查等功能(Access版)系统之二-gridview绑定数据及行绑定
- ajax 框架 dojo 提交json数据乱码的解决方法
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- vs2003中将数据邦定到combobox中包含空行的方法
- 【自然框架】之鼠标点功能现(一):单表的增删改查(即上次5月23日活动的一个主题)【Demo、源码下载】
- 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码