springboot对jpa的支持:
搭建一个项目:
如果不想搭建新项目,可以导入pom依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
配置yml文件:
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
为了连接数据库,必要的:
mysql需要降低版本:
<mysql.version>5.1.44</mysql.version>
顺便把druid也配置进去
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
连接数据所需的yml配置:
spring:
datasource:
#1.JDBC
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: 123
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 30000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filter:
stat:
merge-sql: true
slow-sql-millis: 5000
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
session-stat-enable: true
session-stat-max-count: 100
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: admin
allow: 127.0.0.1
自动建表相关代码
建个实体类:
package com.swx.springboot03.entity;
import lombok.Data;
import lombok.ToString;
import javax.persistence.*;
/**
* @author Songwanxi
* @site www.lentter.club
* @company
* @create 2020-01-03 14:00
*/
@Entity
@Table(name = "t_book_2020")
@ToString
@Data
public class Book {
@Id//主键
@GeneratedValue//自增长
@Column//列段
private Integer bid;
@Column(length = 20)
private String bname;
@Column
private Integer price;
}
运行启动类:
创建成功!
简单测试jpa增删改查:
新建dao层:
继承JpaRepository只有基础的增删改查
如果需要复杂值查询的话需要继承:JpaSpecificationExecutor
package com.swx.springboot03.dao;
import com.swx.springboot03.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author Songwanxi
* @site www.lentter.club
* @company
* @create 2020-01-03 14:32
*/
public interface BookDao extends JpaRepository<Book,Integer>,, JpaSpecificationExecutor<Book> {
}
controller层:
package com.swx.springboot03.controller;
import com.swx.springboot03.dao.BookDao;
import com.swx.springboot03.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author Songwanxi
* @site www.lentter.club
* @company
* @create 2020-01-03 14:33
*/
@RestController
public class BookController {
@Autowired
private BookDao bookDao;
@RequestMapping("/add")
public String add(Book book){
bookDao.save(book);
return "success";
}
@RequestMapping("/edit")
public String edit(Book book){
bookDao.save(book);
return "success";
}
@RequestMapping("/del")
public String del(Book book){
bookDao.delete(book);
return "success";
}
@RequestMapping("/getOne")
public Book getOne(Integer bid){
// 会出现懒加载问题:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
// return jpaDao.getOne(bid);
return bookDao.findById(bid).get();
}
@RequestMapping("/getAll")
public List<Book> getAll(){
return bookDao.findAll();
}
@RequestMapping("/getCondition")
public List<Book> getCondition(Book book){
return 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;
}
});
}
}
测试一下:
实际案例:
环境:springboot+jpa+bootstrap
1.导入上传图片所需pom依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifac