当前位置:   article > 正文

使用hibernate进行CRUD_javaee3.实现多对多关系的crud功能,要求cud使用hibernate的接口实现,r需要采用

javaee3.实现多对多关系的crud功能,要求cud使用hibernate的接口实现,r需要采用hql

一. 查询操作

Criteria  – 查询JavaBean. – session.createCriteria(JavaBean.class);
Query      - 用于执行HQL – session.createQuery(HQL);
SQLQuery  - 用于执行原生的SQL. – session.createSQLQuery(SQL);
条件查询    - Restrictions- Restrictions.eq(propertyName,”value”);
1:查询:
A:全部查询,使用Criteri(完全限定名-类名)进行查询
B:全部查询,使用Query - 不执行SQL-语句,执行的是HQL - Hibernate Query Language.
C:全部查询,使用SQLQuery类,此类执行原生的SQL语句。

2:条件查询
A:对于Criteria类,必须使用add方法设置条件。
B:对于Query类,应该使用?(占位符)或是命名(where id=:myId)查询
C:普通查询

3:如果一个查询的它的条件不确定,应该怎么弄?

3.1全部查询-使用Criteria进行查询

  1. @Test // 标准化查询接口
  2. public void test2(){
  3. Criteria cr = sess.createCriteria(Stud.class); // 按类名查询
  4. Criterion cn = Restrictions.eq("name", "c"); // 每个Criterion对象表示一个查询条件
  5. cr.add(cn); // 增加条件
  6. List<Stud> studs = cr.list(); // 查询的结果是已经封装好的
  7. System.err.println(studs);
  8. }

3.2全部查询-使用Query进行查询

  1. @Test
  2. public void test3(){ // 使用HQL语句进行查询,HQL语句是面向类的,不是面向表的,所以Stud同javabean
  3. String hql = "from Stud"; // select开始的语句,但select可以省略
  4. Query query = sess.createQuery(hql);
  5. List<Stud> studs = query.list();
  6. System.err.println(studs);
  7. }


3.3全部查询-使用SQLQuery进行查询

  1. @Test
  2. public void test4(){
  3. String sql = "select * from stud";
  4. this.getSession().createSQLQuery(sql).addEntity(Rl_employee_info.class).list()
  5. // SQLQuery sqlQuery = sess.createSQLQuery(sql);
  6. // List list = sqlQuery.list(); //返回的是什么? List<Object[]> 里面存的是数组
  7. // sqlQuery.setResultTransformer(Transformers.aliasToBean(Stud.class)); //转成List<Stud>类型
  8. // for(Object o : list){
  9. // Object[] oo= (Object[])o;
  10. // System.err.println(">ID:"+oo[0]+",Name:"+oo[1]);
  11. // }
  12. }

Criteria类,使用add方法设置条件

  1. @Test
  2. public void query1(){ // 使用Criteria查询id为4的用户 Jack %j%
  3. Session sess = HibernateUtils.getSession();
  4. sess.beginTransaction();
  5. Criteria c = sess.createCriteria(Stud.class);
  6. Criteria c = sess.createCriteria(Stud.class,”s”); // 第二个参数为别名
  7. //设置条件,通过add方法
  8. //c.add(Restrictions.eq("id",4)); // 第一个参数是Stud的id属性的名,第二个参数是对比的值,相当于id=4
  9. //List<Stud> list = c.list();
  10. //对于使用主键的查询,可以使用另一种方式
  11. //c.add(Restrictions.idEq(3)); //直接使用主键等于什么值的方式
  12. c.add(Restrictions.ge("id", 3)); // 获取id>3 的
  13. //再添加一个条件
  14. c.add(Restrictions.eq("name", "22")); // name为varchar类型
  15. c.add(Restrictions.like("name", "K",MatchMode.ANYWHERE)); // k - %k% = 全于
  16. List<Stud> list = c.list();
  17. sess.getTransaction().commit();
  18. }


Query类,使用命名查询

  1. @Test
  2. public void query2(){
  3. Session sess = HibernateUtils.getSession();
  4. sess.beginTransaction();
  5. String hql = "from Stud where id=:myId and name=:yourName"; //使用命名的查询
  6. Query query = sess.createQuery(hql);
  7. query.setInteger("myId",3);
  8. query.setString("yourName","Jack");
  9. Stud stud = (Stud) query.uniqueResult(); //只要根据id查询则返回一行,则可以使用uniqueResult的方法
  10. System.err.println(">>>:"+stud);
  11. sess.getTransaction().commit();
  12. }

  1. // c.add(Restrictions.allEq(param)); // param为一个HashMap
  2. // List list = c.list();
  3. Query query = se.createQuery(hql);
  4. query.setProperties(param);///一次设置可变参数
  5. List list = query.list();
  6. System.err.println(">>:"+list);

二. 插入操作

  1. //@Test
  2. public void test1(){
  3. Session sess = HibernateUtils.getSession(); //打开一个新的session
  4. Transaction tx = sess.beginTransaction();
  5. Stud s = new Stud(); //不需要设置主键,由hibernate自动分配主键
  6. s.setName("张三");
  7. sess.save(s);
  8. tx.commit();
  9. }


三. 更新操作

  1. //@Test
  2. public void test1(){
  3. Session sess = HibernateUtils.getSession(); //打开一个新的session
  4. Transaction tx = sess.beginTransaction();
  5. Stud s = new Stud(); //不需要设置主键,由hibernate自动分配主键
  6. s.setName("张三");
  7. sess.save(s);
  8. tx.commit();
  9. }

