【SpringBoot2.3使用Spring Data-JPA搭建項目】

Spring的Jpa是一個非常不錯的持久層框架,可以理解爲就是對Hibrenate進行了封裝,比起Mybatis優點在於不用關注sql語句的編寫。我這案例中使用ResultFul風格來編寫的。

一、搭建SpringBoot項目

導入Jpa的依賴

<!--導入jpa依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>

全部的pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.M3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cxf</groupId>
    <artifactId>demo_mall</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo_mall</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--springboot-web  整合好了springmvc和spring-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--freemaker-->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-freemarker -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
            <version>2.1.3.RELEASE</version>
        </dependency>
        <!--導入jpa依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
    </dependencies>

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

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

application.yml:啓動開發者模式

 

application-dev.yml

首先,我們要定義實體類,實體類對應一個數據表,其中的屬性對應數據表中的字段。 

User:

package com.cxf.demo_mall.api.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

/**
 * @author:柴新峯
 * @create:2020/4/17
 */
@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @Column(nullable = false, unique = true)
    private String userName;

    @Column(nullable = false)
    private String passWord;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false, unique = true)
    private String nickName;

    @Column(nullable = false)
    private String regTime;

    public User() {
    }
    public User(String userName,String passWord,String email,String nickName,String regTime) {
        this.userName = userName;
        this.passWord = passWord;
        this.email = email;
        this.nickName = nickName;
        this.regTime = regTime;
    }
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public String getRegTime() {
        return regTime;
    }

    public void setRegTime(String regTime) {
        this.regTime = regTime;
    }
}

下面是DAO層,實現用戶的增刪改查方法 :

package com.cxf.demo_mall.api.dao;

import com.cxf.demo_mall.api.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @author:柴新峯
 * @create:2020/4/19
 */
@Repository
public interface UserDao extends JpaRepository<User,Long> {
    

}

在這裏我們就能簡單體會到Jpa的強大之處,只需要寫一句userDao.findAll();就可以查到全部數據並放到user列表裏,繼承了JpaRepository倉庫。

接下來,寫UserService:

package com.cxf.demo_mall.api.service;

import com.cxf.demo_mall.api.dao.UserDao;
import com.cxf.demo_mall.api.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.List;

/**
 * @author:柴新峯
 * @create:2020/4/19
 */
@Service
@Transactional
public class UserService {
    @Autowired
    private UserDao userDao;
    /**
     * 添加用戶
     */
    public void addUser(User user){
        userDao.save(user);
    }

    /**
     * 根據id進行修改
     * @param user
     */
    public void updateUser(User user){
        userDao.save(user);
    }

    /**
     * 根據id進行刪除
     * @param id
     */
    public void deleteUser(Long id){
        userDao.deleteById(id);
    }

    /**
     * 查詢所有用戶
     * @return
     */
    public List<User> listUser(){
        return userDao.findAll();
    }

    /**
     * 根據id查詢一條數據
     * @param id
     * @return
     */
    public User findById(Long id){
       return userDao.findById(id).get();
    }

    /**
     * 通過姓名查詢用戶集合
     * @param username
     * @return
     */
//    public List<User> findUserName(String username){
//        return userDao.findByName(username);
//    }
}

Service裏面有個@Transactional是自動開始事務的註解,很方便。

完了後,到Controller類了:

package com.cxf.demo_mall.api.controller;

import com.cxf.demo_mall.api.common.CommonResult;
import com.cxf.demo_mall.api.entity.User;
import com.cxf.demo_mall.api.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author:柴新峯
 * @create:2020/4/19
 */
@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @Autowired
    private CommonResult commonResult;

    @PostMapping("/addUser")
    public CommonResult addUser(User user) {
        try {
            userService.addUser(user);
            return commonResult;
        } catch (Exception e) {
            e.printStackTrace();
            commonResult.setState(500);
            commonResult.setMsg("失敗");
            return commonResult;
        }
    }

    /**
     * 修改用戶
     *
     * @param user
     * @return
     */
    @PutMapping(value = "/updateStudent")
    public CommonResult updateUser(User user) {
        try {
            userService.updateUser(user);
            return commonResult;
        } catch (Exception e) {
            e.printStackTrace();
            commonResult.setState(500);
            commonResult.setMsg("失敗");
            return commonResult;
        }
    }

    /**
     * 根據id刪除用戶
     * @param id
     * @return
     */
    @DeleteMapping("/deleteUser/{id}")
    public CommonResult deleteUserById(@PathVariable(name = "id", required = true) Long id) {
        try {
            userService.deleteUser(id);
            return commonResult;
        } catch (Exception e) {
            e.printStackTrace();
            commonResult.setState(500);
            commonResult.setMsg("失敗");
            return commonResult;
        }
    }
    /**
     * 查詢所有用戶
     * @return
     */
    @PostMapping("/findAll")
    public CommonResult listUser(){
        try {
            List<User> list = userService.listUser();
            commonResult.setData(list);
            return commonResult;
        } catch (Exception e) {
            e.printStackTrace();
            commonResult.setState(500);
            commonResult.setMsg("查詢錯誤");
            commonResult.setData(null);
            return commonResult;
        }
    }
    /**
     * 根據id查詢一條數據
     * @param id
     * @return
     */
    @PostMapping("/findById/{id}")
    public CommonResult findById(@PathVariable(name = "id") Long id){
        try {
            User user = userService.findById(id);
            commonResult.setData(user);
            return commonResult;
        } catch (Exception e) {
            e.printStackTrace();
            commonResult.setState(500);
            commonResult.setMsg("查詢錯誤哦!");
            commonResult.setData(null);
            return commonResult;
        }
    }
 
}

 抽一個全局返回對象類:

package com.cxf.demo_mall.api.common;

import org.springframework.stereotype.Service;

/**
 * @author:柴新峯
 * @create:2020/4/19
 */
@Service
public class CommonResult {
    private Integer state;
    private String msg;
    private Object data;

    public CommonResult() {
        this.state = 200;
        this.msg = "成功";
    }

    public CommonResult(Integer state, String msg) {
        this.state = state;
        this.msg = msg;
    }

    public CommonResult(Integer state, String msg, Object data) {
        this.state = state;
        this.msg = msg;
        this.data = data;
    }

    public Integer getState() {
        return state;
    }

    public void setState(Integer state) {
        this.state = state;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

}

開始啓動項目:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }

 啓動成功,數據庫已經創出了表:

開始測試數據:

1)添加用戶

2)刪除用戶

3)查詢用戶列表

4)根據id查詢一條數據

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章