1.Demo
做了一个小demo来演示简单的crud,查找用户,更新用户,删除用户。
1.1生成spring boot JPA项目
老规矩,还是通过https://start.spring.io/这个网址生成需要的项目解压然后用idea打开,我选择的组件有:h2, JPA, web, lombok.
1.2 生成User实体
在实体中我们用到了Lombok,帮助我们减少了很多冗余代码,关于Lombok的使用,可以参考我上一篇文章Lombok是什么。
- @Entity 标注该类为实体类,属性和数据库fiel一一对应
- @Build Lombok中的注解,在初始化类的时候可以用build方法来进行创建
- @Data Lombok中的注解,可以参考我的上一篇文章。
- @Table表明了该类在数据库中映射了哪一张表。
- @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 创建Repository
Repository才是JPA的威力所在,只需要继承一个接口,那么你将得到查询,删除更新接口,真是太方便了,代码如下:
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 创建RestController进行测试
关于controller里面的参数传递我会另外写一篇文章进行记录
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());
}
}
测试结果:
- addUser
-
findAllUsers
findAllUser -
updateUser
updateUser
findUser to verify update -
deleteUser
deleteUser
findUser to verify delete
网友评论