当前位置:   article > 正文

SpringBoot+MyBatisPlus+Vue (单表增删改查)

springboot+mybatisplus+vue

1、创建vue项目

         a.找到创建项目的工作空间

         b.使用命令创建vue项目

         选择模板

         选择需要的插件

        选择vue的版本

        以后的选项直接选择 y 点击enter键即可

        d.将这个项目导入到对应开发工具里面 步骤略

        启动项目即可

2、安装插件

        a.安装ui插件

npm i element-ui -S

         b.使用ui

在main.js里面使用ui

         c.安装axios

前后台交互的

npm i axios

 1.将axios注册成全局变量

        d.安装qs

发出post请求的时候对我们的数据进行处理

把传递到后台的数据作为参数拼接到路径的后面 ?username=xxx&password=1234&...

npm i qs

3、创建vue组件进行访问

        a.创建组件

 组件的内容 略 官网复制的

        b.给组件一个路由

        c.访问一下这个组件

 4、和后台进行交互

        a.创建后端项目

创建springboot项目 创建过程略

 

 选择springboot的版本号

         b.整合mp

     1.加jar

pom文件

  1. <!--手动加 jar 包-->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.4.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.baomidou</groupId>
  9. <artifactId>mybatis-plus-generator</artifactId>
  10. <version>3.4.1</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.apache.velocity</groupId>
  14. <artifactId>velocity-engine-core</artifactId>
  15. <version>2.2</version>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.projectlombok</groupId>
  19. <artifactId>lombok</artifactId>
  20. </dependency>

 编写配置文件 application.properties

  1. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
  2. spring.datasource.url=jdbc:mysql://localhost:3306/yfbank?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
  3. spring.datasource.username=root
  4. spring.datasource.password=lhf@123
  5. # 时间
  6. spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  7. spring.jackson.time-zone=GMT+8
  8. spring.jackson.serialization.write-date-keys-as-timestamps=false
  9. #logging.level.com.baomidou.ant.test.dao=debug
  10. #mybatis-plus _ U
  11. mybatis-plus.configuration.map-underscore-to-camel-case=true
  12. # 日志的输出
  13. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
  14. # 设置mapper文件的位置
  15. mybatis-plus.mapper-locations=classpath:/mapper/*.xml
  16. # 逻辑删除 删除之前的值是1 之后是2
  17. # 1 代表的是正常的数据
  18. mybatis-plus.global-config.db-config.logic-not-delete-value=1
  19. # 2 代表的是删除掉的数据
  20. mybatis-plus.global-config.db-config.logic-delete-value=2
  21. server.port=9999

使用代码生成工具生成代码

  1. /**
  2. * <p>
  3. * 读取控制台内容
  4. * </p>
  5. */
  6. public static String scanner(String tip) {
  7. Scanner scanner = new Scanner(System.in);
  8. StringBuilder help = new StringBuilder();
  9. help.append("请输入" + tip + ":");
  10. System.out.println(help.toString());
  11. if (scanner.hasNext()) {
  12. String ipt = scanner.next();
  13. if (StringUtils.isNotBlank(ipt)) {
  14. return ipt;
  15. }
  16. }
  17. throw new MybatisPlusException("请输入正确的" + tip + "!");
  18. }
  19. public static void main(String[] args) {
  20. // 代码生成器
  21. AutoGenerator mpg = new AutoGenerator();
  22. // 全局配置
  23. GlobalConfig gc = new GlobalConfig();
  24. String projectPath = System.getProperty("user.dir");
  25. gc.setOutputDir(projectPath + "/src/main/java");
  26. gc.setAuthor("liuhongfei");
  27. gc.setOpen(false);
  28. // gc.setSwagger2(true); 实体属性 Swagger2 注解
  29. mpg.setGlobalConfig(gc);
  30. // 数据源配置
  31. DataSourceConfig dsc = new DataSourceConfig();
  32. dsc.setUrl("jdbc:mysql://localhost:3306/yfbank?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true");
  33. // dsc.setSchemaName("public");
  34. dsc.setDriverName("com.mysql.cj.jdbc.Driver");
  35. dsc.setUsername("root");
  36. dsc.setPassword("lhf@123");
  37. mpg.setDataSource(dsc);
  38. // 包配置
  39. PackageConfig pc = new PackageConfig();
  40. //pc.setModuleName(scanner("模块名"));
  41. pc.setParent("com.example.mp");
  42. //pc.setXml("");
  43. pc.setEntity("entity");//实体的包
  44. pc.setMapper("dao");//dao的包
  45. pc.setService("service");//service的包
  46. pc.setServiceImpl("service.impl");//实现类的包
  47. mpg.setPackageInfo(pc);
  48. // 自定义配置
  49. InjectionConfig cfg = new InjectionConfig() {
  50. @Override
  51. public void initMap() {
  52. // to do nothing
  53. }
  54. };
  55. // 如果模板引擎是 freemarker
  56. // String templatePath = "/templates/mapper.xml.ftl";
  57. // 如果模板引擎是 velocity
  58. String templatePath = "/templates/mapper.xml.vm";
  59. // 自定义输出配置
  60. List<FileOutConfig> focList = new ArrayList<>();
  61. // 自定义配置会被优先输出
  62. focList.add(new FileOutConfig(templatePath) {
  63. @Override
  64. public String outputFile(TableInfo tableInfo) {
  65. // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
  66. return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
  67. }
  68. });
  69. cfg.setFileOutConfigList(focList);
  70. mpg.setCfg(cfg);
  71. // 配置模板
  72. //不在java文件夹下面写入mapper文件
  73. TemplateConfig templateConfig = new TemplateConfig();
  74. templateConfig.setXml(null);
  75. mpg.setTemplate(templateConfig);
  76. // 策略配置
  77. StrategyConfig strategy = new StrategyConfig();
  78. strategy.setNaming(NamingStrategy.underline_to_camel);// _ tab_user tabUser
  79. strategy.setColumnNaming(NamingStrategy.underline_to_camel);
  80. strategy.setEntityLombokModel(true);
  81. strategy.setRestControllerStyle(true);
  82. // 公共父类
  83. // 写于父类中的公共字段
  84. //strategy.setSuperEntityColumns("id");// id @TabId
  85. //strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
  86. strategy.setControllerMappingHyphenStyle(true);
  87. strategy.setTablePrefix(pc.getModuleName() + "_");
  88. mpg.setStrategy(strategy);
  89. mpg.execute();
  90. }

 只需要运行一下上面的类里面的main方法即可

        d.配置dao接口

        e.启动springboot项目即可

 启动上面的main方法即可

        f.配置跨域请求

  1. /*
  2. * 配置跨域请求
  3. * */
  4. @Bean
  5. public CorsFilter corsFilter() {
  6. final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
  7. final CorsConfiguration corsConfiguration = new CorsConfiguration();
  8. // corsConfiguration.setAllowCredentials(true);
  9. corsConfiguration.addAllowedHeader("*");// 允许所有的头
  10. corsConfiguration.addAllowedOrigin("*");// 允许所有源发出的请求
  11. corsConfiguration.addAllowedMethod("*");// 允许所有的方法 GET POST
  12. source.registerCorsConfiguration("/**", corsConfiguration);// 所有的路径
  13. return new CorsFilter(source);
  14. }
