天天看點

Spring Boot基本應用(二)------內建spring data jpa一、pom.xml二、配置資料連接配接池參數三、實體四、Repository五、增删改查

一、pom.xml

<!--資料庫支援-->
        <!--引入jpa spring boot會自動引入HikariCP的依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.3</version>
        </dependency>
           

二、配置資料連接配接池參數

server:
  port: 8082
spring:
  datasource:
    driverClassName: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    username: scott
    password: 1234
    hikari:
      # 此屬性控制從池傳回的連接配接的預設自動送出行為。它是一個布爾值。預設值:true
#      auto-commit: true
      # 此屬性控制用戶端(即您)等待池連接配接的最大毫秒數。如果超出此時間而沒有連接配接可用,則将引發SQLException。最低可接受的連接配接逾時為250 ms。預設值:30000(30秒)
      #connection-timeout: 30000
      #連接配接空閑在池中的最長時間值為,0意味着從未從池中移除空閑連接配接。最小允許值為10000 ms(10秒)。預設值:600000(10分鐘)
      idle-timeout: 10000
      #此屬性控制池中連接配接的最大生存期,0表示不存在最大生存期(無限生存期),當然要受idleTimeout設定的限制。違約時間:1800000(30分鐘)
      max-lifetime: 1800000
      # 連接配接池大小預設25,官方推薦250-500
      maximumPoolSize: 10
      pool-name: DatebookHikariCP
  jpa:
    hibernate:
      ddl-auto: update
    showsql: true
說明:
ddl-auto:create----每次運作該程式,沒有表格會建立表格,表内有資料會清空

ddl-auto:create-drop----每次程式結束的時候會清空表

ddl-auto:update----每次運作程式,沒有表格會建立表格,表内有資料不會清空,隻會更新

ddl-auto:validate----運作程式會校驗資料與資料庫的字段類型是否相同,不同會報錯
           

三、實體

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * 使用者實體類
 */
@Table(name = "Z_CSL_USE")
@Entity
public class User implements Serializable {
    /**
     * 如果id要使用sequecce方式實作主鍵生成,該字段類型需要改為(int、 long )
     */
    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    @Column(name = "useid",length = 36)
    private String useid;
    @Column(name = "usenam",length = 50)
    private String usenam;
    @Column(name = "useacc",length = 50)
    private String useacc;
    @Column(name = "usemob",length = 11)
    private String usemob;
    @Column(name = "useema",length = 50)
    private String useema;
    @Column(name = "acctyp",length = 2)
    private String acctyp;
    @Column(name = "logtyp",length = 1)
    private String logtyp;
    @Column(name = "usepwd",length = 50)
    private String usepwd;
    @Column(name = "uniid",length = 400)
    private String uniid;
    @Column(name = "datsta",length = 1)
    private String datsta;
    @Column(name = "ordno",length = 5)
    private Long ordno;
    private Date lastim;
    @Column(name = "creper",length = 36)
    private String creper;
    private Date cretim;
    @Column(name = "updper",length = 36)
    private String updper;
    private Date updtim;
           

四、Repository

dao接口內建JpaRepository便可以使用jpa的方法進行入庫操作。

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import javax.transaction.Transactional;

public interface UserDao extends JpaRepository<User, Integer> {


    /**
     * 删除使用者
     */
    @Transactional
    @Modifying
    @Query(value = "delete Z_CSL_USE t  where  t.useid=?1", nativeQuery = true)
    void delete(String id);
           

五、增删改查

5.1.新增

controller

/**
     * @param user 前端傳遞的user對象
     * @return 傳回新增後的帶主鍵的user對象
     */
    @PutMapping(value = "_insert")
    public User insert(User user) {
        //調用【UserLogic】類中的【insert】方法,傳入使用者對象,實作新增
        return userLogic.insert(user);
    }
           

 service

/**
     * 新增使用者
     * 在【Z_CSL_USE】表中新增一條記錄,使【使用者名=@使用者名...】
     *
     * @param user 傳入的user對象
     * @return 傳回新增後的帶主鍵的user對象
     */
    public User insert(User user) {
        //1.設定使用者的狀态為1,1-正常,0-失效
        user.setDatsta("1");
        //3.執行新增
        return userDao.saveAndFlush(user);
    }
           

5.2.删除

controller

/**
     * 删除使用者的接口
     */
    @DeleteMapping(value = "_delete/{id}")
    public boolean delete(@PathVariable("id") String id) {
        try {
            userLogic.delete(id);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
           

 service 

/**
     * 删除使用者
     */
    public void delete(String id){
        User user=new User();
        user.setUseid(id);
        userDao.delete(user);
    }
           

5.3.修改

controller

/**
     * 編輯使用者資訊
     *
     * @param user 前端傳遞的user對象
     * @return 傳回修改後的user對象
     */
    @PostMapping(value = "_update")
    public User update(User user) {
        return userLogic.update(user);
    }
           

service 

/**
     * 編輯使用者資訊
     * 在【Z_CSL_USE】表中修改一條記錄,滿足【使用者主鍵=@使用者主鍵】,使【使用者名=@使用者名...】
     *
     * @param user 傳入的user對象
     * @return 傳回新增後的帶主鍵的user對象
     */
    public User update(User user) {
        //1.調用【UserDao】類中的【findById】方法,傳入使用者主鍵,查詢使用者詳細資訊
        User rootUser = userDao.findById(user.getUseid());
        //2.設定使用者名
        rootUser.setUsenam(user.getUsenam());
        //3.設定手機号
        rootUser.setUsemob(user.getUsemob());
        //4.設定使用者郵箱
        rootUser.setUseema(user.getUseema());
        //5.設定更新時間
        rootUser.setUpdtim(new Date());
        //6.執行修改操作(jpa根據主鍵找到記錄修改變化的字段)
        return userDao.saveAndFlush(rootUser);
    }
           

5.4.查詢

controller

/**
     * 根據賬号和密碼查詢使用者
     */
    @PostMapping(value = "check")
    public User getAccountAndPassword(User user){
        return userLogic.getAccountAndPassword(user);
    }
           

service

根據賬号和密碼查詢使用者資訊

public User getAccountAndPassword(User user){
        //1.設定使用者對象
        user.setDatsta("1");
        //2.擷取Example對象傳入user對象
        Example<User> ex = Example.of(user);
       return userDao.findOne(ex).get();
    }
           

繼續閱讀