SpringBoot快速入门(2)之Spring Data JPA

 


作者:锈逗的大脑
原文链接:http://www.cnblogs.com/ocean-yh/p/8358740.html

讨论QQ群:151230186


目录:

 

备注: 此处是基于第一篇文章SpringBoot快速入门(1)之springMVC的基础上的后续文章,如不知道如何创建一个SpringBoot项目可先参照第一篇文章

 


 

  Spring Data JPA简介

  Spring Data JPA是Spring Data系列的一部分,可以轻松实现基于JPA的存储库。该模块处理对基于JPA的数据访问层的增强支持。这使得构建使用数据访问技术的Spring应用程序变得更加容易。

  实现应用程序的数据访问层已经有一段时间了。需要编写太多的样板代码来执行简单的查询以及执行分页和审计。Spring Data JPA旨在通过减少实际需要的数量来显着改进数据访问层的实现。作为一名开发人员,您可以编写自己的存储库接口,包括自定义查找方法,Spring将自动提供实现。

特征

    • 基于Spring和JPA构建存储库的完善支持
    • 支持Querydsl谓词,从而支持类型安全的JPA查询
    • 域类的透明审计
    • 分页支持,动态查询执行,集成自定义数据访问代码的能力
    • @Query在引导时验证注释查询
    • 支持基于XML的实体映射
    • 通过引入基于JavaConfig的存储库配置@EnableJpaRepositories

  


 

pom.xml文件引入的jar包

在我们的springBoot项目里引入Spring Data JPA 及 MySql数据库连接的支持包

 1 <dependencies>
 2     <!-- (默认)SpringBoot核心模块,包括自动配置支持、日志和YAML -->
 3     <dependency>
 4         <groupId>org.springframework.boot</groupId>
 5         <artifactId>spring-boot-starter</artifactId>
 6     </dependency>
 7     <!-- (默认)SpringBoot测试模块,包括JUnit、Hamcrest、Mockito -->
 8     <dependency>
 9         <groupId>org.springframework.boot</groupId>
10         <artifactId>spring-boot-starter-test</artifactId>
11         <scope>test</scope>
12     </dependency>
13     <!-- 添加支持web的模块 -->
14     <dependency>
15         <groupId>org.springframework.boot</groupId>
16         <artifactId>spring-boot-starter-web</artifactId>
17     </dependency>
18     <!-- 添加spring data jpa -->
19     <dependency>
20         <groupId>org.springframework.boot</groupId>
21         <artifactId>spring-boot-starter-data-jpa</artifactId>
22     </dependency>
23     <!-- 添加MySQL数据库 -->
24     <dependency>
25         <groupId>mysql</groupId>
26         <artifactId>mysql-connector-java</artifactId>
27     </dependency>
28     
29 </dependencies>

 


 

数据库、日志、jpa利用Hibernate完成自动化的各项配置

在我们的application.properties文件里加上如下各项的相关配置

 1 ########## LOG配置 ##########
 2 logging.path=E:/logs/bootDemo/
 3 logging.level.com.favorites=DEBUG
 4 logging.level.org.springframework.web=INFO
 5 logging.level.org.hibernate=ERROR
 6 
 7 ########## 数据库配置 ##########
 8 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 9 spring.datasource.url=jdbc:mysql://localhost:3306/demo_test?useUnicode=true&characterEncoding=UTF-8
10 spring.datasource.username=root
11 spring.datasource.password=root
12 
13 ########## jpa利用Hibernate完成自动化的各项配置 ##########
14 # 自动创建|更新|验证数据库表结构配置
15 spring.jpa.properties.hibernate.hbm2ddl.auto=update
16 # 指定生成表名的存储引擎为InneoDB
17 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
18 # 是否打印出自动生产的SQL,方便调试的时候查看
19 spring.jpa.show-sql= true

 


 

Spring Data JPA 的使用Demo

 

编写model

