SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

1本文源码 2GitHub:知了一笑 3https://github.com/cicadasmile/spring-boot-base

一、JAP框架简介

JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开发以及整合ORM技术,结束Hibernate、TopLink、JDO等ORM框架各自为营的局面。JPA是在吸收现有ORM框架的基础上发展而来,易于使用,伸缩性强。

二、与SpringBoot2.0整合

1、核心依赖

1<!-- JPA框架 --> 2<dependency> 3 <groupid>org.springframework.boot</groupid> 4 <artifactid>spring-boot-starter-data-jpa</artifactid> 5</dependency>

2、配置文件

1spring: 2 application: 3 name: node09-boot-jpa 4 datasource: 5 url: jdbc:mysql://localhost:3306/data_jpa?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true 6 username: root 7 password: root 8 driver-class-name: com.mysql.jdbc.Driver 9 jpa: 10 hibernate: 11 ddl-auto: update 12 show-sql: true

ddl-auto几种配置说明

1)create

每次加载hibernate时都删除上一次的生成的表,然后根据bean类重新来生成新表,容易导致数据丢失,(建议首次创建时使用)。

2)create-drop

每次加载hibernate时根据bean类生成表,但是sessionFactory一关闭,表就自动删除。

3)update

第一次加载hibernate时根据bean类会自动建立起表的结构,以后加载hibernate时根据bean类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。

4)validate

每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

3、实体类对象

就是根据这个对象生成的表结构。

1@Table(name = "t_user") 2@Entity 3public class User { 4 @Id 5 @GeneratedValue 6 private Integer id; 7 @Column 8 private String name; 9 @Column 10 private Integer age; 11 // 省略 GET SET 12}

4、JPA框架的用法

定义对象的操作的接口,继承JpaRepository核心接口。

1import com.boot.jpa.entity.User; 2import org.springframework.data.jpa.repository.JpaRepository; 3import org.springframework.data.jpa.repository.Query; 4import org.springframework.data.repository.query.Param; 5import org.springframework.stereotype.Repository; 6@Repository 7public interface UserRepository extends JpaRepository<user,integer> { 8 9 // 但条件查询 10 User findByAge(Integer age); 11 // 多条件查询 12 User findByNameAndAge(String name, Integer age); 13 // 自定义查询 14 @Query("from User u where u.name=:name") 15 User findSql(@Param("name") String name); 16}

5、封装一个服务层逻辑

1import com.boot.jpa.entity.User; 2import com.boot.jpa.repository.UserRepository; 3import org.springframework.stereotype.Service; 4import javax.annotation.Resource; 5@Service 6public class UserService { 7 @Resource 8 private UserRepository userRepository ; 9 // 保存 10 public void addUser (User user){ 11 userRepository.save(user) ; 12 } 13 // 根据年龄查询 14 public User findByAge (Integer age){ 15 return userRepository.findByAge(age) ; 16 } 17 // 多条件查询 18 public User findByNameAndAge (String name, Integer age){ 19 return userRepository.findByNameAndAge(name,age) ; 20 } 21 // 自定义SQL查询 22 public User findSql (String name){ 23 return userRepository.findSql(name) ; 24 } 25 // 根据ID修改 26 public void update (User user){ 27 userRepository.save(user) ; 28 } 29 //根据id删除一条数据 30 public void deleteStudentById(Integer id){ 31 userRepository.deleteById(id); 32 } 33}

三、测试代码块

1import com.boot.jpa.JpaApplication; 2import com.boot.jpa.entity.User; 3import com.boot.jpa.service.UserService; 4import org.junit.Test; 5import org.junit.runner.RunWith; 6import org.springframework.boot.test.context.SpringBootTest; 7import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 8import javax.annotation.Resource; 9@RunWith(SpringJUnit4ClassRunner.class) 10@SpringBootTest(classes = JpaApplication.class) 11public class UserJpaTest { 12 @Resource 13 private UserService userService ; 14 @Test 15 public void addUser (){ 16 User user = new User() ; 17 user.setName("知了一笑"); 18 user.setAge(22); 19 userService.addUser(user); 20 User user1 = new User() ; 21 user1.setName("cicada"); 22 user1.setAge(23); 23 userService.addUser(user1); 24 } 25 @Test 26 public void findByAge (){ 27 Integer age = 22 ; 28 // User{id=3, name='知了一笑', age=22} 29 System.out.println(userService.findByAge(age)); 30 } 31 @Test 32 public void findByNameAndAge (){ 33 System.out.println(userService.findByNameAndAge("cicada",23)); 34 } 35 @Test 36 public void findSql (){ 37 // User{id=4, name='cicada', age=23} 38 System.out.println(userService.findSql("cicada")); 39 } 40 @Test 41 public void update (){ 42 User user = new User() ; 43 // 如果这个主键不存在,会以主键自增的方式新增入库 44 user.setId(3); 45 user.setName("哈哈一笑"); 46 user.setAge(25); 47 userService.update(user) ; 48 } 49 @Test 50 public void deleteStudentById (){ 51 userService.deleteStudentById(5) ; 52 } 53}

四、源代码地址

1GitHub地址:知了一笑 2https://github.com/cicadasmile/spring-boot-base 3码云地址:知了一笑 4https://gitee.com/cicadasmile/spring-boot-base

</user,integer>

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作

本文源码GitHub:知了一笑https://github.com/cicadasmile/springbootbase一、JAP框架简介JPA(JavaPersistenceAPI)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范。主要是为了简化持久层开