Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!
一、新建spring boot项目
1..新建spring boot项目,左侧选择Spring Initializer,中间暂时不变,第三张图SQL那里选择的是JPA+MYSQL,然后下一步直到Finish
二、项目配置
2.检查pom.xml文件是否已经自动添加了需要的jar包(添加了可以省略这一步)
<!--spring data jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
3.在application.properties文件中添加mysql数据库的配置
#MySQL数据库配置(test为数据库名称,useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=true为时区相关,若不使用此段代码保存时间上将有可能出现问题)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=true
#数据库名称 root (根据自己的数据库设置修改)
spring.datasource.username=root
#数据库密码 root (根据自己的数据库设置修改)
spring.datasource.password=root
#数据库连接驱动,cj报红没关系,仍然可以使用
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
三、创建实体类
4.创建Package 'pojo',创建实体类Users (可以使用逆向工程生成,参考Hibernate栏目下的文章,点此直接跳转)
package com.example.demo.pojo;
import javax.persistence.*;
@Entity
public class Users {
private int uid; //用户主键
private String username; //用户名
private String password; //密码
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //id自增长 **********************************************************
@Column(name = "uid", nullable = false)
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
@Basic
@Column(name = "username", nullable = false, length = 50)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "password", nullable = false, length = -1)
public String getPassword() {
return password;
}
@Override
public String toString() {
return "Users{" +
"uid=" + uid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
四、接入Spring Data Jpa
5.新建包 dao ,再新建接口
接口再继承JpaRepository,就可以实现操作啦,接口实现层都不用写
6.新建Service包,新建IUsersService接口,以及其实现类UsersService 注入操作Users的dao接口
五、基本语法
7.数据操作在IUsersDao中写自定义的方法,当然spring data jpa 自带了一些方法(这里的查询例句来自网络)
自定义的简单查询就是根据方法名来自动生成SQL,主要的语法是findXXBy,readAXXBy,queryXXBy,countXXBy, getXXBy后面跟属性名称, 也使用一些加一些关键字And、 Or修改、删除、统计也是类似语法, 基本上SQL体系中的关键词都可以使用,例如:LIKE、 IgnoreCase、 OrderBy。
User findByUserName(String userName);
User findByUserNameOrEmail(String username, String email);
Long deleteById(Long id);
Long countByUserName(String userName)
List<User> findByEmailLike(String email);
User findByUserNameIgnoreCase(String userName);
List<User> findByUserNameOrderByEmailDesc(String email);
Page<User> findALL(Pageable pageable);
Page<User> findByUserName(String userName,Pageable pageable); //传分页参数时可以这样PageRequest.of(pageNo - 1, pageSize),获取分页的内容List<Users> usersList = res.getContent();
Pageable 是spring封装的分页实现类,使用的时候需要传入页数、每页条数和排序规则
int page=1,size=10;
Sort sort = new Sort(Direction.DESC, "id"); //这里按照id降序排列
Pageable pageable = new PageRequest(page, size, sort);
9.限制查询 有时候我们只需要查询前N个元素,或者只取前一个实体。
User findTopByOrderByAgeDesc();
Page<User> queryFirst10ByLastname(String lastname, Pageable pageable);
List<User> findFirst10ByLastname(String lastname, Sort sort);
10.自定义SQL查询/多表连接查询
@Query(value = "SELECT u.uid,u.username,u.phone,u.email,u.role,g.unid,g.title FROM users u ,university g WHERE u.uid=g.uid",nativeQuery = true) //注意加nativeQuery = true
List<Map<String,Object>> getAllUniversityAndLeader(); //方法名随意取