SpringBoot2快速入门05--jpa

本节我们学习使用Jpa,jpa其实是一个规范,在出来之前,都是使用hibernate,hibernate可以使程序员以面向对象的方式操作数据库,我还是喜欢native sql。

先导入相关包,如下:

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('mysql:mysql-connector-java')

配置数据库连接,修改application-dev.yml,如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/xfdb?useUnicode=true&characterEncoding=UTF-8
    password: root
    username: root

配置实体,配置实体与表的关联,是否字段映射,ID生成器等,如下:

@Entity(name = "t_user")
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;
    private String name;
    private Integer age;
    @Transient
    private String  email;

首先,使用@Entity(name = "t_user")指定实体映射的表名,ID生成方式IDENTITY为由底层数据库生成标识,@Transient指定当前字段不映射到数据库。

接着写db操作类repository,其实这里是一个interface,如下:

@Repository
public interface UserRepository extends JpaRepository {
    /**
     * 自定义
     */
    List findAllByName(String name);
}

我们继承JpaRepository,就已经有了增删改查的方法了,无需我们再加,但可以加其它的方法,如上面的findAllByName。
这里是根据方法名生成sql,如select u from User u where u.name=?,深入学习可以查看官方文档。

接着编写controller实现增删改查,注入repository,如下:

@RestController
@RequestMapping("/user")
public class SpringJpaController {

    @Autowired
    private UserRepository repository;

查询用户

@GetMapping
public List queryUsers() {
        // 查询所有用户
        return repository.findAll();
}

根据id查询用户

@GetMapping("/{id}")
    public Optional getUser(@PathVariable Long id) {
        // 根据主键ID查询
        User u = new User();
        u.setId(id);
        return repository.findOne(Example.of(u));
    }

这里使用了Optional,这是java8引入的,当一个值可能是不存在的时候,就需要用到可选类型(optionals)。

删除用户

@DeleteMapping("/{id}")
    public void delUser(@PathVariable Long id) {
        // 根据主键ID删除用户信息
        repository.deleteById(id);
    }

添加用户

@PostMapping
    public User addUser(@RequestBody User user) {
        // 添加用户
        return repository.save(user);
    }

更新用户

@PutMapping("/{id}")
    public User editUser(@PathVariable Long id, @RequestBody User user) {
        // 根据主键ID修改用户信息
        user.setId(id);
        return repository.save(user);
    }

注意,更新实体一定要用id,否则会当作保存。
学习交流,请加群:64691032

你可能感兴趣的:(SpringBoot2快速入门05--jpa)