当前位置:   article > 正文

springboot + jpa + redis + hibernate validator + 后台抽象_springboot+springdatajpa+hibernate hibernate valid

springboot+springdatajpa+hibernate hibernate validitor

本文目的:

1.想写一套自己的后台框架

2.激励自己学习的兴趣

那么代码开始

一,pom 文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.dencycheng</groupId>
  6. <artifactId>admin</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>admin</name>
  10. <description>后台管理</description>
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>2.0.4.RELEASE</version>
  15. <relativePath/> <!-- lookup parent from repository -->
  16. </parent>
  17. <properties>
  18. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  19. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  20. <java.version>1.8</java.version>
  21. </properties>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-data-jpa</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.boot</groupId>
  29. <artifactId>spring-boot-starter-web</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. <scope>runtime</scope>
  35. </dependency>
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-data-redis</artifactId>
  39. </dependency>
  40. <!-- 返回Json -->
  41. <dependency>
  42. <groupId>net.sf.json-lib</groupId>
  43. <artifactId>json-lib</artifactId>
  44. <version>2.4</version>
  45. <classifier>jdk15</classifier>
  46. </dependency>
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-tomcat</artifactId>
  50. <scope>compile</scope>
  51. </dependency>
  52. <dependency>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-starter-test</artifactId>
  55. <scope>test</scope>
  56. </dependency>
  57. </dependencies>
  58. <build>
  59. <plugins>
  60. <plugin>
  61. <groupId>org.springframework.boot</groupId>
  62. <artifactId>spring-boot-maven-plugin</artifactId>
  63. </plugin>
  64. </plugins>
  65. </build>
  66. </project>

二,配置文件 application.yml

  1. #server
  2. server:
  3. port:8080
  4. server.tomcat.uri-encoding:UTF-8
  5. spring:
  6. datasource:
  7. driver-class-name: com.mysql.jdbc.Driver
  8. url: jdbc:mysql://localhost:3306/jpatest?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
  9. username: root
  10. password: 123456
  11. jpa:
  12. hibernate:
  13. ddl-auto: update
  14. show-sql: true
  15. properties:
  16. hibernate.format_sql: true
  17. jackson:
  18. date-format: yyyy-MM-dd HH:mm:ss
  19. time-zone: UTC
  20. redis:
  21. database: 0
  22. host: 127.0.0.1
  23. port: 6379
  24. password:
  25. timeout: 1000

三,公共dao层

  1. package com.dencycheng.framework.dao;
  2. import org.springframework.data.jpa.repository.JpaRepository;
  3. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  4. import org.springframework.data.repository.NoRepositoryBean;
  5. /**
  6. * @author DencyCheng
  7. * @param <T>
  8. */
  9. @NoRepositoryBean
  10. public interface BaseDao<T> extends JpaRepository<T, Integer>, JpaSpecificationExecutor<T> {
  11. T findOneById(Integer id);
  12. }

四,公共service层

  1. package com.dencycheng.framework.service;
  2. import com.dencycheng.framework.common.ResponseResult;
  3. import com.dencycheng.framework.dao.BaseDao;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.cache.annotation.Cacheable;
  6. import org.springframework.cache.annotation.EnableCaching;
  7. import org.springframework.data.domain.Page;
  8. import org.springframework.data.domain.PageRequest;
  9. import org.springframework.data.domain.Pageable;
  10. import org.springframework.data.domain.Sort;
  11. import org.springframework.data.jpa.domain.Specification;
  12. import org.springframework.util.StringUtils;
  13. import java.util.List;
  14. import javax.persistence.criteria.*;
  15. /**
  16. * Created by Dency Cheng on 2018/8/7/007.
  17. */
  18. @EnableCaching
  19. public class BaseService<T> {
  20. @Autowired
  21. BaseDao<T> baseDao;
  22. public T save(T t) {
  23. return baseDao.save(t);
  24. }
  25. public void deleteById(Integer id) {
  26. baseDao.deleteById(id);
  27. }
  28. public void batchDelete(List deleteList) {
  29. baseDao.deleteAll(deleteList);
  30. }
  31. public T findOneById(Integer id) {
  32. return baseDao.findOneById(id);
  33. }
  34. @Cacheable(value = "searchList",key = "#root.targetClass.simpleName+':'+#root.methodName+':'+#root.args")
  35. public ResponseResult searchList(Integer num, Integer size, String name) {
  36. int newNum = StringUtils.isEmpty(num) ? 0 : num;
  37. int newSize = StringUtils.isEmpty(size) ? 10 : size;
  38. Sort sort = new Sort(Sort.Direction.DESC, "createDt");
  39. Pageable pageable = new PageRequest(newNum, newSize, sort);
  40. Page<T> pages = null;
  41. if (StringUtils.isEmpty(name)) {
  42. pages = baseDao.findAll(pageable);
  43. } else {
  44. Specification<T> specifications = new Specification<T>() {
  45. @Override
  46. public Predicate toPredicate(Root root,
  47. CriteriaQuery query,
  48. CriteriaBuilder cb) {
  49. Path path = root.get("name");
  50. return cb.like(path, name);
  51. }
  52. };
  53. }
  54. if (pages.getContent().size() == 0) {
  55. return ResponseResult.noResult();
  56. } else {
  57. return ResponseResult.isScuess(pages);
  58. }
  59. }
  60. }

