zoukankan      html  css  js  c++  java
  • Hibernate的CRUD以及junit测试

    Hibernate的CRUD以及junit测试

    1:第一步创建动态工程引包,省略。

    2:第二步,创建数据库和数据表,省略。

    3:第三步,创建实体类,如User.java,源码如下所示:

      对于实体类,一般实现构造方法,而构造方法一般实现三个:

        一个无参构造方法;

        一个有参的构造方法;

        一个不带id的构造方法;

     1 package com.bie.po;
     2 /** 
     3 * @author BieHongLi 
     4 * @version 创建时间:2017年3月8日 下午5:17:23 
     5 * 
     6 */
     7 public class User {
     8 
     9     private int id;
    10     private String name;
    11     private String password;
    12     private String email;
    13     private String phone;
    14     public int getId() {
    15         return id;
    16     }
    17     public void setId(int id) {
    18         this.id = id;
    19     }
    20     public String getName() {
    21         return name;
    22     }
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26     public String getEmail() {
    27         return email;
    28     }
    29     public void setEmail(String email) {
    30         this.email = email;
    31     }
    32     public String getPhone() {
    33         return phone;
    34     }
    35     public void setPhone(String phone) {
    36         this.phone = phone;
    37     }
    38     public String getPassword() {
    39         return password;
    40     }
    41     public void setPassword(String password) {
    42         this.password = password;
    43     }
    44     @Override
    45     public String toString() {
    46         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
    47                 + "]";
    48     }
    49     public User(String name, String password, String email, String phone) {
    50         super();
    51         this.name = name;
    52         this.password = password;
    53         this.email = email;
    54         this.phone = phone;
    55     }
    56     public User(int id, String name, String password, String email, String phone) {
    57         super();
    58         this.id = id;
    59         this.name = name;
    60         this.password = password;
    61         this.email = email;
    62         this.phone = phone;
    63     }
    64     public User() {
    65         super();
    66     }
    67     
    68     
    69 }

    4:配置数据表和实体类之间的映射,起名如实体类.hbm.xml,源码如下所示:

     1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5     
     6 <hibernate-mapping package="com.bie.po"> 
     7     <!-- 操作条件:
     8         1:对象与表
     9         2:属性与字段的对应
    10         3:类型的对应,类型默认采用属性的类型,type不写的话
    11      -->
    12     <class name="User" table="user">
    13         <!-- 主键,映射 -->
    14         <id name="id" column="id">
    15             <generator class="native"></generator>
    16         </id>
    17         
    18         <!-- 非主键,映射 -->
    19         <property name="name" column="name"></property>
    20         <property name="password" column="password"></property>
    21         <property name="email" column="email"></property>
    22         <property name="phone" column="phone"></property>
    23         
    24         
    25     </class>
    26 
    27 </hibernate-mapping>

    5:完成实体类和数据表之间的配置,就开始配置数据库连接和加载映射,hibernate,cfg.xml

     1 <!DOCTYPE hibernate-configuration PUBLIC
     2     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     3     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
     4 
     5 <hibernate-configuration>
     6     <session-factory>
     7         <!-- 
     8             1:数据连接配置
     9             2:加载所有的映射(*.hbm.xml)
    10          -->
    11          
    12          <!-- 1:数据连接配置 -->
    13          <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    14          <property name="hibernate.connection.url">jdbc:mysql:///test</property>
    15          <property name="hibernate.connection.username">root</property>
    16          <property name="hibernate.connection.password">123456</property>
    17          <!-- mysql数据库的方言 -->
    18          <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    19          
    20          <property name="hibernate.show_sql">true</property>
    21          
    22          <!-- 2:加载所有的映射(*.hbm.xml) -->
    23          <mapping resource="com/bie/po/User.hbm.xml"/>
    24          
    25     </session-factory>
    26 </hibernate-configuration>

     6:提取工具类HibernateUtils.java,简化开发:

     1 package com.bie.utils;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.cfg.Configuration;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年3月10日 下午1:47:55 
    10 * 创建工具类
    11 */
    12 public class HibernateUtils {
    13 
    14     private static SessionFactory sf;
    15     static{
    16         //加载主配置文件,并且创建session的工厂
    17         sf=new Configuration().configure().buildSessionFactory();
    18     }
    19     
    20     //创建session对象
    21     public static Session getSession(){
    22         return sf.openSession();
    23     }
    24 }

    7:最后完成Dao层的替换,由之前使用的基本的Connection创建连接替换成为session创建连接;

      首先创建接口再实现接口;

      注意:

         更新的时候,索引是从0开始的,不是从1开始的,切记;

     1 package com.bie.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.bie.po.User;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年3月10日 下午1:35:14 
    10 * 
    11 */
    12 public interface UserDao {
    13 
    14     /***
    15      * 用户信息保存的方法
    16      * @param user
    17      */
    18     public void insertUser(User user);
    19     
    20     
    21     /***
    22      * 用户信息更改的方法
    23      * @param user
    24      */
    25     public void updateUser(User user);
    26     
    27     
    28     /***
    29      * 根据用户的编号用户信息查询的方法
    30      * @param id
    31      * @return
    32      */
    33     public User selectUserId(int id);
    34     
    35     
    36     /**
    37      * 用户查询所有的信息
    38      * @return
    39      */
    40     public List<User> selectAll();
    41     
    42     /***
    43      * 
    44      * @param name
    45      * @return
    46      */
    47     public List<User> selectAll(String name);
    48     
    49     /***
    50      * 分页查询的方法
    51      * @param index
    52      * @param count
    53      * @return
    54      */
    55     public List<User> selectPage(int index,int count);
    56     
    57     /***
    58      * 删除的方法
    59      * @param id
    60      */
    61     public void deleteUser(int id);
    62 }
    View Code
      1 package com.bie.dao.impl;
      2 
      3 import java.util.List;
      4 
      5 import org.hibernate.Query;
      6 import org.hibernate.Session;
      7 import org.hibernate.Transaction;
      8 
      9 import com.bie.dao.UserDao;
     10 import com.bie.po.User;
     11 import com.bie.utils.HibernateUtils;
     12 
     13 /** 
     14 * @author BieHongLi 
     15 * @version 创建时间:2017年3月10日 下午1:35:27 
     16 * 
     17 */
     18 public class UserDaoImpl implements UserDao{
     19 
     20     @Override
     21     public void insertUser(User user) {
     22         Session session=null;
     23         Transaction tx=null;
     24         try {
     25             //获取session
     26             session=HibernateUtils.getSession();
     27             //开启事务
     28             tx=session.beginTransaction();
     29             //插入即保存
     30             session.save(user);
     31         } catch (Exception e) {
     32             throw new RuntimeException(e);
     33         }finally{
     34             //提交事务
     35             tx.commit();
     36             //关闭session
     37             session.close();
     38         }
     39         
     40     }
     41 
     42     @Override
     43     public void updateUser(User user) {
     44         Session session=null;
     45         Transaction tx=null;
     46         try {
     47             session=HibernateUtils.getSession();
     48             tx=session.beginTransaction();
     49             session.update(user);
     50         } catch (Exception e) {
     51             throw new RuntimeException(e);
     52         }finally{
     53             //提交事务
     54             tx.commit();
     55             //关闭事务
     56             session.close();
     57         }
     58         
     59     }
     60 
     61     @Override
     62     public User selectUserId(int id) {
     63         //获取session
     64         Session session=null;
     65         //事务
     66         Transaction tx=null;
     67         try {
     68             //获取session
     69             session=HibernateUtils.getSession();
     70             //开启事务
     71             tx=session.beginTransaction();
     72             
     73             return (User)session.get(User.class, id);
     74         } catch (Exception e) {
     75             throw new RuntimeException(e);
     76         }finally{
     77             //提交事务
     78             tx.commit();
     79             //关闭session
     80             session.close();
     81         }
     82     }
     83 
     84     @Override
     85     public List<User> selectAll() {
     86         //session
     87         Session session=null;
     88         //事务
     89         Transaction tx=null;
     90         try {
     91             //获取session
     92             session=HibernateUtils.getSession();
     93             //开启事务
     94             tx=session.beginTransaction();
     95             //HQL语句
     96             Query q=session.createQuery("from User");
     97             
     98             List<User> list=q.list();
     99             return list;
    100         } catch (Exception e) {
    101             throw new RuntimeException(e);
    102         }finally{
    103             //提交事务
    104             tx.commit();
    105             //关闭session
    106             session.close();
    107         }
    108     }
    109 
    110     @Override
    111     public List<User> selectAll(String name) {
    112         //session
    113         Session session=null;
    114         //事务
    115         Transaction tx=null;
    116         try {
    117             //获取session
    118             session=HibernateUtils.getSession();
    119             //开启事务
    120             tx=session.beginTransaction();
    121             //HQL语句
    122             Query q = session.createQuery("from User user where user.name=? ");
    123             //注意:参数索引从0开始
    124             q.setString(0, name);
    125             
    126             return q.list();
    127         } catch (Exception e) {
    128             throw new RuntimeException();
    129         }finally{
    130             //提交事务
    131             tx.commit();
    132             //关闭session
    133             session.close();
    134         }
    135     }
    136 
    137     @Override
    138     public List<User> selectPage(int index, int count) {
    139         //session
    140         Session session=null;
    141         //事务
    142         Transaction tx=null;
    143         try {
    144             //获取session
    145             session=HibernateUtils.getSession();
    146             //开启事务
    147             tx=session.beginTransaction();
    148             //HQL查询
    149             Query q = session.createQuery("from User ");
    150             //设置分页参数
    151             q.setFirstResult(index);//查询起始行
    152             q.setMaxResults(count);//查询返回的行数
    153             
    154             return q.list();
    155         } catch (Exception e) {
    156             throw new RuntimeException();
    157         }finally{
    158             //提交事务
    159             tx.commit();
    160             //关闭session
    161             session.close();
    162         }
    163     }
    164 
    165     @Override
    166     public void deleteUser(int id) {
    167         Session session=null;
    168         Transaction tx=null;
    169         try {
    170             session=HibernateUtils.getSession();
    171             tx=session.beginTransaction();
    172             //先根据id查询出用户的信息再删除
    173             Object obj=session.get(User.class, id);
    174             if(obj!=null){
    175                 session.delete(obj);
    176             }
    177         } catch (Exception e) {
    178             throw new RuntimeException();
    179         }finally{
    180             //提交事务
    181             tx.commit();
    182             //关闭session
    183             session.close();
    184         }
    185     }
    186 
    187     
    188 }

    8:最后一步,完成测试。源码如下所示:

     1 package com.bie.test;
     2 
     3 import java.util.List;
     4 
     5 import org.junit.Test;
     6 
     7 import com.bie.dao.UserDao;
     8 import com.bie.dao.impl.UserDaoImpl;
     9 import com.bie.po.User;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 创建时间:2017年3月10日 下午2:34:48 
    14 * 
    15 */
    16 public class UserCRUD {
    17 
    18     private UserDao dao=new UserDaoImpl();
    19     
    20     @Test
    21     public void insertUser(){
    22         dao.insertUser(new User("曹操","111","111111","111111@163.com"));
    23         
    24     }
    25     
    26     @Test
    27     public void updateUser(){
    28         User user=new User();
    29         user.setId(1);
    30         user.setName("刘备222");
    31         
    32         dao.updateUser(user);
    33     }
    34     
    35     @Test
    36     public void deleteUser(){
    37         dao.deleteUser(30);
    38     }
    39     
    40     @Test
    41     public void selectUserId(){
    42         //根据用户的编号进行查询
    43         User user=dao.selectUserId(1);
    44         System.out.println(user);
    45     }
    46     
    47     @Test
    48     public void selectUser(){
    49         //查询用户的所有信息
    50         List<User> list = dao.selectAll();
    51         System.out.println(list);
    52     }
    53     
    54     @Test
    55     public void selectUserName(){
    56         //根据用户姓名查询信息
    57         List<User> list=dao.selectAll("李四");
    58         System.out.println(list);
    59     }
    60     
    61     @Test
    62     public void selectPage(){
    63         //分页查询,第一个参数是起始行,第二个参数是每页的个数
    64         List<User> list=dao.selectPage(0, 5);
    65         System.out.println(list);
    66     }
    67 }

    运行效果如下所示:


    路在远方,人丑就该多码Coding!!!

  • 相关阅读:
    抽象与接口的综合练习
    java构造函数能否被继承,为什么?
    题解 【USACO 4.2.1】草地排水
    题解 【NOI2010】超级钢琴
    题解 [USACO Mar08] 奶牛跑步
    题解 【NOIP2016】魔法阵
    题解 对称二叉树
    题解 【NOIP2014】解方程
    题解 【NOIP2010】关押罪犯
    题解 贪吃蛇
  • 原文地址:https://www.cnblogs.com/biehongli/p/6530903.html
Copyright © 2011-2022 走看看