springBootDataJPA

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;

/**

  • @author GY
  • @date 2018年10月29日
  • @说明:Spring Data jpa 使用JpaRepository
    */
    public interface TUserRepository extends JpaRepository {}

实体类

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();
}

你可能感兴趣的:(Java后台开发)