Springboot+vue创建
一、创建后台项目
1.在文件夹创建一个空文件夹,在idea中打开它
2.可以先修改一下file-->settings-->Maven里面的一下东西,改成自己的maven地址(以免后面pom.xml文件有问题)
3.在 sb_vue_mo
中右键-->new
-->Module
,选择Spring Initializer
之后自行修改
我是选择了java版本为17的,JDK版本也是17的
4.选上这几个,spingboot版本我是选了2.7.5版本
3.2.5(在启动springboot的时候出现错误,换成2.7.5就能正常启动了,好像是mybatis-plus和springboot的版本不匹配)
5.创建成功:打开pom.xml查看有没有问题(可能依赖版本会有些问题)
:)可能会出现这个mob文件夹里面什么都没有,可以试试重启idea
打开pom.xml,我这里出现了全部爆红的情况(可以区settings里面看看自己的maven配置是否配置好了,也就是第2步)
6.测试
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping
public String hello(){
return "hello world";
}
}
运行,打开浏览器输入localhost:8080,成功。
二、添加mybatis-plus依赖
我是用的3.4.3的版本,可以根据需要修改版本
放在pom.xml的<dependencies></dependencies>
里面
放进去之后记得加载一下
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
数据库自行创建即可。
三、修改application配置
找到application文件
修改成.yml文件
四、测试代码
数据库user表信息如下:
1.在entity下创建一个User.java类
(这里注意一下,如果数据库中某字段名叫u_name,在User.java里面应该叫为uName类似与这样子的起名)
2.在mapper里创建UserMapper接口
package com.example.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
3.在resource里面创建一个com/example/mapper后再mapper里面创建一个UserMapper.xml文件(不知道格式的可以直接上网找)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
</mapper>
4.在service里面创建UserService接口
package com.example.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.entity.User;
public interface UserService extends IService<User> {
}
5.在service里面创建impl包,在impl创建UserServiceImpl.java
package com.example.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.entity.User;
import com.example.mapper.UserMapper;
import com.example.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
6.编写测试代码:
6.1由于mybatis-plus它自身是提供了一些方法的,如list(),相当于我们进行"select * from 某个表"的操作,所以我们也不用再在mapper、service层进行编写了
运行结果:
6.2 自己编写
controller层:
(这里爆红,可以直接点击就会跳转到UserService,方便很多)
Service层:
(同样的靠近爆红的地方同样的操作,就会去到UserServiceImpl中)
重新启动,测试一下:
(感觉mybatisplus有这个版本冲突问题,我还是觉得mybatis比较方便哈哈哈哈哈哈)
五、代码生成器
5.1 添加依赖
旧版generator在3.5.1以下
<!-- 自动生成代码依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>spring-boot-starter-swagger</artifactId>
<version>1.5.1.RELEASE</version>
</dependency>
5.2 官网找代码
网址连接: https://baomidou.com/pages/d357af/
5.3 新建一个comment包,将代码复制过来
这里main函数projectPath中修改了一下,不修改的话会直接生成在项目中,就是sb_vue_mob下
在Main中继续往下翻,看到数据源配置,也需要按照自己的数据库情况进行修改
添加包配置
继续在代码往下看,看到很多什么父类,如果不需要记得注释掉。
package com.example.comment;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
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.isNotBlank(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")+"/mob";
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("jobob");
gc.setOpen(false);
// gc.setSwagger2(true); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/course?useUnicode=true&useSSL=false&characterEncoding=utf8");
// dsc.setSchemaName("public");
// dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
// pc.setModuleName(scanner("模块名"));
// pc.setParent("com.baomidou.ant");
//--模块配置--
pc.setParent("com.example")
.setEntity("entity")
.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 + "/src/main/resources/mapper/" + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
/*
cfg.setFileCreate(new IFileCreate() {
@Override
public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
// 判断自定义文件夹是否需要创建
checkDir("调用默认方法创建的目录,自定义目录用");
if (fileType == FileType.MAPPER) {
// 已经生成 mapper 文件判断存在,不想重新生成返回 false
return !new File(filePath).exists();
}
// 允许生成模板文件
return true;
}
});
*/
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定义输出模板
//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
// strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
// strategy.setSuperEntityColumns("id");
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
strategy.setControllerMappingHyphenStyle(true);
// strategy.setTablePrefix(pc.getModuleName() + "_");
//如果想要去掉表前缀
// strategy.setTablePrefix("tb_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
5.4运行生成器
然后,就可以将刚刚写的UserContorller、UserMapper、UserService、UserServiceImpl、User删除掉了。。
我们来运行CodeGenerator.java
或者我们不用user,用别的表,看看它运行结果是什么,使用的数据库表为login00
运行CodeGenerator.java,如下
运行后,牛。。
查看一下生成的东西,看到mapper中还没添加 @mapper
5.5 添加代码测试一下
controller:
service:
serviceImpl
mapper:
mapper.xml
运行:
需要注意一下路径,是login00/loginAll
因为在controller里面我们是这么写的(如果想直接/loginAll访问到的话,把上面ResrMapper
("/login00")那一行删掉)
运行结果:
六、增删改查
都很熟悉,不过之前没用过mybatis-plus,可以多尝试它提供的功能
代码:
//增删改查
//新增
@PostMapping("/save")
public boolean save (@RequestBody Login00 login00){
//mybatis-plus
return iLogin00Service.save(login00);
}
//修改
@PostMapping("/mod")
public boolean mod(@RequestBody Login00 login00){
return iLogin00Service.updateById(login00);
}
//新增或修改
@PostMapping("/saveOrMod")
public boolean saveOrMod(@RequestBody Login00 login00){
return iLogin00Service.saveOrUpdate(login00);
}
//删除
@GetMapping("/delete")
public boolean delete(Integer id){
return iLogin00Service.removeById(id);
}
//模糊查询
//模糊查询
@PostMapping("/listhu")
public List<Login00> listhu(@RequestBody Login00 login00){
LambdaQueryWrapper<Login00> lambdaQueryWrapper = new LambdaQueryWrapper();
//eq不是模糊查询
lambdaQueryWrapper.like(Login00::getUname,login00.getUname());
return iLogin00Service.list(lambdaQueryWrapper);
}
重新运行,可以下载一个Postman进行测试
增(Postman里面记得选post)
根据id修改,但是我数据库中并没有设置id字段,会报错的。
测试一下模糊查询(我这里是根据uname来进行的模糊查询)