目录
1、基础技术框架
2、完整pom.xml
3、初始化脚本
4、功能效果截图
5、项目结构截图:
6、业务模块说明
7、通用模块说明
8、系统初始化配置和程序入口
9:源码下载地址
1、基础技术框架
| 技术名称 | 版本 |
| SpringBoot | 2.1.0.RELEASE |
| Mybatis-Plus | 3.4.1 |
| Lombok | 1.18.2 |
| MySQL8 | 8.0.13 |
| Alibaba Druid | 1.1.10 |
| Thymelaf | 3.0.11 |
| Alibaba Fastjson | 1.2.4 |
| Hutool | 5.5.2 |
2、完整pom.xml
4.0.0
com.zzg
cas-thymeleaf
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.1.0.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-validation
com.baomidou
mybatis-plus-boot-starter
3.4.1
org.projectlombok
lombok
mysql
mysql-connector-java
runtime
com.alibaba
druid-spring-boot-starter
1.1.10
org.springframework.boot
spring-boot-starter-thymeleaf
commons-lang
commons-lang
2.6
org.apache.commons
commons-lang3
3.9
commons-codec
commons-codec
1.10
commons-net
commons-net
3.6
commons-io
commons-io
2.6
commons-collections
commons-collections
3.2.1
com.alibaba
fastjson
1.2.4
cn.hutool
hutool-all
5.5.2
3、初始化脚本
CREATE TABLE IF NOT EXISTS `employee` (
`id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键',
`code` varchar(32) NOT NULL COMMENT '员工编号',
`name` varchar(64) NOT NULL COMMENT '员工名称',
`sex` int(2) NOT NULL DEFAULT '1' COMMENT '性别:1:男(默认) 2:女',
`birthday` datetime NOT NULL COMMENT '出生日期',
`passwd` varchar(32) NOT NULL COMMENT '员工密码',
`telephone` varchar(32) NOT NULL COMMENT '电话',
`note` varchar(128) DEFAULT NULL COMMENT '备注',
`work_year` int(2) NOT NULL COMMENT '工作年限',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表';
4、功能效果截图
CREATE TABLE IF NOT EXISTS `employee` ( `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键', `code` varchar(32) NOT NULL COMMENT '员工编号', `name` varchar(64) NOT NULL COMMENT '员工名称', `sex` int(2) NOT NULL DEFAULT '1' COMMENT '性别:1:男(默认) 2:女', `birthday` datetime NOT NULL COMMENT '出生日期', `passwd` varchar(32) NOT NULL COMMENT '员工密码', `telephone` varchar(32) NOT NULL COMMENT '电话', `note` varchar(128) DEFAULT NULL COMMENT '备注', `work_year` int(2) NOT NULL COMMENT '工作年限', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表';
4、功能效果截图
5、项目结构截图:
6、业务模块说明
com.zzg.entity = 实体对象定义
com.zzg.mapper= 接口映射
com.zzg.service= 服务定义
com.zzg.service.impl= 服务实列化
com.zzg.controller=业务控制层
package com.zzg.entity;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName
public class Employee {
@TableId(type=IdType.AUTO)
private Integer id;
private String code;
private String name;
private Integer sex;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
private String passwd;
private String telephone;
@TableField(fill = FieldFill.DEFAULT)
private String note;
private Integer workYear;
}
package com.zzg.mapper; import com.baomidou.mybatisplus.core.mapper.baseMapper; import com.zzg.entity.Employee; public interface EmployeeMapper extends baseMapper{ }
package com.zzg.service; import com.baomidou.mybatisplus.extension.service.IService; import com.zzg.entity.Employee; public interface EmployeeService extends IService{ }
package com.zzg.service.impl; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zzg.entity.Employee; import com.zzg.mapper.EmployeeMapper; import com.zzg.service.EmployeeService; @Service public class EmployeeServiceImpl extends ServiceImplimplements EmployeeService { }
package com.zzg.controller;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zzg.common.AbstractCommonController;
import com.zzg.common.Response;
import com.zzg.entity.Employee;
import com.zzg.service.EmployeeService;
@Controller
@RequestMapping("/employee")
public class EmployeeController extends AbstractCommonController {
@Autowired
private EmployeeService service;
@GetMapping(value = "/list")
public String view() {
return "page/sys/employeeList";
}
@GetMapping(value = "/add")
public String add() {
return "page/sys/employeeAdd";
}
// 增
@RequestMapping(value = "save")
@ResponseBody
public Response save(Employee employe) {
Boolean target = service.save(employe);
return Response.success(target);
}
@RequestMapping(value = "edit")
public String edit(Employee employee, Model model) {
model.addAttribute("employee", service.getById(employee.getId()));
return "page/sys/employeeEdit";
}
// 改
@RequestMapping(value = "update")
@ResponseBody
public Response update(Employee employee ) {
return Response.success(service.updateById(employee));
}
// 删
@RequestMapping(value = "delete")
@ResponseBody
public Response delete( Employee employee ) {
return Response.success(service.removeById(employee.getId()));
}
// 查
@GetMapping( value = "/getUserByName")
public Object getUserByName( @RequestParam String userName ) {
QueryWrapper wrapper =new QueryWrapper() ;
wrapper.like("name", userName);
return service.getOne(wrapper);
}
// 查
@GetMapping( value = "/page", produces = "application/json;charset=UTF-8")
@ResponseBody
public Object page( @RequestParam(required = false) Map paramter ) {
Page page = super.getPage(paramter);
QueryWrapper wrapper =new QueryWrapper() ;
if(paramter.get("id") != null && StringUtils.isNotEmpty(paramter.get("id").toString())) {
wrapper.eq(true, "id", paramter.get("id"));
}
if(paramter.get("name") != null && StringUtils.isNotEmpty(paramter.get("name").toString())) {
wrapper.like(true, "name", paramter.get("name"));
}
if(paramter.get("code") != null && StringUtils.isNotEmpty(paramter.get("code").toString())) {
wrapper.like(true, "code", paramter.get("code"));
}
IPage result = service.page(page, wrapper);
return result;
}
}
package com.zzg.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class IndexController {
@GetMapping(value = "index")
public String index(Model model) {
model.addAttribute("user", "周志刚");
return "index";
}
@GetMapping(value = "view")
public String view() {
return "page/sys/view";
}
}
7、通用模块说明
package com.zzg.common.converter;
import org.springframework.core.convert.converter.Converter;
import org.springframework.core.convert.converter.ConverterFactory;
import org.springframework.util.NumberUtils;
public class ObjectToIntegerConverterFactory implements ConverterFactory {
public Converter getConverter(Class targetType) {
// TODO Auto-generated method stub
return new ObjectToInteger(targetType);
}
// 私有内部类:实现Converter接口。用泛型边界约束一类类型
private static final class ObjectToInteger implements Converter {
private final Class targetType;
public ObjectToInteger(Class targetType) {
this.targetType = targetType;
}
public Integer convert(T source) {
// TODO Auto-generated method stub
if(source == null) {
return 0;
}
return NumberUtils.parseNumber(String.valueOf(source), this.targetType);
}
}
}
package com.zzg.common; import java.util.Map; import org.springframework.core.convert.converter.ConverterFactory; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zzg.common.converter.ObjectToIntegerConverterFactory; public abstract class AbstractCommonController{ public static final String pageNo = "pageNo"; public static final String pageSize = "pageSize"; public Page getPage(Map map){ ConverterFactory converterFactory = new ObjectToIntegerConverterFactory(); Integer no = converterFactory.getConverter(Integer.class).convert(Integer.valueOf(String.valueOf(map.get(pageNo)))); Integer size = converterFactory.getConverter(Integer.class).convert(Integer.valueOf(String.valueOf(map.get(pageSize)))); return new Page (no,size); } }
package com.zzg.common; import java.io.PrintWriter; import javax.servlet.ServletResponse; import cn.hutool.json.JSONUtil; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Response{ private int code; private String msg; private T data; public static Response error(int code, String msg, T data) { return new Response (code, msg, data); } public static Response error(String msg) { return new Response (500, msg, null); } public static Response success(T data) { return new Response (200, null, data); } public static Response success(String msg) { return new Response (200, msg, null); } public static Response success(String msg, T data) { return new Response (200, msg, data); } public static void responseJson(ServletResponse response, Object data) { PrintWriter out = null; try { response.setCharacterEncoding("UTF-8"); response.setContentType("application/json"); out = response.getWriter(); out.println(JSONUtil.toJsonStr(data)); out.flush(); } catch (Exception e) { } finally { if (out != null) { out.close(); } } } }
8、系统初始化配置和程序入口
package com.zzg.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
@Configuration
public class MyBatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
package com.zzg;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.zzg.mapper")
public class DemoApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(DemoApplication.class, args);
}
}
9:源码下载地址
链接:https://pan.baidu.com/s/1WN0k3oaMRMP1xV3r2nbIXg
提取码:zcxy



