1. 程式人生 > >spring boot 整合 jpa (一) -- 之基礎配置

spring boot 整合 jpa (一) -- 之基礎配置

spring boot 整合 jpa (二) – 之資料操作
https://blog.csdn.net/qq_41463655/article/details/82939560

spring boot 整合 jpa (三) – 之表關係對映
https://blog.csdn.net/qq_41463655/article/details/82939791

先建立 springboot 專案
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>ws.cn.jpa</groupId>
	<artifactId>jpa_dome</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>jpa_dome</name>
	<description>Demo project for Spring Boot</description>

    <!-- springboot 2.0.5 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!-- jpa -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<!-- web -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>

		<!-- set get 自動生成-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

		<!-- springboot分頁外掛 -->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<!-- 特別注意版本問題, 看到評論以後得以糾正 -->
			<version>1.2.3</version>
		</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-devtools</artifactId>
			<optional>true</optional>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

application.yml

spring:
  devtools:
    restart:
      enabled: false
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jpa
    hikari: # springboot 2.0 整合了hikari ,據說這是目前效能最好的java資料庫連線池
      username: root
      password: sweet
  jpa:
    hibernate:
      ddl-auto: update  # 第一次建表create  後面用update,要不然每次重啟都會新建表
    show-sql: true      #日誌中顯示sql語句

# 分頁配置
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  params: count=countSql

User 實體類

@Entity
1、資料庫不存在表會自動建立表
2、資料庫不存在某些欄位資料庫會自動建立該欄位

package ws.cn.jpa.entity;

import javax.persistence.*;
import java.util.List;

/**
 * Created by Administrator on 2018/10/3/003.
 * 使用者類
 */
@Table(name = "ws_user")   //生成資料庫的表名
@Entity  // 該註解宣告一個實體類,與資料庫中的表對應
public class User {

    @Id               //  表明主鍵id
    @GeneratedValue   //  主鍵的生成策略
    private Long userId;

    private String username;

    private String password;

   //此處省略set grt方法.......
}

UserDao

package ws.cn.jpa.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;
import ws.cn.jpa.entity.User;

/**
 * Created by Administrator on 2018/10/2/002.
 * JpaRepository<User,Long> 說明:
 * User 實體類
 * Long 實體類主建的資料型別
 */

@Component
public interface UserDao extends JpaRepository<User,Long>,JpaSpecificationExecutor<User> {

    //自定義 sql 語句
    @Query(value = "SELECT * FROM USER WHERE id = ?1", nativeQuery = true)
    User selectId(Integer id);
}
  /*
    * 我們在這裡直接繼承 JpaRepository
    * 這裡面已經有很多現成的方法
    * 這也是JPA的一大優點
    *
    *  (1) CrudRepository: 繼承 Repository,實現了一組 CRUD 相關的方法
       (2) PagingAndSortingRepository: 繼承 CrudRepository,實現了一組分頁排序相關的方法
       (3)JpaRepository: 繼承 PagingAndSortingRepository,實現一組 JPA 規範相關的方法
       (4)JpaSpecificationExecutor: 實現條件查詢
    * */

service 就先不建立了,直接 controller 呼叫方法

@RestController
public class UserController {

/*    @Autowired
    private UserService userService;*/

    @Autowired
    private UserDao userDao;

    //============查詢所有===============
    @GetMapping("/listuser")
    public List<User> findAll() {
        // 排序(倒序)
        Sort sort = new Sort(Sort.Direction.DESC, "userId");
        return userDao.findAll(sort);
    }
 }

瀏覽器輸入
localhost:8080/listuser

[{"userId":2,"username":"小微","password":"123"},{"userId":1,"username":"王鬆","password":"123"}]

這樣整合 jpa 成功了