spring-boot 集成jpa 持久层
说明
jpa 建议项目只做持久操作. 案列使用的mysql数据库
演示是基于第一个版本
pom修改
<!--添加单元测试 begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 添加单元测试 end -->
<!-- 使用 Spring-data-jpa 持久层 begin -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- 使用 Spring-data-jpa 持久层 end -->
添加数据库配置文件
spring.datasource.url = jdbc:mysql://localhost:/数据库名字?useUnicode=true&characterEncoding=UTF-
spring.datasource.username = root
spring.datasource.password = *****
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto =none
Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto =none //none 实体类和db结构不映射 ..
官方推荐的是 update –程序启动自动更新表结构
User domain 源码
package com.jade.domian;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
private int age;
@Column(name = "email_address")
private String emailAddress;
private String username;
public User() {
}
public String getId() {
return this.id;
}
public void setId(String id) {
this.id = id;
}
public int getAge() {
return this.age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmailAddress() {
return this.emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public String getUsername() {
return this.username;
}
public void setUsername(String username) {
this.username = username;
}
}
UserRepository 源码
package com.jade.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.jade.domian.User;
/**
*
*@author jade
*@date 2016年7月14日下午2:51:51
*@version 1.0
*/
public interface UserRepository extends JpaRepository<User, String> {
}
添加UserRepository 继承 JpaRepository
继承关系: JpaRepository -PagingAndSortingRepository>CrudRepository->Repository
JpaRepository 官网源码如下:
/**
* JPA specific extension of {@link org.springframework.data.repository.Repository}.
*
* @author Oliver Gierke
*/
@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
修改Application
package com.jade;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
* api 项目入口
*
* @author jade
* @version 1.0
* @date 2016-07-14
*/
@Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableJpaRepositories
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
测试
package main.java;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.jade.Application;
import com.jade.domian.User;
import com.jade.service.UserServiceImpl;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
/**
* 测试
*@author jade
*@date 2016年7月14日下午3:18:34
*@version 1.0
*/
public class testJpa {
@Autowired
UserRepository res;
@Test
public void testGetForJpa(){
List<User> luesr=res.findAll();
for(User user :luesr){
System.out.println(user.getId() + " "+user.getUsername());
}
}
}