hibernate及SpringBoot集成Jpa实现对数据库操作
首先使用Maven工程和junit完成hibernate对数据库的简单操作,完成之后在使用SpringBoot集成Jap完成hibernate对数据库的操作。本文仅供新手学习查看,具体线上使用需要对代码继续进行相关优化。
1、先创建一个Maven工程,导入相关依赖。
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--hibernate-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.14.Final</version>
</dependency>
2、在resources目录下创建hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库配置-->
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/user-mode</property>
<property name="connection.username">root</property>
<property name="connection.password">1234qwer</property>
<!-- Hibernate 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 打印 SQL 语句-->
<property name="show_sql">true</property>
<!-- 格式化 SQL 语句-->
<property name="format_sql">true</property>
<!-- 映射文件所在位置 -->
<mapping resource="/mapper/User.hbm.xml" />
</session-factory>
</hibernate-configuration>
3、创建一个实体类
@Datapublic class User {private Long id;
private String name;
private String password;
private String account;
private String email;private String secondName;
}
4、在resources目录下创建一个mapper目录,在mapper目录下面创建User实体类的映射文件User.hbm.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- name 属性:持久化类的全路径 -->
<!-- table 属性:表的名称 -->
<class name="com.itmy.entity.User" table="tb_user">
<id name="id" column="id" type="java.lang.Long">
<!--主键生成策略-->
<generator class="native"></generator>
</id>
<property name="name" column="name" type="java.lang.String" not-null="false" length="50"></property>
<property name="account" column="account" type="java.lang.String"></property>
<property name="email" column="email" type="java.lang.String"></property>
<property name="password" column="password" type="java.lang.String"></property>
<property name="secondName" column="second_name" type="java.lang.String"></property>
</class>
</hibernate-mapping>
配置完上述配置之后,接下来我们就可以使用junit进行测试了,先在test目录下面创建一个测试类UserTest。
5、使用junit添加一个User用户
@org.junit.Test
public void TestSave(){
//读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 获取 Session 对象
Session openSession = sessionFactory.openSession();
//开启事务
openSession.beginTransaction();
User user = new User();
user.setAccount("hibernateTest01");
user.setName("hibernateTest01");
user.setPassword("ASWDEWSA");
user.setEmail("hibernate02@hbm.com");
user.setSecondName("hibernateTest01");
openSession.save(user);
//提交事务
openSession.getTransaction().commit();
}
执行之后,控制台没有报红,说明添加成功了。可以给上述代码做下优化,帮助我们更方便的完成其他操作。
private Session openSession;
@Before
public void before(){
//读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
Configuration configuration = new Configuration().configure();
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 获取 Session 对象
openSession = sessionFactory.openSession();
} @org.junit.Test
public void TestSave(){
// //读取 hibernate.cfg.xml配置文件, 创建会话工厂 SessionFactory
// Configuration configuration = new Configuration().configure();
// SessionFactory sessionFactory = configuration.buildSessionFactory();
// // 获取 Session 对象
// Session openSession = sessionFactory.openSession();
//开启事务
openSession.beginTransaction();
User user = new User();
user.setAccount("hibernateTest01");
user.setName("hibernateTest01");
user.setPassword("ASWDEWSA");
user.setEmail("hibernate02@hbm.com");
user.setSecondName("hibernateTest01");
openSession.save(user);
//提交事务
openSession.getTransaction().commit();
}
@After
public void after(){
if (openSession != null){
openSession.close();
}
}
实现更新、删除、查询,查询有许多种方法,后面可以进行深入学习。
@org.junit.Test
public void testUpdate(){
//开启事务
openSession.beginTransaction();
User user = new User();
user.setId(8L);
user.setAccount("hibernateTest03");
user.setName("hibernateTest03");
user.setPassword("ASWDEWSAW");
user.setEmail("hibernate03@hbm.com");
user.setSecondName("hibernateTest03");
openSession.update(user);
//提交事务
openSession.getTransaction().commit();
}
@org.junit.Test
public void testDelete(){
//开启事务
openSession.beginTransaction();
User user = new User();
user.setId(8L);
openSession.delete(user);
//提交事务
openSession.getTransaction().commit();
}
@org.junit.Test
public void testFind(){
User user = new User();
user.setId(8L);
//已过时
Criteria criteria = openSession.createCriteria(User.class);
List list = criteria.list();
for (Object o : list) {
System.out.println(o);
}
List fromUser = openSession.createQuery("from User").list();
fromUser.forEach(System.out::println);
}
到这里通过maven简单的使用hibernate的操作就完成了,后面我们使用SpringBoot集成Jpa。
6、首先调整我们的maven项目,添加springboot相关依赖以及jpa依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.11.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.16</version>
</dependency>
<dependencies>
7、创建Springboot启动类
/**
* @date: 2023-05-11 13:29
*/
@SpringBootApplication
public class HibernApplication { public static void main(String[] args) {
SpringApplication.run(HibernApplication.class,args);
}
}
8、在resources目录下创建yml文件
server:
port: 8800
spring:
application:
name: hibernate
profiles:
active: prod
spring:
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQLDialect
new_generator_mappings: false
format_sql: true
#show_sql: true
database: mysql
show-sql: true
#当数据库表没有该属性字段,会根据实体类相关字段自动创建一个字段,如secondName在数据库创建的为second_name
hibernate:
ddl-auto: update datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/user-mode?serverTimezone=Asia/Shanghai
username: root
password: 1234qwer
9、调整之前创建的实体类
@Data
@Entity
@Table(name = "tb_user")
public class User { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id",nullable = false)
private Long id; private String name; private String password; private String account; private String email; @Column(name = "second_name",nullable = false)
private String secondName; }
10、创建一个dao层接口继承jpa接口
public interface UserMapper extends JpaRepository<User,Long> { }
后面就跟正常调用方法一样,通过注入UserMapp接口,进行调用。
@Service
public class UserServiceImpl implements IUserService { @Autowired
private UserMapper userMapper; @Override
public List<User> findAll() {
List<User> userIterable = userMapper.findAll();
return userIterable;
}
@Override
public User save() {
User user = new User();
user.setAccount("hibernateJPa03");
user.setName("hibernateJPa03");
user.setPassword("ASWDEWSAW");
user.setEmail("hibernateJPa03@hbm.com");
user.setSecondName("hibernateJPa03");
User save = userMapper.save(user);
return save;
}
@Override
public User update() {
User user = new User();
user.setId(5L);
user.setAccount("hibernateJPa03");
user.setName("hibernateJPa03");
user.setPassword("ASWDEWSAW");
user.setEmail("hibernateJPa03@hbm.com");
user.setSecondName("hibernateJPa03");
User save = userMapper.save(user);
return save;
}
@Override
public User delete() {
User user = new User();
user.setId(10L);
userMapper.delete(user);
return null;
}
@Override
public User userById() {
// Iterable<User> allById = userMapper.findAllById(Arrays.asList(1L));
Optional<User> userOptional = userMapper.findById(4L);
if (!userOptional.isPresent()){
return null;
}
User user = userOptional.get(); return user;
}
}
创建controller类编写一个接口进行测试。
@RestController
@RequestMapping("/admin/user")
public class UserController { @Autowired
private IUserService userService; @GetMapping
public String crudUser(){
List<User> userList = userService.findAll();
userList.forEach(System.out::println);
User user = userService.userById();
System.out.println(user);
return "操作执行成功!!!";
}
}
调用接口执行过后,查看控制台输出。
数据查询成功。至此springboot集成JPA就完成了。里面有很多方法,时间充足可以试试不同的方法。
hibernate及SpringBoot集成Jpa实现对数据库操作的更多相关文章
- springboot集成jpa,在postgresql数据库中创建主键自增表
依赖文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...
- Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA
大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...
- 用SpringBoot+MySql+JPA实现对数据库的增删改查和分页
使用SpringBoot+Mysql+JPA实现对数据库的增删改查和分页 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述 ...
- springboot 集成 jpa/hibernate
pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- springboot集成liquibase,h2数据库
Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. Liquibase具备如下特性:* 不依赖于特 ...
- springboot支付项目之springboot集成jpa
springboot集成spring-jpa 本文主要内容: 1:spring boot怎么集成spring-jpa以及第一个jpa查询示例 如jpa几个常用注解.lombok注解使用 2:怎么设置i ...
- springboot集成jpa
spring data jpa简介 spring data jpa是spring基于hibernate及jpa规范封装出来的一套持久层框架.该框架极大的降低了开发者工作量,提升开发效率.提供的关键字可 ...
- 12 — springboot集成JPA — 更新完毕
1.什么是jpa? 一堆不想整在这博客里面的理论知识.这些理论玩意儿就应该自行领悟到自己脑海里 1).JPA & Spring Data JPA 1.1).JPA JPA是Java Persi ...
- SpringBoot 集成Mybatis 连接Mysql数据库
记录SpringBoot 集成Mybatis 连接数据库 防止后面忘记 1.添加Mybatis和Mysql依赖 <dependency> <groupId>org.mybati ...
- springboot集成jpa操作mybatis数据库
数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...
随机推荐
- 01-第一个Spring程序
1.导包 所有和spring有关的包(有mybatis包的忽略),后期会使用maven引入 2. 引入spring的配置文件 可命名为applicationContext-service.xml或sp ...
- OVS-DPDK 流表查询详解
一图胜千言: flow和miniflow 在介绍之前先说一些概念:里面有两个结构很重要,一个是flow一个是miniflow这里介绍一下他们的数据结构和构造函数. flow: flow的特点是8字节对 ...
- 人脸关键点的应用场景及重难点解析丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网视频组 AI 算法工程师 周世付. 人脸检测.人脸关键点检测,是计算机视觉的基础算法.许多酷炫应用背后,例如美颜.贴纸.人脸驱动 avatar ...
- 【读书笔记】组合计数中的行列式方法 专题2 欧拉回路,the BEST theorem
目录 专题2-欧拉回路,the BEST theorem 一些定义 一个有向图是欧拉的充要条件 BEST定理 BSET定理推论 k-ary de Bruijn sequence定义 BSET theo ...
- Java面试——TCP与HTTP
更多内容,移步 IT-BLOG 一.Session 和 Cookie 的区别 [1]Cookie 保存在客户端,未设置存储时间的 Cookie,关闭浏览器会话 Cookie 就会被删除:设置了存储时间 ...
- MarkdownStudy01markdown用法
一级标题 二级标题 三级标题 字体 Hello,Word! Hello,Word! Hello,Word! Hello,Word! 引用 好好学Java 分割线 图片 超链接 点击跳转 列表 A B ...
- CTF-RE-学习记录-汇编-2
汇编工具DTDebug 下载后设置好odd与插件路径,同时在属性中设置为管理员身份运行(无Administrator权限进入的时候一直在提示) 寄存器 存储数据: CPU>内存>硬盘 32 ...
- 多台服务器之间配置ssh免密登录
需求:假设有N台服务器,N台服务器之间都需要配置相互间免密登录 步骤1:在一台服务器上安装ansible yum -y install epel-release && yum -y ...
- 中英文拼写检测纠正开源项目使用入门 word-checker 1.1.0
项目简介 word-checker 本项目用于单词拼写检查.支持英文单词拼写检测,和中文拼写检测. 特性说明 可以迅速判断当前单词是否拼写错误 可以返回最佳匹配结果 可以返回纠正匹配列表,支持指定返回 ...
- 运输问题—R实现
table { margin: auto } 运输问题 随着社会和经济的不断进步,现代物流业蓬勃发展,如何充分利用时间.信息.仓储.配送和联运体系创造更多的价值,是物流运作必须解决的问题.运输问题(t ...