[springboot::]整合Spring data JPA
阿新 • • 發佈:2018-12-25
完整工程目錄如下
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進行請求測試
測試結果截圖