spring data JPA
pom依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>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;
/**
@author GY@date 2018年10月29日@说明:Spring Data jpa 使用JpaRepository */ public interface TUserRepository extends JpaRepository<TUser, Integer> {}实体类
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<TUser> example = Example.of(new TUser().setId(id)); Optional<TUser> 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, Integer> {
WisdomTest findByName(String name); WisdomTest findByNameOrId(String name, Integer id); Optional<WisdomTest> findById(Integer id);}
分页查询demo如下
/** * GY 2018年9月16日 功能:jpa分页查询条件查询 */ @RequestMapping("/etest") public List<WisdomTest> testE(Integer pageIndex, Integer pageSize) { System.out.println("testE..."); Example<WisdomTest> example = Example .of(new WisdomTest().setName("tlx")); // 参数第0页代表第一页 Pageable pageable = PageRequest.of(pageIndex - 1, pageSize); Page<WisdomTest> pageResult = wisdomTestDao.findAll(example, pageable); System.out.println(pageResult.getSize()); System.out.println(pageResult.getTotalPages()); System.out.println(pageResult.getTotalElements()); return pageResult.getContent(); }