什么是Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。

Hibernate的简单使用(Springboot项目)

pom文件引入jar包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

Springboot配置数据库信息

1
2
3
4
5
6
spring.datasource.url=jdbc:mysql://localhost:3306/webapp1901
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=admin
spring.datasource.password=123456

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

idea连接Mysql数据库

配置方法请参考百度教程(点此前往),配置成功后,可以在右侧工具栏查看自己的数据库

配置Hibernate

打开idea项目结构,添加Hibernate

添加xml配置文件

生成实体类

打开工具栏配置,找到生成持久层映射这一项

如图配置实体类生成规则

选择实体类生成位置

Hibernate为我们生成了实体类,要注意的是,你可能会碰到生成的实体类报红的问题,它将表中int(11)的字段生成为了Long类型,需要手动更正一下

创建Dao文件

继承Hibernate提供的CrudRepository类就可实现基本的增删改查

1
2
3
4
5
6
7
8
9
10
package cn.com.scitc.webapp3.dao;

import cn.com.scitc.webapp3.pojo.Manager;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ManagerDao extends CrudRepository<Manager,Integer> {
// CrudRepository泛型第一个值为实体类,第二个值为你的表的主键类型
}

编写测试类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package cn.com.scitc.webapp3.dao;

import cn.com.scitc.webapp3.pojo.Manager;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

@SpringBootTest
class ManagerDaoTest {
@Autowired
private ManagerDao managerDao;

private Logger logger = LoggerFactory.getLogger(getClass());

@Test
public void findById() {
Optional<Manager> obj = managerDao.findById(1);
Manager manager = obj.get();
logger.info(manager.getLoginId());
Assertions.assertEquals("JohnCena",manager.getLoginId());
}

@Test
public void findAll() {
Iterable<Manager> list = managerDao.findAll();
for (Manager manager : list) {
System.out.println(manager.getRealName());
}
}

// Hibernate中将insert和update合并成了一个save方法,它会根据主键自动判断是增加还是修改操作

@Test
public void update() {
Manager manager = new Manager();
manager.setId(2);
manager.setLoginId("Admin");
manager.setRealName("李四");
manager.setPwd("123456");
manager.setLoginCount(88);
manager.setLastLoginDt(null);

managerDao.save(manager);
Manager manager1 = managerDao.findById(2).get();
logger.info(manager1.getRealName());
}

@Test
public void delete() {
Manager manager = new Manager();
manager.setId(2);

managerDao.delete(manager);
}

@Test
public void insert() {
Manager manager = new Manager();
manager.setId(2);
manager.setLoginId("Admin");
manager.setRealName("李四");
manager.setPwd("123456");
manager.setLoginCount(88);
manager.setLastLoginDt(null);
managerDao.save(manager);
}

@Test
public void deleteByIds() {
List<Integer> ids = new ArrayList<>();
ids.add(2);
ids.add(3);

managerDao.deleteAllById(ids);
}

@Test
public void findByLoginId() {
Manager manager = managerDao.findByLoginId("JohnCena");
Assertions.assertEquals("张三",manager.getRealName());
}
}