跨域请求的代码写在启动类里面即可
允许所有的路径都能访问后端的项目(前后端分离的时候)

 

5、vue组件访问springboot

        vue组件里面的内容解析

6、查询功能

        a.给组件渲染数据

        b.后端响应数据

测试是否正确

 

 上图即为获取数据成功

        c.前端接收数据

使用axios和后端进行交互

 d.修改table里面列的内容

只有保持一致才能显示出对应的结果
结果如下:

e.完整的vue代码

  1. <template>
  2. <el-table
  3. :data="tableData"
  4. style="width: 100%"
  5. :row-class-name="tableRowClassName">
  6. <el-table-column
  7. prop="id"
  8. label="编号"
  9. >
  10. </el-table-column>
  11. <el-table-column
  12. prop="username"
  13. label="姓名"
  14. >
  15. </el-table-column>
  16. <el-table-column
  17. prop="idcard"
  18. label="身份证号">
  19. </el-table-column>
  20. <el-table-column
  21. prop="telephone"
  22. label="电话号码">
  23. </el-table-column>
  24. </el-table>
  25. </template>
  26. <style>
  27. .el-table .warning-row {
  28. background: oldlace;
  29. }
  30. .el-table .success-row {
  31. background: #f0f9eb;
  32. }
  33. </style>
  34. <script>
  35. export default {
  36. methods: {
  37. tableRowClassName({row, rowIndex}) {
  38. if (rowIndex%4 === 1) {
  39. return 'warning-row';
  40. } else if (rowIndex%4 === 3) {
  41. return 'success-row';
  42. }
  43. return '';
  44. }
  45. },
  46. data() {
  47. return {
  48. tableData: []
  49. }
  50. },
  51. created(){
  52. // 获取tableData的数据
  53. // 使用axios发出请求
  54. this.$axios.get("t-user").then(r=>{
  55. // r.data 就是后端响应的数据 Result对象
  56. // 想要获取的是集合的数据 Result对象里面的t的值即可
  57. this.tableData=r.data.t;// 将后台获取的值赋值给tableData变量
  58. })
  59. }
  60. }
  61. </script>

