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 }
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!!!