五,返回类 

ResponseResult 

  1. package com.dencycheng.framework.common;
  2. import com.fasterxml.jackson.annotation.JsonInclude;
  3. import java.io.Serializable;
  4. /**
  5. * 统一返回
  6. * @author DencyCheng
  7. */
  8. @JsonInclude(JsonInclude.Include.NON_NULL)
  9. public class ResponseResult implements Serializable{
  10. private Integer code;
  11. private String state;
  12. private Object data;
  13. /**
  14. * 正常返回结果
  15. * @param object
  16. * @return
  17. */
  18. public static ResponseResult isScuess(Object object){
  19. return new ResponseResult(Code.SUCCESS.getCode(), State.SCUUESS.name(),object);
  20. }
  21. /**
  22. * 正常返回结果
  23. * @return
  24. */
  25. public static ResponseResult isScuess(){
  26. return new ResponseResult(Code.SUCCESS.getCode(), State.SCUUESS.name(),"操作成功");
  27. }
  28. /**
  29. * 查询无结果
  30. * @return
  31. */
  32. public static ResponseResult noResult(){
  33. return new ResponseResult(Code.NORESULT.getCode(), State.SCUUESS.name(),"无数据");
  34. }
  35. /**
  36. * 返回错误信息
  37. * @param object
  38. * @return
  39. */
  40. public static ResponseResult isError(Object object){
  41. return new ResponseResult(Code.ERROR.getCode(), State.ERROR.name(),object);
  42. }
  43. /**
  44. * 参数错误
  45. * @param object
  46. * @return
  47. */
  48. public static ResponseResult isParmError(Object object){
  49. return new ResponseResult(Code.PARMERROR.getCode(), State.ERROR.name(),object);
  50. }
  51. /**
  52. * 参数错误
  53. * @return
  54. */
  55. public static ResponseResult isParmError(){
  56. return new ResponseResult(Code.PARMERROR.getCode(), State.ERROR.name(),"缺少参数");
  57. }
  58. public ResponseResult(Integer code, String state, Object data) {
  59. this.code = code;
  60. this.state = state;
  61. this.data = data;
  62. }
  63. public ResponseResult(Integer code, String state) {
  64. this.code = code;
  65. this.state = state;
  66. }
  67. public Integer getCode() {
  68. return code;
  69. }
  70. public void setCode(Integer code) {
  71. this.code = code;
  72. }
  73. public String getState() {
  74. return state;
  75. }
  76. public void setState(String state) {
  77. this.state = state;
  78. }
  79. public Object getData() {
  80. return data;
  81. }
  82. public void setData(Object data) {
  83. this.data = data;
  84. }
  85. }
Code
  1. package com.dencycheng.framework.common;
  2. /**
  3. * 返回结果CODE
  4. */
  5. public enum Code {
  6. SUCCESS("成功",200),
  7. NORESULT("没有检索到数据",201),
  8. PARMERROR("参数错误",202),
  9. ERROR("失败",202),
  10. NOPERMISSION ("无权限访问",40001);
  11. private String desc;
  12. private int code;
  13. public String getDesc() {
  14. return desc;
  15. }
  16. public void setDesc(String desc) {
  17. this.desc = desc;
  18. }
  19. public int getCode() {
  20. return code;
  21. }
  22. public void setCode(int code) {
  23. this.code = code;
  24. }
  25. Code(String desc, int code) {
  26. this.desc = desc;
  27. this.code = code;
  28. }
  29. }

State

  1. package com.dencycheng.framework.common;
  2. /**
  3. * 请求状态
  4. */
  5. public enum State {
  6. SCUUESS,
  7. ERROR;
  8. }