此处不对JPA进行相关介绍,不了解的朋友可以自行查找相关的资料介绍,这里就直接使用了

 1 import javax.persistence.Column;
 2 import javax.persistence.Entity;
 3 import javax.persistence.GeneratedValue;
 4 import javax.persistence.Id;
 5 
 6 @Entity
 7 public class User {
 8 
 9     @Id
10     @GeneratedValue
11     private Long id;// ID自增长主键
12 
13     @Column(nullable = false, unique = true)
14     private String userName;// 用户名,不为空,不能重复
15     
16     @Column(nullable = false)
17     private String realName;// 真实姓名,不为空
18     
19     @Column(nullable = false)
20     private String password;// 密码,不为空
21     
22     @Column(nullable = false)
23     private Integer gender;// 性别,不为空
24     
25     public User() {
26         
27     }
28     
29     public User(String userName, String realName, String password, Integer gender) {
30         this.userName = userName;
31         this.realName = realName;
32         this.password = password;
33         this.gender= gender;
34     }
35     
36     public Long getId() {
37         return id;
38     }
39     public void setId(Long id) {
40         this.id = id;
41     }
42     public String getUserName() {
43         return userName;
44     }
45     public void setUserName(String userName) {
46         this.userName = userName;
47     }
48     public String getRealName() {
49         return realName;
50     }
51     public void setRealName(String realName) {
52         this.realName = realName;
53     }
54     public String getPassword() {
55         return password;
56     }
57     public void setPassword(String password) {
58         this.password = password;
59     }
60     public Integer getGender() {
61         return gender;
62     }
63     public void setGender(Integer gender) {
64         this.gender= gender;
65     }
66     
67 }

 

编写dao

1 import org.springframework.data.jpa.repository.JpaRepository;
2 
3 import com.bootdemo.system.user.model.User;
4 
5 public interface UserDao extends JpaRepository<User, Long> {
6     // Spring Data JPA 为我们简化了很多查询SQL,直接通过findBy实体属性名即可执行相关查询,多个字段属性用And/Or连接
7     User findByUserName(String userName);
8 }

 此处如果我们想使用自定义的SQL去查询或者做其他操作可以在Dao里面这样写,比如根据ID更新某个字段

@Query("update User u set u.realName = ?2 where u.id = ?1")
@Modifying
int updateRealNameById(Long id, String realName);

 

编写service

 service

 1 import java.util.List;
 2 
 3 import com.bootdemo.system.user.model.User;
 4 
 5 public interface UserService {
 6 
 7     User save(User user);
 8     
 9     List<User> findAll();
10     
11     User findOne(String userName);
12     
13     boolean delete(Long id);
14 }

 

 service实现

 1 import java.util.List;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.stereotype.Service;
 5 
 6 import com.bootdemo.system.user.dao.UserDao;
 7 import com.bootdemo.system.user.model.User;
 8 
 9 @Service
10 public class UserServiceImpl implements UserService {
11 
12     @Autowired
13     private UserDao userDao;
14     
15     @Override
16     public User save(User user) {
17         return userDao.save(user);
18     }
19 
20     @Override
21     public List<User> findAll() {
22         return userDao.findAll();
23     }
24 
25     @Override
26     public User findOne(String userName) {
27         return userDao.findByUserName(userName);
28     }
29 
30     @Override
31     public boolean delete(Long id) {
32         userDao.delete(id);
33         return true;
34     }
35 
36 }

 

编写controller

 1 import java.util.List;
 2 
 3 import org.springframework.beans.factory.annotation.Autowired;
 4 import org.springframework.web.bind.annotation.GetMapping;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import org.springframework.web.bind.annotation.RestController;
 7 
 8 import com.bootdemo.system.user.model.User;
 9 import com.bootdemo.system.user.service.UserService;
10 
11 @RestController
12 @RequestMapping("/user")
13 public class TestUserController {
14     
15     @Autowired
16     private UserService service;
17 
18     @GetMapping("/test")
19     public String getHello() {
20         return "Hello ~ ";
21     }
22     
23     @GetMapping("/save")
24     public String saveUser(String userName) {
25         User user = new User(userName, "测试1", "123456");
26         service.save(user);
27         return "添加成功";
28     }
29     
30     @GetMapping("/query/all")
31     public List<User> findAll() {
32         return service.findAll();
33     }
34     
35     @GetMapping("/query/name")
36     public User findByUserName(String userName) {
37         return service.findOne(userName);
38     }
39     
40     @GetMapping("/delete")
41     public String delete(Long id) {
42         service.delete(id);
43         return "删除成功";
44     }
45     
46 }

 


 

演示结果

 1. 添加

 2.根据UserName查询单个

 

 

 3.查询全部

 

 4.根据ID删除

 


 

 至此我们的SpringBoot集成Spring Data JPA + MyBatis 的一个简单Demo就完成了

是不是发现Spring Data JPA 为我们省去了很多SQL语句的编写呢? 赶紧动手来试试吧 :)

 


 

作者:锈逗的大脑
原文链接:http://www.cnblogs.com/ocean-yh/p/8358740.html

如本文有不足之处还望及时指正,讨论QQ群:151230186

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。 

 


 

posted @ 2018-01-30 18:13  锈逗的大脑  阅读(1453)  评论(0编辑  收藏  举报