当前位置: 代码迷 >> 综合 >> SpringBoot 2.x+SpringData JPA
  详细解决方案

SpringBoot 2.x+SpringData JPA

热度:41   发布时间:2024-01-05 04:20:30.0

一、新建项目

访问官网,在Dependencies中选择SpringBoot自身、LomBok的依赖、Spring Web模块、Spring Data JPA以及MySQL驱动依赖,这样点击generate按钮的时候会生成项目,并在项目中的pom文件中加入这些依赖。
在这里插入图片描述

二、配置yml文件

既然我们用到了SpringData JPA和MySQL,我们得为其进行配置最基础的信息。比如说数据库的用户名和密码,相对应的库,以及SpringData JAP的策略。官网原生的是application.properties文件的,我改了一下后缀,我比较喜欢yml格式。

#服务器端口配置
server:port: 8100#数据库配置,数据库需要你自己提前建好表
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/learn?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 123driver-class-name: com.mysql.jdbc.Driver# JPA配置jpa:hibernate:ddl-auto: updateproperties:hibernate:show_sql: true #控制台显示sql语句format_sql: true #规范化控制台显示的sql语句(换行了更美观)

三、UserController

UserController调用service的方法

@RestController
public class UserController {
    @AutowiredUserService userService;/*** 获取所有用户(JPA)*/@GetMapping(value = "/user", produces = {
    "application/json;charset=UTF-8"})public void  getAllUser () {
    List<User> allUser = userService.getAllUser();for (User user : allUser) {
    System.out.println(user);}}/*** 获取所有用户(使用原生sql)*/@GetMapping(value = "/userNative", produces = {
    "application/json;charset=UTF-8"})public void  getAllUserNative () {
    List<User> allUser = userService.getAllUserNative();for (User user : allUser) {
    System.out.println(user);}}/*** 分页*/@GetMapping(value = "/pagedQueryUser", produces = {
    "application/json;charset=UTF-8"})public void pagedQueryUser (@RequestParam(value = "pageNum") Integer pageNum,@RequestParam(value = "pageLimit") Integer pageLimit) {
    Page<User> allUser = userService.pagedQueryUser(pageNum,pageLimit);for (User user : allUser) {
    System.out.println(user);}}
}

四、UserService

// 接口
public interface UserService {
    List<User> getAllUser();List<User> getAllUserNative();Page<User> pagedQueryUser(Integer pageNum, Integer pageLimit);
}// 实现
@Service
public class UserServiceImpl implements UserService {
    @Autowiredprivate UserRepository userRepository;@Overridepublic List<User> getAllUser() {
    return userRepository.findAll(); //为啥会有findAll()方法?因为我们的UserRepository 继承了JpaRepository}@Overridepublic List<User> getAllUserNative() {
    return userRepository.findAllNative();}@Overridepublic Page<User> pagedQueryUser(Integer pageNum, Integer pageLimit) {
    //sort日后可以配活,按照哪个字段升序还是降序Sort sort = Sort.by(Sort.Order.desc("userId"));Pageable pageable = PageRequest.of(pageNum - 1, pageLimit, sort);return userRepository.findAll(pageable);}
}

五、User实体

因为我们有了LomBok的Data注解,并且在IDEA已经下好的LomBok的插件,所以我们可以不用写set、get方法。

@Entity // jpa的注解,需要加
@Table(name = "users") // 指定数据库的表名
@Data // lombok
public class User {
    /*主键生成策略TABLE:使用一个特定的数据库表格来保存主键。SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。IDENTITY:主键由数据库自动生成(主要是自动增长型)AUTO:主键由程序控制。*/@Id@GeneratedValue(strategy= GenerationType.IDENTITY)@Column(name="userID")private Integer userId;@Column(name="userName")private String userName;@Column(name="password")private String password;
}

六、UserRepository

UserRepository是dao层的东西了,相当于UserDao/UserMapper,只是叫法不一样而已。比如在Struts2喜欢将名字取成xxxAction,而在SpringMVC喜欢将名字取成xxxxController。

一般地,我们将UserRepository继承JpaRepository就可以有对应的增删改查方法,原因如下:

  • Repository:空接口,表名任何继承它的均为仓库接口类
  • CrudRepository:继承Repository,实现了一组CRUD相关的方法
  • PagingAndSortingRepository:继承CrudRepository,实现了一组分页、排序相关的方法
  • JpaRepository:继承PagingAndSortRepository,实现一组JPA规范相关的方法
    自定义的XxxRepository需要继承JpaRepository,这样该接口就具备了通用的数据访问控制层的能力。
@Repository 
public interface UserRepository extends JpaRepository<User, String> {
    //为啥我们传入<User, String>,看一下源码就能了解 //在JPA中也能执行原生的SQL,具体参考https://blog.csdn.net/lovequanquqn/article/details/83501121@Query(value = "select * from users",nativeQuery = true)List<User> findAllNative();
}

七、测试一下看控制台输出

进入JpaApplication(依据官网Artifact命名是Jpa,所以是JpaApplication),右键,启动我们的SpringBoot项目:

在浏览器输入我们的url: http://localhost:8100/user。

然后我们从后台查看,有打印出查询的SQL语句和表中数据。

其他几个接口同理。

八、代码地址

https://github.com/ruoxiyun/jpa