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