天天看点

spring-boot 集成jpa 持久层

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());
       }

    }

}