SpringBoot整合SpringData JPA入門到入墳

首先建立一個SpringBoot項目,目錄結構以下:

在pom.xml中添加jpa依賴,其它所需依賴自行添加

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

application.properties配置以下

#端口
server.port=8888
#MySQL配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=Panbing936@
#swagger配置
swagger.enabled=true
swagger.base-package=com.example.demo.controller
swagger.base-path=/**
#SpringData JPA配置
##validate  加載hibernate時,驗證建立數據庫表結構
##create   每次加載hibernate,從新建立數據庫表結構,這就是致使數據庫表數據丟失的緣由。
##create-drop        加載hibernate時建立,退出是刪除表結構
##update                 加載hibernate自動更新數據庫結構
##validate 啓動時驗證表的結構,不會建立表
##none  啓動時不作任何操做
spring.jpa.hibernate.ddl-auto=update
##控制檯打印sql
spring.jpa.show-sql=true
#不能少
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

實體類Users.java

@Entity
@Table(name="users")
public class Users {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String userName;
    private String password;
//set.get方法省略
}

接口UserRepository.java繼承JpaRepository

public interface UserRepository extends JpaRepository<Users,Integer> {
}

控制器UserController.java

@RestController
public class UserController {
    @Autowired
    private UserRepository userRepository;

    @GetMapping(value ="findAllUser")
    public List findAll()
    {
        return userRepository.findAll();
    }

    @GetMapping(value = "getOne")
    public Users getOne(Integer id)
    {
//        Users users= userRepository.findOne(id);
//        return users;
        return userRepository.findOne(id);
    }
    @GetMapping(value = "delUserById")
    public String delUserById(int id)
    {
          userRepository.delete(id);
          return "delete success";
    }
    @GetMapping(value = "save")
    public String save(String userName,String password)
    {
//        userRepository.save(userName,password);
        Users users=new Users(userName,password);
        userRepository.save(users);
        return "save success";
    }

}

接下來測試,這裏用swagger生成的接口文檔進行測試

在這以前要在數據庫添加幾條數據 測試findAllUser方法java

測試getOne方法 測試save方法 測試delUserById方法 刷新數據庫確認一下,證實測試確實成功了 mysql

補充

@Id:

@Id 標註用於聲明一個實體類的屬性映射爲數據庫的主鍵列。該屬性一般置於屬性聲明語句以前,可與聲明語句同行,也可寫在單獨行上。 @Id標註也可置於屬性的getter方法以前。git

@GeneratedValue:

@GeneratedValue 用於標註主鍵的生成策略,經過strategy 屬性指定。默認狀況下,JPA 自動選擇一個最適合底層數據庫的主鍵生成策略:SqlServer對應identity,MySQL 對應 auto increment。 在javax.persistence.GenerationType中定義瞭如下幾種可供選擇的策略: –IDENTITY:採用數據庫ID自增加的方式來自增主鍵字段,Oracle 不支持這種方式; –AUTO: JPA自動選擇合適的策略,是默認選項; –SEQUENCE:經過序列產生主鍵,經過@SequenceGenerator 註解指定序列名,MySql不支持這種方式 –TABLE:經過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可使應用更易於數據庫移植。github

推薦的兩種寫法:

屬性之上:
@Table(name="CUSTOMERS")
@Entity
public class Customer {
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Id
    private Integer id;
    private String name;
    private String email;
    private int age;
 
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

getter方法之上:

@Table(name="CUSTOMERS")
@Entity
public class Customer {
    private Integer id;
    private String name;
    private String email;
    private int age;
 
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Id
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
可是不能某個註解在屬性之上,某個註解在getter之上,將拋出異常,對其餘註解也相同,下面這種作法就是錯誤的
@Table(name="CUSTOMERS")
@Entity
public class Customer {
    @Id
    private Integer id;
    private String name;
    private String email;
    private int age;
 
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

github代碼spring

我的網站sql

相關文章
相關標籤/搜索