赞
踩
接着上篇博客前后端分离项目搭建,本片博客主要通过mybatis-plus实现代码自动生成以及简单的后端增删改查功能,话不多说,直接上代码。有需要代码的可以私聊
首先pom文件将需要的依赖引入进来,我这边用到的依赖如下代码所示。
- <?xml version="1.0" encoding="UTF-8"?>
- <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.6.6</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.example.mm</groupId>
- <artifactId>demo1</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>demo1</name>
- <description>demo1</description>
- <properties>
- <java.version>1.8</java.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.spring.boot</groupId>
- <artifactId>mybatis-spring-boot-starter</artifactId>
- <version>2.2.0</version>
- </dependency>
-
- <!--mybatis-plus 代码生成器依赖-->
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-generator</artifactId>
- <version>3.3.1.tmp</version>
- </dependency>
-
- <!--freemarker 依赖-->
- <dependency>
- <groupId>org.freemarker</groupId>
- <artifactId>freemarker</artifactId>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.2.3</version>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>com.baomidou</groupId>
- <artifactId>mybatis-plus-boot-starter</artifactId>
- <version>3.4.3.1</version>
- </dependency>
-
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.7.3</version>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-resources-plugin</artifactId>
- <version>3.1.0</version>
- </plugin>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
创建一个数据库,我用的sql工具是sqlyog,还有其他的很多工具看个人习惯,就不一一介绍。新建一个表users,插入一些数据。
- CREATE TABLE users(
- id INT(10) PRIMARY KEY AUTO_INCREMENT,
- username VARCHAR(20),
- `password` VARCHAR(20),
- nickname VARCHAR(20),
- age INT(10)
- )
-
- INSERT INTO users(username,`password`,nickname,age) VALUES ('张三','111','小2',20);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('jack','222','小3',22);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('rose','333','小4',23);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('libai','444','小5',24);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('ben','555','小6',25);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('李四','666','小7',22);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('王五','777','小8',21);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('赵六','888','小9',23);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('田七','999','小0',25);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('lily','000','小1',60);
- INSERT INTO users(username,`password`,nickname,age) VALUES ('mali','aaa','小a',30);
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
然后在resources下面新建一个application.properties文件(或者yaml文件也可以),相应配置如下
- server.port=8888
- spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- spring.datasource.url=jdbc:mysql://localhost:3306/crudTest?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
这两个地方注意一下,端口号自己设置,一般默认是8080,还有下面的是数据库名称,不是表名称,不要搞错,其他的像驱动,用户名密码这些填写自己设置的就好了。
随后创建一个package,命名为config,创建一个CodeGenerator文件,主要用来自动生成代码,对于一些简单的项目能够大大提高效率。
- public class CodeGenerator {
- /**
- * <p>
- * 读取控制台内容
- * </p>
- */
- public static String scanner(String tip) {
- Scanner scanner = new Scanner(System.in);
- StringBuilder help = new StringBuilder();
- help.append("请输入" + tip + ":");
- System.out.println(help.toString());
- if (scanner.hasNext()) {
- String ipt = scanner.next();
- if (StringUtils.isNotEmpty(ipt)) {
- return ipt;
- }
- }
- throw new MybatisPlusException("请输入正确的" + tip + "!");
- }
- public static void main(String[] args) {
- // 代码生成器
- AutoGenerator mpg = new AutoGenerator();
- // 全局配置
- GlobalConfig gc = new GlobalConfig();
- String projectPath = System.getProperty("user.dir");
- gc.setOutputDir(projectPath + "/demo1/src/main/java");
- //作者
- gc.setAuthor("mozz");
- //打开输出目录
- gc.setOpen(false);
- //xml开启 BaseResultMap
- gc.setBaseResultMap(true);
- //xml 开启BaseColumnList
- gc.setBaseColumnList(true);
- // 实体属性 Swagger2 注解
- gc.setSwagger2(true);
- mpg.setGlobalConfig(gc);
- // 数据源配置
- DataSourceConfig dsc = new DataSourceConfig();
- dsc.setUrl("jdbc:mysql://localhost:3306/crudTest? useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia" + "/Shanghai");
- dsc.setDriverName("com.mysql.jdbc.Driver");
- dsc.setUsername("root");
- dsc.setPassword("root");
- mpg.setDataSource(dsc);
- // 包配置
- PackageConfig pc = new PackageConfig();
- pc.setParent("com.example.mm")
- .setEntity("pojo")
- .setMapper("mapper")
- .setService("service")
- .setServiceImpl("service.impl")
- .setController("controller");
- mpg.setPackageInfo(pc);
- // 自定义配置
- InjectionConfig cfg = new InjectionConfig() {
- @Override
- public void initMap() {
- // to do nothing
- }
- };
- // 如果模板引擎是 freemarker
- String templatePath = "/templates/mapper.xml.ftl";
- // 如果模板引擎是 velocity
- // String templatePath = "/templates/mapper.xml.vm";
- // 自定义输出配置
- List<FileOutConfig> focList = new ArrayList<>();
- // 自定义配置会被优先输出
- focList.add(new FileOutConfig(templatePath) {
- @Override
- public String outputFile(TableInfo tableInfo) {
- // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会
- return projectPath + "/demo1/src/main/resources/mapper/"
- + tableInfo.getEntityName() + "Mapper"
- + StringPool.DOT_XML;
- }
- });
- cfg.setFileOutConfigList(focList);
- mpg.setCfg(cfg);
- // 配置模板
- TemplateConfig templateConfig = new TemplateConfig();
- templateConfig.setXml(null);
- mpg.setTemplate(templateConfig);
- // 策略配置
- StrategyConfig strategy = new StrategyConfig();
- //数据库表映射到实体的命名策略
- strategy.setNaming(NamingStrategy.underline_to_camel);
- //数据库表字段映射到实体的命名策略
- strategy.setColumnNaming(NamingStrategy.no_change);
- //lombok模型
- strategy.setEntityLombokModel(true);
- //生成 @RestController 控制器
- strategy.setRestControllerStyle(true);
- strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
- strategy.setControllerMappingHyphenStyle(true);
- //表前缀
- // strategy.setTablePrefix("t_");
- mpg.setStrategy(strategy);
- mpg.setTemplateEngine(new FreemarkerTemplateEngine());
- mpg.execute();
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
随后运行代码生成器,会出现下图提示。
如果多个表,用逗号隔开就可以,如下图(举个例子)
因为 我这边只建了一个表users,所以只需要输入users就可以,按下回车键,就会自动生成代码。
因为返回前端一般都是三大部分组成,状态码code,信息msg以及data(后端数据),所以需要一个Result文件用来封装,创建一个名为common的package,创建Resut文件,内容如下。
- public class Result<T> {
- private String code;
- private String msg;
- private T data;
-
- public Result(String code, String msg, T data) {
- this.code = code;
- this.msg = msg;
- this.data = data;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public String getMsg() {
- return msg;
- }
-
- public void setMsg(String msg) {
- this.msg = msg;
- }
-
- public T getData() {
- return data;
- }
-
- public void setData(T data) {
- this.data = data;
- }
-
- public Result(){};
- public Result(T data){
- this.data=data;
- }
-
- public static Result success(){
- Result result=new Result<>();
- result.setCode("0");
- result.setMsg("成功");
- return result;
- }
- public static<T> Result<T> success(T data){
- Result<T> result=new Result<>(data);
- result.setCode("0");
- result.setMsg("成功");
- return result;
- }
- public static Result error(String code, String msg){
- Result result=new Result<>();
- result.setCode(code);
- result.setMsg(msg);
- return result;
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
然后会自动分好层,包括sql语句在resources目录下面的mapper里都写好了,只需要在controller层写下相应的增删改查就可以了,因为这个比较简单,我就没有用service层,在mapper层继承了baseMapper,也可以加一层service层,他会继承Iservice,有兴趣的可以去了解一下baseMapper和Iservice的区别,具体的代码如下。
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.example.mm.common.Result;
- import com.example.mm.mapper.UsersMapper;
- import com.example.mm.pojo.Users;
- import org.springframework.web.bind.annotation.*;
-
- import javax.annotation.Resource;
-
- /**
- * <p>
- * 前端控制器
- * </p>
- *
- * @author mozz
- * @since 2022-04-07
- */
- @RestController
- @RequestMapping("/users")
- public class UsersController {
-
- @Resource
- private UsersMapper usersMapper;
-
- /**
- * 根据id获取用户信息
- */
- @GetMapping("/{id}")
- public Result<?> getNewsById(@PathVariable Long id){
- return Result.success(usersMapper.selectById(id));
- }
-
- /**
- * 分页查询用户信息
- */
- @GetMapping("/userInfo")
- public Result<?> findPage(@RequestParam(defaultValue = "1") Integer pageNum,
- @RequestParam(defaultValue = "10") Integer pageSize,
- @RequestParam(defaultValue = "") String search) {
- LambdaQueryWrapper<Users> wrapper = Wrappers.<Users>lambdaQuery();
- if (StrUtil.isNotBlank(search)) {
- wrapper.like(Users::getUsername, search);
- }
- Page<Users> usersPage = usersMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
- return Result.success(usersPage);
- }
-
- /**
- * 查询所有用户信息
- */
- @GetMapping("/all")
- public Result<?> findAll() {
- return Result.success(usersMapper.selectList(null));
- }
-
- /**
- * 根据id修改用户信息
- */
- @PutMapping("update")
- public Result<?> update(@RequestBody Users users){
- usersMapper.updateById(users)
- return Result.success(users);
- }
-
- /**
- * 根据id删除用户信息
- */
- @DeleteMapping("delete/{id}")
- public Result<?> delete(@PathVariable int id){
-
- return Result.success(usersMapper.deleteById(id));
- }
-
- /**
- * 添加用户信息
- */
- @PostMapping("add")
- public Result<?> addUsers(@RequestBody Users users){
- usersMapper.insert(users);
- return Result.success(users);
- }
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
最后在postman中测试一下,结果如下,增删改查成功。
更新操作需要注意一下,该操作是put操作,有请求体。
更新后可以看到数据库内容发生变化。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。