六,user类

  1. package com.dencycheng.admin.model;
  2. import javax.persistence.Entity;
  3. import javax.persistence.GeneratedValue;
  4. import javax.persistence.Id;
  5. import javax.persistence.Table;
  6. import javax.validation.constraints.Max;
  7. import javax.validation.constraints.Min;
  8. import javax.validation.constraints.NotNull;
  9. import javax.validation.constraints.Size;
  10. import java.io.Serializable;
  11. import java.util.Date;
  12. /**
  13. * 用户实体类
  14. * @author DencyCheng
  15. */
  16. @Table(name = "t_user")
  17. @Entity
  18. public class User implements Serializable {
  19. @Id
  20. @GeneratedValue
  21. private Integer id;
  22. @NotNull(message = "{CMM_E0008}年龄")
  23. @Max(value = 100, message = "年龄{CMM_E0017}100")
  24. @Min(value = 0, message = "{CMM_E0016}0")
  25. private Integer age;
  26. @NotNull(message = "{CMM_E0008}姓名")
  27. @Size(max = 9, message = "姓名{CMM_E0012}")
  28. private String name;
  29. private Date createDt;
  30. public User() {
  31. }
  32. public Integer getId() {
  33. return id;
  34. }
  35. public void setId(Integer id) {
  36. this.id = id;
  37. }
  38. public Integer getAge() {
  39. return age;
  40. }
  41. public void setAge(Integer age) {
  42. this.age = age;
  43. }
  44. public String getName() {
  45. return name;
  46. }
  47. public void setName(String name) {
  48. this.name = name;
  49. }
  50. public Date getCreateDt() {
  51. return createDt;
  52. }
  53. public void setCreateDt(Date createDt) {
  54. this.createDt = createDt;
  55. }
  56. }

七,userDao

  1. package com.dencycheng.admin.dao;
  2. import com.dencycheng.admin.model.User;
  3. import com.dencycheng.framework.dao.BaseDao;
  4. public interface UserDao extends BaseDao<User> {
  5. }

八,userService

  1. package com.dencycheng.admin.service;
  2. import com.dencycheng.admin.dao.UserDao;
  3. import com.dencycheng.admin.model.User;
  4. import com.dencycheng.framework.service.BaseService;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Service;
  7. /**
  8. * @author DencyCheng
  9. */
  10. @Service
  11. public class UserService extends BaseService<User> {
  12. @Autowired
  13. UserDao userDao;
  14. }

九,userController

  1. package com.dencycheng.admin.controller;
  2. import com.dencycheng.admin.model.User;
  3. import com.dencycheng.admin.service.UserService;
  4. import com.dencycheng.framework.common.ResponseResult;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.validation.BindingResult;
  7. import org.springframework.web.bind.annotation.*;
  8. import javax.validation.Valid;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. /**
  12. * 用户控制器
  13. */
  14. @RestController
  15. @RequestMapping("/user")
  16. public class UserController {
  17. @Autowired
  18. UserService userService;
  19. /**
  20. * 搜索列表
  21. * @param num
  22. * @param size
  23. * @param name
  24. * @return
  25. */
  26. @PostMapping("list/{num}/{size}")
  27. private ResponseResult searchList(@PathVariable Integer num,@PathVariable Integer size, String name){
  28. return userService.searchList(num,size,name);
  29. }
  30. /**
  31. * 查询单个用户
  32. *
  33. * @param id
  34. * @return
  35. */
  36. @PostMapping("/findOneById/{id}")
  37. private ResponseResult findOneById(@PathVariable Integer id) {
  38. if (id == null) {
  39. return ResponseResult.isParmError();
  40. }
  41. User user = userService.findOneById(id);
  42. if (user == null) {
  43. return ResponseResult.noResult();
  44. } else {
  45. return ResponseResult.isScuess(user);
  46. }
  47. }
  48. /**
  49. * 保存,更新
  50. *
  51. * @return
  52. */
  53. @PostMapping("/save")
  54. private ResponseResult save(@Valid User user, BindingResult result) {
  55. Map<String, String> errorsMap = new HashMap<String, String>();
  56. // 普通校验
  57. if (result.hasErrors()) {
  58. result.getFieldErrors().forEach(p -> {
  59. errorsMap.put(p.getField(), p.getDefaultMessage());
  60. });
  61. }
  62. if (!errorsMap.isEmpty()) {
  63. return ResponseResult.isParmError(errorsMap);
  64. }
  65. //业务校验
  66. return ResponseResult.isScuess(userService.save(user));
  67. }
  68. /**
  69. * 删除
  70. *
  71. * @return
  72. */
  73. @PostMapping("/delete/{id}")
  74. private ResponseResult delete(@PathVariable Integer id) {
  75. if (id == null) {
  76. return ResponseResult.isParmError();
  77. }
  78. userService.deleteById(id);
  79. return ResponseResult.isScuess();
  80. }
  81. }

注:项目还在改善中,现在不是很完美

项目码云地址:https://gitee.com/DencyCheng/admin-api

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/815228
推荐阅读
相关标签
  

闽ICP备14008679号