[springboot::]集成Spring data JPA

完整工程目录如下
在这里插入图片描述
1.首先引入依赖

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

版本号2.1.0
在这里插入图片描述
2.将需要用到的实体类进行映射

package com.example.demo.entity;

import javax.persistence.*;

@Entity //实体类注解,持久化pojo
@Table(name = "t_user") //关联到表
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) //不加这个,jackson会解析懒加载,异常
public class PubUser {
    @Column(name = "login_name") //字段不一致
    private String loginName;
    private String password;
    private String phone;
    private String email;
    @Id //声明主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)/*自增*///自定义主键生成策略
    private String id;

    public PubUser() {
    }

    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

3.添加我们得到服务层类
在com.example.demo下,新建service包,用来写一些接口,然后在service包下,再新建impl包,用来写接口的实现类
接口PubUserService

package com.example.demo.service;

import com.example.demo.entity.PubUser;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface PubUserService  {

    PubUser findById(String id);
    List<PubUser> findAll();
    PubUser save(PubUser user);
    void delete(String id);

    /**
     * 分页接口,查询时 c传入Pageable 接口的实现类 制定PageNumber(第几页) 和 pageSize(每页大小)
     * @param pageable
     * @return
     */
    Page<PubUser> findPageList(Pageable pageable);
    /**
     * 添加自定义的方法,名字可自定义,最好见名之意
     */
    List<PubUser> findByLoginName(String name);
    List<PubUser> selectByLoginName(String name);
}

接口的实现类PubUserServiceImpl

package com.example.demo.service.impl;

import com.example.demo.entity.PubUser;
import com.example.demo.repository.PubUserRepository;
import com.example.demo.service.PubUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 用户服务层实现类
 */
@Service
public class PubUserServiceImpl implements PubUserService {

    /**
     * 相当于spring 中的 Dao接口
     * 也可以使用 @Autowired
     * @Autowired
     *@Qualifier("PubUserRepository")
     *private PubUserRepository pubUserRepository;
     */
    @Resource
    private PubUserRepository userRepository;



    @Override
    public PubUser findById(String id) {
        /**
         * 注意书中 springDataJpa 1.5.7 版本用的实 findOne(id),2.1.0版本用的getOne(id)
         */
        return userRepository.getOne(id);
    }

    @Override
    public List<PubUser> findAll() {
        /**
         * 书中 是userRepository.findById(id).get();  //id哪来的
         */
        return userRepository.findAll();
    }

    @Override
    public PubUser save(PubUser user) {
        return userRepository.save(user);
    }

    @Override
    public void delete(String id) {
            userRepository.deleteById(id);
    }

    /**
     * 分页接口,查询时 c传入Pageable 接口的实现类 制定PageNumber(第几页) 和 pageSize(每页大小)
     *
     * @param pageable
     * @return
     */
    @Override
    public Page<PubUser> findPageList(Pageable pageable) {
        return userRepository.findAll(pageable);
    }

    /**
     * 添加自定义的方法,名字可自定义,最好见名之意
     *
     * @param name
     */
    @Override
    public List<PubUser> findByLoginName(String name) {
        /**
         * 这时候,就可以看到我们添加的自定义方法,
         */
        return userRepository.findByLoginName(name);
    }

    @Override
    public List<PubUser> selectByLoginName(String name) {
        return userRepository.findByLoginNameLike(name);
    }
}

4.新建一个untils包,用来存放一些工具类
数据返回工具类BaseResult

package com.example.demo.utils;

import java.util.HashMap;
import java.util.Map;

public class BaseResult extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;

    public BaseResult() {
        put("code", 0);
        put("msg", "success");
    }

    public static BaseResult error() {
        return error(500, "未知异常,请联系管理员");
    }

    public static BaseResult error(String msg) {
        return error(500, msg);
    }

    public static BaseResult error(int code, String msg) {
        BaseResult br = new BaseResult();
        br.put("code", code);
        br.put("msg", msg);
        return br;
    }

    public static BaseResult ok(String msg) {
        BaseResult br = new BaseResult();
        br.put("msg", msg);
        return br;
    }

    public static BaseResult ok(Map<String, Object> map) {
        BaseResult br = new BaseResult();
        br.putAll(map);
        return br;
    }

    public static BaseResult ok() {
        return new BaseResult();
    }

    @Override
    public BaseResult put(String key, Object value) {
        super.put(key, value);
        return this;
    }
}

5.新建controller包,来处理请求
创建UserContrller

package com.example.demo.controller;

import com.example.demo.entity.PubUser;
import com.example.demo.service.PubUserService;
import com.example.demo.utils.BaseResult;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;

@RestController
public class UserContrller {
    /**
     * 注入服务层
     */
    @Resource
    private PubUserService userService;

    @GetMapping("HELLO")
    public BaseResult hello(){
        BaseResult br = new BaseResult();
        br.put("name","三国演义");
        return  br;
    }
    @PostMapping("save")
    public BaseResult saveUser(){
        PubUser user = new PubUser();
        user.setEmail("[email protected]");
        user.setLoginName("黄蓉");
        user.setPassword("12345");
        user.setPhone("17730012680");
        if(userService.save(user) != null){
            return BaseResult.ok("添加数据成功");
        }
        return BaseResult.error("添加数据失败");
    }
    @PostMapping("find")
    public BaseResult findUser(@RequestParam(value = "id",required = true)String id ){
        PubUser pubUser = userService.findById(id);
        if(pubUser  != null){
            return BaseResult.ok().put("user",pubUser);
        }
        return BaseResult.error("查询数据失败");
    }
    @PostMapping("finaAll")
    public BaseResult findAllUser(){
        BaseResult br = new BaseResult();
        List<PubUser> userList = userService.findAll();
        if(userList.size() > 0){
            br.put("list",userList);
        }else {
            br.put("list",null);
        }
        return  br;
    }
    @PostMapping("findPage")
    public BaseResult findPageUser(@RequestParam(value = "page",defaultValue = "0")Integer page,
                                   @RequestParam(value = "pageSize",defaultValue = "2")Integer pageSize){

       /* PageRequest pr = new PageRequest(page,pageSize);*///废弃方法
       Pageable pageable = PageRequest.of(page,pageSize);
       Page<PubUser> pageList = userService.findPageList(pageable);
       return BaseResult.ok().put("page",pageList);
    }
    @PostMapping("findUser")
    public BaseResult findUserLikeName(@RequestParam(value = "name",required = true)String name){
        BaseResult br = BaseResult.ok();
        List<PubUser> userList = userService.findByLoginName(name);
        List<PubUser> users = null;
        if(userList.size() > 0){
            br.put("user",userList);
            br.put("users",users);
        }else {//完全匹配找不到人,那就模糊查询
            br.put("user",null);
            users = userService.selectByLoginName("%"+name+"%");
            br.put("users",users);
        }
        return  br;
    }
}

6.安装postman进行请求测试
测试结果截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lining_s/article/details/84146712