Hibernate的CRUD以及junit测试

2025-11-10 17:29:08

Hibernate的CRUD以及junit测试

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

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

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

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

一个无参构造方法;

一个有参的构造方法;

一个不带id的构造方法;

代码语言:javascript复制 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,源码如下所示:

代码语言:javascript复制 1

2

3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

5

6

7

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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

代码语言:javascript复制 1

2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

3 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

4

5

6

7

11

12

13 com.mysql.jdbc.Driver

14 jdbc:mysql:///test

15 root

16 123456

17

18 org.hibernate.dialect.MySQLDialect

19

20 true

21

22

23

24

25

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

代码语言:javascript复制 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开始的,切记;

代码语言:javascript复制 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 selectAll();

41

42 /***

43 *

44 * @param name

45 * @return

46 */

47 public List selectAll(String name);

48

49 /***

50 * 分页查询的方法

51 * @param index

52 * @param count

53 * @return

54 */

55 public List selectPage(int index,int count);

56

57 /***

58 * 删除的方法

59 * @param id

60 */

61 public void deleteUser(int id);

62 }代码语言:javascript复制 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 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 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 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 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:最后一步,完成测试。源码如下所示:

代码语言:javascript复制 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 list = dao.selectAll();

51 System.out.println(list);

52 }

53

54 @Test

55 public void selectUserName(){

56 //根据用户姓名查询信息

57 List list=dao.selectAll("李四");

58 System.out.println(list);

59 }

60

61 @Test

62 public void selectPage(){

63 //分页查询,第一个参数是起始行,第二个参数是每页的个数

64 List list=dao.selectPage(0, 5);

65 System.out.println(list);

66 }

67 }运行效果如下所示:

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