Spring Boot 教程(二):使用Spring Boot JPA完成數據層訪問

教程簡介

本項目內容爲Spring Boot教程樣例。目的是經過學習本系列教程,讀者能夠從0到1掌握spring boot的知識,而且能夠運用到項目中。如您以爲該項目對您有用,歡迎點擊收藏和點贊按鈕,給予支持!!教程連載中,歡迎持續關注!java

環境

IDE: Eclipse Neon
Java: 1.8
Spring Boot: 1.5.12
數據庫:MYSQLmysql

本章簡介

經過Spring Boot 教程(一):項目構建,完成Restful API的學習,相信你們已經能夠快速搭建一個spring boot的腳手架。
本章將進一步講解spring boot,結合SpringDataJPA完成數據層訪問。
SpringDataJPA是Spring Data的一個子項目,經過提供基於JPA的Repository極大的減小了JPA做爲數據訪問方案的代碼量,你僅僅須要編寫一個接口集成下SpringDataJPA內部定義的接口便可完成簡單的CRUD操做。git

配置

在pom.xml文件中添加以下:web

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

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

在applicaiton.properties文件中配置數據庫鏈接信息:spring

spring.datasource.url = jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置屬性:
create:每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。
create-drop:每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。
update:最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等應用第一次運行起來後纔會。
validate:每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。sql

建立實體和數據訪問接口

建立包com.example.demo.model,建立實體User數據庫

@Entity
@Table(name = "T_USER")
public class User implements Serializable {

    private static final long serialVersionUID = 2711201708013908747L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)  
    @Column(name = "id")
    private Long id;
    
    @Column(name = "name", length = 255)
    private String name;
    
    @Column(name = "pass", length = 255)
    private String pass;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    
    
}

建立包com.example.demo.domain,建立UserRepository接口實現對該實體的數據訪問segmentfault

public interface UserRepository extends JpaRepository<User, Long> {
    
    User findByName(String name);
    
    User findByNameAndPass(String name, String pass);
    
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);

}

UserRepository接口繼承了JpaRepository,也就是說UserRepository擁有了JpaRepository接口及父類接口的全部方法實現,因此咱們並不須要添加任何數據操做代碼就能夠完成數據操做,JpaRepository接口對條件查詢以及保存集合數據添加了對應的方法。api

建立控制器

在com.example.demo.api下面建立User控制器UserController, 用於測試web訪問瀏覽器

@RestController
public class UserController {
    
    @Autowired
    private UserRepository userDao;
    
    @RequestMapping("/saveUser")
    public void save(){
        User user = new User();
        user.setName("ajay");
        user.setPass("123456");
        userDao.save(user);
    }
    
    @RequestMapping("/delete")
    public void delete(String name){
        User user = userDao.findByName(name);
        userDao.delete(user);
    }
    
    @RequestMapping("/updateUser")
    public void update(String name){
        User user = userDao.findByName(name);
        user.setPass("123456789");
        userDao.save(user);
    }
    
    @RequestMapping("/findByName")
    public User findByName(String name){
        return userDao.findByName(name);
    }

}

程序運行和調試

在Application類中,啓動程序。瀏覽器輸入http://localhost:8080/saveUser
http://localhost:8080/findByName?name=ajay

clipboard.png

代碼:gitee.com/shaojiepeng/SpringBootCourse

相關文章
相關標籤/搜索