7、删除

        a.定义按钮

编写删除和修改之前先添加对应的按钮

        b.定义函数

写点击删除按钮触发的函数delUser
对应的函数需要写在methods里面
        c. 刷新表格
删除成功之后需要刷新一下表格,对应的方法和created()里面的代码是一样的,所以需要提
取一下对应的代码,封装成一个方法 initTable()
created()里面的方法截图如下:

 

         d. 提取该方法

        e. 更改方法
修改created()里面的代码
f. 刷新表格数据
删除成功之后调用一下刷新table表格的方法

 g. 完整删除代码

  1. export default {
  2. methods: {
  3. delUser(obj){
  4. // 删除的时候 根据id 删除数据
  5. // 1. 获取该条数据的id即可
  6. // obj 代表的是当前行的数据 {} 获取id 的数据 对象.属性名 obj.i
  7. //alert(obj.id);
  8. this.$axios.delete(`t-user/${obj.id}`).then(r=>{
  9. //
  10. if(r.data.code==200){
  11. alert(r.data.msg);
  12. // 刷新一下表格里面的数据
  13. // 对应的代码 跟created() 函数里面的代码是一致的
  14. // 可以提取 created()里面的代码封装成一个方法 initTab
  15. this.initTable();
  16. }
  17. })
  18. },
  19. initTable(){
  20. this.$axios.get("t-user").then(r => {
  21. // r.data 就是后端响应的数据 Result对象
  22. // 想要获取的是集合的数据 Result对象里面的t的值即可
  23. this.tableData = r.data.t; // 将后台获取的值赋值给tableDat
  24. })
  25. },
  26. data() {
  27. return {
  28. tableData: []
  29. }
  30. },
  31. created() {
  32. // 获取tableData的数据
  33. // 使用axios发出请求
  34. this.initTable();
  35. }
  36. }

8. 添加

        a. 编写添加的按钮

        b. 定义事件的函数

点击添加按钮的事件并定义对应的函数

c. 编写函数addUser() 

弹出层默认是不显示的,当点击添加按钮的时候会显示
默认的dialogVisible的值是false,表单绑定的对应是form
data()里面定义一下dialog的值,以及定义一下一个对象form
当点击添加按钮的时候 弹出层显示 dialogVisible 的值变为true即可
        d. 提交表单
填完表单之后需要提交数据 触发了一个函数

定义一下函数onSubmit

        e. 后台操作
后台接受数据操作数据库

到此添加结束

        9. 修改
修改功能和添加功能基本类似
a. 修改按钮

b. 函数

 对应的提交以及后台代码和添加是一模一样的

 10. 增删改查完整的vue代码

  1. <template>
  2. <div>
  3. <el-dialog title="提示" :visible.sync="dialogVisible" width="30%">
  4. <span>
  5. <!-- form表单里面的信息-->
  6. <el-form ref="form" :model="form" label-width="80px">
  7. <el-form-item label="名字">
  8. <el-input v-model="form.username"></el-input>
  9. </el-form-item>
  10. <el-form-item label="电话号码">
  11. <el-input v-model="form.telephone"></el-input>
  12. </el-form-item>
  13. <el-form-item label="电话号码">
  14. <el-input v-model="form.idcard"></el-input>
  15. </el-form-item>
  16. <el-form-item>
  17. <el-button type="primary" @click="onSubmit">立即创建<
  18. <el-button>取消</el-button>
  19. </el-form-item>
  20. </el-form>
  21. </span>
  22. </el-dialog>
  23. <el-button type="success" style="float: left;" @click="addUser">添加
  24. <el-table :data="tableData" style="width: 100%" :row-class-name="tab
  25. <el-table-column prop="id" label="编号">
  26. </el-table-column>
  27. <el-table-column prop="username" label="姓名">
  28. </el-table-column>
  29. <el-table-column prop="idcard" label="身份证号">
  30. </el-table-column>
  31. <el-table-column prop="telephone" label="电话号码">
  32. </el-table-column>
  33. <el-table-column label="操作">
  34. <template slot-scope="scope">
  35. <el-button type="primary" icon="el-icon-edit" circle @cl
  36. <el-button type="danger" icon="el-icon-delete" circle @c
  37. </template>
  38. </el-table-column>
  39. </el-table>
  40. </div>
  41. </template>
  42. <style>
  43. .el-table .warning-row {
  44. background: oldlace;
  45. }
  46. .el-table .success-row {
  47. background: #f0f9eb;
  48. }
  49. </style>
  50. <script>
  51. import qs from 'qs'
  52. export default {
  53. methods: {
  54. updUser(obj){
  55. // 1. 获取修改的对象 obj
  56. // 2. 弹出层显示
  57. this.dialogVisible=true;
  58. //3 将这个对象的值obj 赋值到form表单里面 form
  59. // 深拷贝
  60. this.form=JSON.parse(JSON.stringify(obj));
  61. },
  62. onSubmit() {
  63. // 1.获取一下表单里面的所有的内容
  64. // 2.发出axios请求 将表单里面的所有的数据发送到 后端
  65. this.$axios.post("t-user",qs.stringify(this.form)).then(
  66. // code = 200 的时候代表操作成功 刷新一下 table表格
  67. if(r.data.code==200){
  68. alert(r.data.msg);
  69. // 隐藏弹出层
  70. this.dialogVisible=false;
  71. // 清空form表单
  72. this.form={};
  73. this.initTable();
  74. }
  75. })
  76. },
  77. addUser() {
  78. // 1. 定义form表单 dialog里面
  79. // 让 添加的表单显示出来
  80. this.dialogVisible=true;
  81. },
  82. delUser(obj) {
  83. // 删除的时候 根据id 删除数据
  84. // 1. 获取该条数据的id即可
  85. // obj 代表的是当前行的数据 {} 获取id 的数据 对象.属性名 obj.i
  86. //alert(obj.id);
  87. this.$axios.delete(`t-user/${obj.id}`).then(r => {
  88. //
  89. if (r.data.code == 200) {
  90. alert(r.data.msg);
  91. // 刷新一下表格里面的数据
  92. // 对应的代码 跟created() 函数里面的代码是一致的
  93. // 可以提取 created()里面的代码封装成一个方法 initTab
  94. this.initTable();
  95. }
  96. })
  97. },
  98. initTable() {
  99. this.$axios.get("t-user").then(r => {
  100. // r.data 就是后端响应的数据 Result对象
  101. // 想要获取的是集合的数据 Result对象里面的t的值即可
  102. this.tableData = r.data.t; // 将后台获取的值赋值给tableDat
  103. })
  104. },
  105. tableRowClassName({
  106. row,
  107. rowIndex
  108. }) {
  109. if (rowIndex % 4 === 1) {
  110. return 'warning-row';
  111. } else if (rowIndex % 4 === 3) {
  112. return 'success-row';
  113. }
  114. return '';
  115. }
  116. },
  117. data() {
  118. return {
  119. tableData: [],
  120. dialogVisible: false,
  121. form:{}
  122. }
  123. },
  124. created() {
  125. // 获取tableData的数据
  126. // 使用axios发出请求
  127. this.initTable();
  128. }
  129. }
  130. </script>

        11. 分页

a. 加组件
i. 加分页的组件

ii. 定义函数

iii. 定义变量

        b. 实现分页
分页全靠后台的支撑 更改页面以及后端的代码
前端 :
进行分页 需要把分页的数据传递到后端
在查询表格数据的时候把分页的信息传递到后端
initTable()加上分页的参数即可

 

后端:
加上分页的插件

更改查询代码
        i. 接收分页的数据

 

        ii. 调用分页查询  

查看一下分页查询的结果

 格式:

        c. 使用分页之后更改前端代码
tableData里面的数据对应的我我们传递过去的对象t里面的属性records

数据的总条数 t里面的total

更改当前页和更改显示的数据的条数的时候对应的函数需要重新给page参数赋值,并且给
tableData重新赋值

到此,分页查询就结束了  

12. 模糊查询+分页

按照名字模糊查询

         

a. 写搜索框和搜索按钮

b. 定义变量修改函数

变量

函数:

 c. 修改后台代码

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

闽ICP备14008679号