完整工程目录如下
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进行请求测试
测试结果截图