一汁果、引言
- 什么是SpringDataJPA?
Spring Data JPA能干什么
可以極大的簡化JPA的寫法证芭,可以在幾乎不用寫實(shí)現(xiàn)的情況下,實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問和操作。除了CRUD外,還包括如分頁朋魔、排序等一些常用的功能扇雕。
首先我們需要清楚的是Spring Data是一個(gè)開源框架值骇,在這個(gè)框架中Spring Data JPA只是這個(gè)框架中的一個(gè)模塊蜜徽,所以名稱才叫Spring Data JPA盆色。如果單獨(dú)使用JPA開發(fā),你會(huì)發(fā)現(xiàn)這個(gè)代碼量和使用JDBC開發(fā)一樣有點(diǎn)煩人组力,所以Spring Data JPA的出現(xiàn)就是為了簡化JPA的寫法,讓你只需要編寫一個(gè)接口繼承一個(gè)類就能實(shí)現(xiàn)CRUD操作了伐弹。 - JPA/Hibernate關(guān)系蔓腐?
JPA是一種規(guī)范,而Hibernate是它的一種實(shí)現(xiàn)龄句。除了Hibernate葬燎,還有EclipseLink(曾經(jīng)的toplink)岳遥,OpenJPA等可供選擇,所以使用Jpa的一個(gè)好處是认轨,可以更換實(shí)現(xiàn)而不必改動(dòng)太多代碼衷恭。
二倦炒、Demo實(shí)現(xiàn)
(1) 依賴引入遂唧,這里使用 druid 數(shù)據(jù)源
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<version>1.4.1.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.29</version>
</dependency>
(2)包結(jié)構(gòu)如下
目錄結(jié)構(gòu)
(3)配置
server:
port: 9090
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3308/user_test?useUnicode=true&useSSL=false&characterEncoding=UTF-8
#配置監(jiān)控統(tǒng)計(jì)攔截的 filters,去掉后監(jiān)控界面sql無法統(tǒng)計(jì)闷愤,'wall'用于防火墻
filters: stat, wall
#最大活躍數(shù)
maxActive: 20
#初始化數(shù)量
initialSize: 1
#最大連接等待超時(shí)時(shí)間
maxWait: 60000
#打開PSCache,并且指定每個(gè)連接PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
#通過connectionProperties屬性來打開mergeSql功能;慢SQL記錄
#connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
minIdle: 1
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: select 1 from dual
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
jpa:
# Specify the DBMS
database: MySQL
# Show or not log for each sql query
show-sql: true
format_sql: true
hibernate:
# Hibernate ddl auto (create, create-drop, update)
ddl-auto: update
# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
dialect: org.hibernate.dialect.MySQL5Dialect
(3)配置
repository接口層
public interface UserDao extends
JpaRepository<User,Long>,
JpaSpecificationExecutor<User>,
Serializable {
}
service層
/**
* @author liyao
* @createTime 2018/8/13
* @description
*/
@Service
@Transactional
public class UserService {
@Autowired
private UserDao userDao;
/**
* 保存數(shù)據(jù)
* @param user
*/
public User save(User user){
return userDao.save(user);
}
/**
* 刪除數(shù)據(jù)
* @param id
* @return
*/
public List<User> delete(Long id){
userDao.deleteById(id);
return userDao.findAll();
}
/**
* 查詢數(shù)據(jù)
* @return
*/
public List<User> list(){
return userDao.findAll();
}
}
controller層
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 查詢用戶列表
* @return
*/
@GetMapping(value = "/list")
public List<User> list(){
return userService.list();
}
/**
* 添加赢赊、更新用戶的方法
* @param entity
* @return
*/
@GetMapping(value = "/save")
public User save(User entity){
return userService.save(entity);
}
/**
* 刪除用戶
* @param id
* @return
*/
@GetMapping(value = "/delete")
public List<User> delete(Long id){
userService.delete(id);
return userService.list();
}
}
(4)測(cè)試
1熏纯、新增添加
2、查詢
查詢
3、刪除id=2
刪除
刪除之后查詢