spring data JPA
pom依赖
org.springframework.boot
spring-boot-starter-data-jpa
yml配置
spring:
jpa:
hibernate:
ddl-auto: update //根据实体创建更新表
show-sql: true // 打印sql
properties:
hibernate:
enable_lazy_load_no_trans: true // 解决jpa引起的session相关错误
继承JpaRepository接口
package com.gy.springboot.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.gy.springboot.entity.TUser;
/**
实体类
package com.gy.springboot.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity(name = “t_user”)
@Table(name = “t_user”)
// @JsonIgnoreProperties(value = {“hibernateLazyInitializer”, “handler”})
// 使用getOne()时,不加这个注解,mvc在返回json对象时会报错
public class TUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "last_name", length = 16)
private String lastName;
// 使用默认
private String email;
…
测试Controller
package com.gy.springboot.controller;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Example;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import com.gy.springboot.entity.TUser;
import com.gy.springboot.repository.TUserRepository;
@RestController
public class JpaUserController {
@Autowired
private TUserRepository tUserRepository;
/**
* @author GY
* @date 2018年10月29日
* @说明:getOne是返回一个实体的引用——代理对象,findOne是返回实体
*/
@GetMapping("/get/user/{id}")
public TUser getUserById(@PathVariable("id") Integer id) {
// 使用findOne不会报错,使用getOne 如果TUser类上不加 @JsonIgnoreProperties... 就会报错
// 见:https://blog.csdn.net/gw816/article/details/80401284#commentBox
Example example = Example.of(new TUser().setId(id));
Optional findOne = tUserRepository.findOne(example);
return findOne.get();
// TUser tUser = tUserRepository.getOne(id);
// System.out.println(tUser);
// return tUser;
}
}
结果
注意
在使用spring-boot-data-jpa 2.0.*版本时,getOne方法获取的代理实体对象,在mvc返回json给response时会出现问题,推荐使用findOne()、findById().get();
解决方案见上面高亮部分说明
Repository也可以自定义方法,略…
package com.fc.hooo.wisdom.dao;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import com.fc.hooo.wisdom.entity.WisdomTest;
public interface WisdomTestDao extends JpaRepository
WisdomTest findByName(String name);
WisdomTest findByNameOrId(String name, Integer id);
Optional findById(Integer id);
}
分页查询demo如下
/**
* GY 2018年9月16日 功能:jpa分页查询条件查询
*/
@RequestMapping("/etest")
public List testE(Integer pageIndex, Integer pageSize) {
System.out.println("testE...");
Example example = Example
.of(new WisdomTest().setName("tlx"));
// 参数第0页代表第一页
Pageable pageable = PageRequest.of(pageIndex - 1, pageSize);
Page pageResult = wisdomTestDao.findAll(example, pageable);
System.out.println(pageResult.getSize());
System.out.println(pageResult.getTotalPages());
System.out.println(pageResult.getTotalElements());
return pageResult.getContent();
}