1、JPA的介绍
JPA(Java Persistence API):JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
2、springboot与JPA整合
(1)pom导入Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
(2)application.yml 对JPA配置
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
(3)application.yml对数据库连接配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_0713?useUnicode=true&characterEncoding=utf8
username: root
password: 123
3、创建测试实体类和测试方法
(1)创建实体类Book类
@Entity
@Table(name = "t_springboot_book")
public class Book {
@Id
@GeneratedValue
private Integer bid;
@Column(length = 100)
private String bname;
@Column
private float price;
public Integer getBid() {
return bid;
}
public void setBid(Integer bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public Book(){
}
public Book(Integer bid,String bname,float price){
bid = this.bid;
bname = this.bname;
price = this.price;
}
}
(2)定义接口BookService ,继承JpaRepository和JpaSpecificationExecutor(调整单个查询)
①JpaRepository<实体类,实体类主键>
②JpaSpecificationExecutor<实体类>
public interface BookDao extends JpaRepository<Book,Integer>, JpaSpecificationExecutor<Book> {
}
(3)定义接口,实现基本增删改方法
public interface BookService {
//增加/修改
public Book save(Book book);
//删除单个
public void deleteById(Integer bid);
//展示所有
public List<Book> list(Book book);
//####查询单个
public Book getOne(Integer bid);
}
(4)实现接口BookService ,继承对应方法
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookDao bookDao;
@Override
public Book save(Book book) {
return this.bookDao.save(book);
}
@Override
public void deleteById(Integer id) {
this.bookDao.deleteById(id);
}
//########################################
@Override
public List<Book> list(Book book) {
return this.bookDao.findAll(new Specification<Book>() {
@Override
public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
Predicate predicate = criteriaBuilder.conjunction();
if(book != null){
if (null != book.getBname() && "".equals(book.getBname())) {
predicate.getExpressions().add(criteriaBuilder.like(root.get("bname"),"%"+book.getBname()+"%"));
}
}
return predicate ;
}
});
}
//################findById()懒加载,不能直接实现功能
@Override
public Book getOne(Integer bid) {
return bookDao.findById(bid).get();
}
}
(4)启动Application
(5)执行结果:
console面板输出sql语句;查看数据库,能看到表已经被创建
4. Spring JpaRepository其他查询方式
除了以上基础的CRUD操作外,有时候我们需要根据需要调用不同的方法,这个时候我们可以利用Repository接口的帮助
①关于Spring JpaRepository的基本介绍
https://www.cnblogs.com/mr-wuxiansheng/p/6189383.html
②关于@Ruery注释的用法:
http://www.cnblogs.com/zj0208/p/6008627.html