1.Demo
做了一個(gè)小demo來(lái)演示簡(jiǎn)單的crud,查找用戶(hù),更新用戶(hù)吃谣,刪除用戶(hù)乞封。
1.1生成spring boot JPA項(xiàng)目
老規(guī)矩,還是通過(guò)https://start.spring.io/這個(gè)網(wǎng)址生成需要的項(xiàng)目解壓然后用idea打開(kāi)岗憋,我選擇的組件有:h2, JPA, web, lombok.
生成項(xiàng)目
1.2 生成User實(shí)體
在實(shí)體中我們用到了Lombok肃晚,幫助我們減少了很多冗余代碼,關(guān)于Lombok的使用仔戈,可以參考我上一篇文章Lombok是什么关串。
- @Entity 標(biāo)注該類(lèi)為實(shí)體類(lèi),屬性和數(shù)據(jù)庫(kù)fiel一一對(duì)應(yīng)
- @Build Lombok中的注解监徘,在初始化類(lèi)的時(shí)候可以用build方法來(lái)進(jìn)行創(chuàng)建
- @Data Lombok中的注解晋修,可以參考我的上一篇文章。
- @Table表明了該類(lèi)在數(shù)據(jù)庫(kù)中映射了哪一張表耐量。
- @AllArgsConstructor Lombok中的注解飞蚓,可以參考我的上一篇文章。
- @NoArgsConstructor Lombok中的注解廊蜒,可以參考我的上一篇文章趴拧。
package com.xuzhang.springbootjpa.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.CreationTimestamp;
import javax.persistence.*;
import java.util.Date;
@Entity
@Builder
@Data
@Table(name = "User")
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String pwd;
@CreationTimestamp
private Date createTime;
@CreationTimestamp
private Date updateTime;
}
1.3 創(chuàng)建Repository
Repository才是JPA的威力所在溅漾,只需要繼承一個(gè)接口,那么你將得到查詢(xún)著榴,刪除更新接口添履,真是太方便了,代碼如下:
package com.xuzhang.springbootjpa.repository;
import com.xuzhang.springbootjpa.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "update User set name = ? where id = ? ", nativeQuery = true)
@Modifying
void updateUser(String name, Long id);
}
1.4 創(chuàng)建RestController進(jìn)行測(cè)試
關(guān)于controller里面的參數(shù)傳遞我會(huì)另外寫(xiě)一篇文章進(jìn)行記錄
package com.xuzhang.springbootjpa.controller;
import com.xuzhang.springbootjpa.model.User;
import com.xuzhang.springbootjpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.transaction.Transactional;
import java.util.List;
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
@RequestMapping("/initUser")
public void initUser() {
for (int i = 0; i < 10; i++) {
userRepository.save(
User.builder().name("xuzhang" + i).pwd(String.valueOf(i)).build());
}
}
@RequestMapping("/findAllUsers")
public List<User> getAllUser() {
return userRepository.findAll();
}
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public User addUser(@RequestBody User user) {
return userRepository.save(user);
}
@RequestMapping(value = "deleteUser/{id}")
public void deleteUser(@PathVariable("id") Long id) {
userRepository.deleteById(id);
}
@RequestMapping(value = "updateUser", method = RequestMethod.POST)
@Transactional
public void updateUser(@RequestBody User user) {
userRepository.updateUser(user.getName(), user.getId());
}
}
測(cè)試結(jié)果:
- addUser
addUser
-
findAllUsers
findAllUser -
updateUser
updateUser
findUser to verify update -
deleteUser
deleteUser
findUser to verify delete