在customer.hbm.xml文件的class标签中增加select-before-update=”true” (在执行更新之前查询)

目的: 把要更新的信息又放置到session的一级缓存中,快照有一份

         再更新时,拿缓存中的数据和快照比对,没有变化,所以不再产生update语句
 
saveOrUpdate: 该方法同时包含save和update方法,

* 如果在javabean中id为Integer类型(private Integer id)

      * 如果id==null(临时对象)执行save操作

      * 如果id!=null(游离对象)就用update方法

      * 如果是持久化对象就直接返回

* 如果在javabean中id为int类型(private int id) 此时id的默认值为0

      * 如果javabean中id属性的值与unsaved-value=”0” 相同,执行insert操作

      * 如果javabean中id属性的值与unsaved-value=”0” 不相同,执行update操作

四. 删除操作

五. 工具类:HibernateUtils.java

  1. public class HibernateUtils {
  2. private static SessionFactory sf = null;
  3. static {
  4. Configuration config = new Configuration();
  5. config.configure("hibernate.cfg.xml"); // hibernate.cfg.xml放置在src目录下
  6. sf = config.buildSessionFactory();
  7. }
  8. // 获取session
  9. public static Session getSession() {
  10. if (sf != null) {
  11. return sf.openSession();
  12. }
  13. return null;
  14. }
  15. // 关闭session
  16. public static void closeSession(Session session) {
  17. if (session != null && session.isOpen()) {
  18. session.close();
  19. }
  20. }
  21. // 开启事务
  22. public static Transaction beginTransaction(Session session) {
  23. if (session != null && session.isOpen()) {
  24. return session.beginTransaction();
  25. }
  26. return null;
  27. }
  28. // 提交事务
  29. public static void commitTransaction(Transaction ts) {
  30. if (ts != null && !ts.wasCommitted()) {
  31. ts.commit();
  32. }
  33. }
  34. // 回滚事务
  35. public static void rollbackTransaction(Transaction ts) {
  36. if (ts != null && !ts.wasRolledBack()) {
  37. ts.rollback();
  38. }
  39. }
  40. }

六. Dao的标准写法CRUD

  1. public class CustomerDao {
  2. public void saveCustomer(Customer customer){ // 1. 插入记录
  3. Session session = null;
  4. Transaction ts = null;
  5. try{
  6. session = HibernateUtils.getSession();
  7. ts = HibernateUtils.beginTransaction(session);
  8. if(session!=null){
  9. session.save(customer);
  10. }
  11. HibernateUtils.commitTransaction(ts);
  12. }catch(HibernateException e){
  13. HibernateUtils.rollbackTransaction(ts);
  14. throw new RuntimeException(e);
  15. }finally{
  16. HibernateUtils.closeSession(session);
  17. }
  18. }
  19. public void updateCustomer(Customer customer){ // 2. 更新记录
  20. Session session = null;
  21. Transaction ts = null;
  22. try{
  23. session = HibernateUtils.getSession();
  24. if(session!=null){
  25. ts = HibernateUtils.beginTransaction(session);
  26. session.update(customer);
  27. HibernateUtils.commitTransaction(ts);
  28. }
  29. }catch(HibernateException e){
  30. HibernateUtils.rollbackTransaction(ts);
  31. throw new RuntimeException(e);
  32. }finally{
  33. HibernateUtils.closeSession(session);
  34. }
  35. }
  36. public Customer getCustomerById(int i){ // 3. 通过id查找
  37. Session session = null;
  38. Transaction ts = null;
  39. Customer customer = null;
  40. try{
  41. session = HibernateUtils.getSession();
  42. if(session!=null){
  43. ts = HibernateUtils.beginTransaction(session);
  44. customer = (Customer)session.get(Customer.class, i);
  45. HibernateUtils.commitTransaction(ts);
  46. }
  47. }catch(HibernateException e){
  48. HibernateUtils.rollbackTransaction(ts);
  49. throw new RuntimeException(e);
  50. }finally{
  51. HibernateUtils.closeSession(session);
  52. }
  53. return customer;
  54. }
  55. public List<Customer> findCustomers(){ // 4. 获取所有记录
  56. Session session = null;
  57. Transaction ts = null;
  58. List<Customer> list = null;
  59. try{
  60. session = HibernateUtils.getSession();
  61. if(session!=null){
  62. ts = HibernateUtils.beginTransaction(session);
  63. Query query = session.createQuery("from Customer c");
  64. list = query.list();
  65. HibernateUtils.commitTransaction(ts);
  66. }
  67. }catch(HibernateException e){
  68. HibernateUtils.rollbackTransaction(ts);
  69. throw new RuntimeException(e);
  70. }finally{
  71. HibernateUtils.closeSession(session);
  72. }
  73. return list;
  74. }
  75. public void deleteCustomerById(int id){ // 5. 删除记录
  76. Session session = null;
  77. Transaction ts = null;
  78. try{
  79. session = HibernateUtils.getSession();
  80. if(session!=null){
  81. ts = HibernateUtils.beginTransaction(session);
  82. Customer customer = (Customer)session.get(Customer.class, id);
  83. session.delete(customer);
  84. HibernateUtils.commitTransaction(ts);
  85. }
  86. }catch(HibernateException e){
  87. HibernateUtils.rollbackTransaction(ts);
  88. throw new RuntimeException(e);
  89. }finally{
  90. HibernateUtils.closeSession(session);
  91. }
  92. }
  93. }

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/870879
推荐阅读
  

闽ICP备14008679号