SpringBoot 2.x+SpringData JPA

一、新建项目

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

二、配置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=UTC
    username: root
    password: 123
    driver-class-name: com.mysql.jdbc.Driver

  # JPA配置
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true #控制台显示sql语句
        format_sql: true #规范化控制台显示的sql语句(换行了更美观)

三、UserController

UserController调用service的方法

@RestController
public class UserController {

    @Autowired
    UserService 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 {

@Autowired
    private UserRepository userRepository;

    @Override
    public List<User> getAllUser() {
        return userRepository.findAll(); //为啥会有findAll()方法?因为我们的UserRepository 继承了JpaRepository
    }

    @Override
    public List<User> getAllUserNative() {
        return userRepository.findAllNative();
    }

    @Override
    public 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> {//为啥我们传入,看一下源码就能了解    

    //在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

你可能感兴趣的:(SpringBoot)