什么是Hibernate
Hibernate是一个开放源代码的
对象关系映射框架
,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任。
Hibernate的简单使用(Springboot项目)
pom文件引入jar包
<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配置数据库信息
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数据库
配置方法请参考百度教程(点此前往),配置成功后,可以在右侧工具栏查看自己的数据库
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E4%B8%80.jpg#pic_center)
配置Hibernate
打开idea项目结构,添加Hibernate
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E4%BA%8C.jpg)
添加xml配置文件
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E4%B8%89.jpg#pic_center)
生成实体类
打开工具栏配置,找到生成持久层映射这一项
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E5%9B%9B.jpg#pic_center)
如图配置实体类生成规则
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E5%85%AD.jpg#pic_center)
选择实体类生成位置
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E4%B8%83.jpg#pic_center)
Hibernate为我们生成了实体类,要注意的是,你可能会碰到生成的实体类报红的问题,它将表中int(11)的字段生成为了Long类型,需要手动更正一下
![](https://img.jcxiaozhan.top/Hibernate%E5%85%A5%E9%97%A8%E5%85%AB.jpg#pic_center)
创建Dao文件
继承Hibernate提供的CrudRepository类就可实现基本的增删改查
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泛型第一个值为实体类,第二个值为你的表的主键类型
}
编写测试类
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());
}
}