• 前后端分离 基础(新增与查询)


    目录

    一,后端

    1.1 修改settings---->搜索Maven

    1.2 application.yml文件与jdbc.properties文件 对应数据库的账号密码

    application.yml

     1.4 jdbc.properties

    1.3 generatorConfig.xml

    jdbc驱动jar包

    1.4 从本地导入pom依赖

    POM

    1.5 自动生成

     1.6 各个层的编写

    Mapper.xml

    mapper

    service

    impl(实现层)

    Contrpller

    二,前端

    actions.js

    BookLsit.vue页面

    页面展示:

     新增:


    前言:本期是从导入MAVEN项目后准备自动生成开始编写的

    后端的配置以及生成代码加编写模糊查询方法

    前端的界面搭建和事件以及获取后台的接口

    一,后端

    1.1 修改settings---->搜索Maven

    1.2 application.yml文件与jdbc.properties文件 对应数据库的账号密码

    application.yml

    1. server:
    2. port: 8080
    3. servlet:
    4. context-path: /spboot
    5. spring:
    6. datasource:
    7. type: com.alibaba.druid.pool.DruidDataSource
    8. driver-class-name: com.mysql.jdbc.Driver
    9. url: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf8&useSSL=false
    10. username: root
    11. password: 123456
    12. druid:
    13. initial-size: 5
    14. min-idle: 5
    15. max-active: 20
    16. max-wait: 60000
    17. time-between-eviction-runs-millis: 60000
    18. min-evictable-idle-time-millis: 30000
    19. validation-query: SELECT 1 FROM DUAL
    20. test-while-idle: true
    21. test-on-borrow: true
    22. test-on-return: false
    23. pool-prepared-statements: true
    24. max-pool-prepared-statement-per-connection-size: 20
    25. filter:
    26. stat:
    27. merge-sql: true
    28. slow-sql-millis: 5000
    29. web-stat-filter:
    30. enabled: true
    31. url-pattern: /*
    32. exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
    33. session-stat-enable: true
    34. session-stat-max-count: 100
    35. stat-view-servlet:
    36. enabled: true
    37. url-pattern: /druid/*
    38. reset-enable: true
    39. login-username: admin
    40. login-password: admin
    41. allow: 127.0.0.1
    42. #deny: 192.168.1.100
    43. freemarker:
    44. cache: false
    45. charset: UTF-8
    46. content-type: text/html
    47. suffix: .ftl
    48. template-loader-path: classpath:/templates
    49. mybatis:
    50. mapper-locations: classpath:mapper/*.xml
    51. type-aliases-package: com.zking.spboot.model
    52. configuration:
    53. map-underscore-to-camel-case: true
    54. logging:
    55. level:
    56. com.zking.spboot.mapper: debug
    57. pagehelper:
    58. helperDialect: mysql
    59. reasonable: true
    60. supportMethodsArguments: true
    61. params: count=countSql

     1.4 jdbc.properties

    1. jdbc.driver=com.mysql.jdbc.Driver
    2. jdbc.url=jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=UTF-8
    3. jdbc.username=root
    4. jdbc.password=123456

    1.3 generatorConfig.xml

    jdbc驱动jar包

    1. "1.0" encoding="UTF-8" ?>
    2. DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    3. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    4. <generatorConfiguration>
    5. <properties resource="jdbc.properties"/>
    6. <classPathEntry location="F:\cangku\mvn_repository\mysql\mysql-connector-java\5.1.24\mysql-connector-java-5.1.24.jar"/>
    7. <context id="infoGuardian">
    8. <commentGenerator>
    9. <property name="suppressAllComments" value="true"/>
    10. <property name="suppressDate" value="true"/>
    11. commentGenerator>
    12. <jdbcConnection driverClass="${jdbc.driver}"
    13. connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
    14. <javaTypeResolver>
    15. <property name="forceBigDecimals" value="false"/>
    16. javaTypeResolver>
    17. <javaModelGenerator targetPackage="com.zking.spboot.model"
    18. targetProject="src/main/java">
    19. <property name="enableSubPackages" value="false"/>
    20. <property name="constructorBased" value="true"/>
    21. <property name="trimStrings" value="false"/>
    22. <property name="immutable" value="false"/>
    23. javaModelGenerator>
    24. <sqlMapGenerator targetPackage="com.zking.spboot.mapper"
    25. targetProject="src/main/resources">
    26. <property name="enableSubPackages" value="false"/>
    27. sqlMapGenerator>
    28. <javaClientGenerator targetPackage="com.zking.spboot.mapper"
    29. targetProject="src/main/java" type="XMLMAPPER">
    30. <property name="enableSubPackages" value="false"/>
    31. javaClientGenerator>
    32. <table schema="" tableName="t_book" domainObjectName="Book"
    33. enableCountByExample="false" enableDeleteByExample="false"
    34. enableSelectByExample="false" enableUpdateByExample="false">
    35. table>
    36. context>
    37. generatorConfiguration>

    1.4 从本地导入pom依赖

    POM

    1. "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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>2.3.1.RELEASEversion>
    9. <relativePath/>
    10. parent>
    11. <groupId>com.zkinggroupId>
    12. <artifactId>spbootartifactId>
    13. <version>0.0.1-SNAPSHOTversion>
    14. <name>spbootname>
    15. <description>Demo project for Spring Bootdescription>
    16. <properties>
    17. <java.version>1.8java.version>
    18. <mysql.version>5.1.44mysql.version>
    19. properties>
    20. <dependencies>
    21. <dependency>
    22. <groupId>org.springframework.bootgroupId>
    23. <artifactId>spring-boot-starter-aopartifactId>
    24. dependency>
    25. <dependency>
    26. <groupId>org.springframework.bootgroupId>
    27. <artifactId>spring-boot-starter-jdbcartifactId>
    28. dependency>
    29. <dependency>
    30. <groupId>org.springframework.bootgroupId>
    31. <artifactId>spring-boot-starter-webartifactId>
    32. dependency>
    33. <dependency>
    34. <groupId>org.mybatis.spring.bootgroupId>
    35. <artifactId>mybatis-spring-boot-starterartifactId>
    36. <version>1.3.2version>
    37. dependency>
    38. <dependency>
    39. <groupId>mysqlgroupId>
    40. <artifactId>mysql-connector-javaartifactId>
    41. <version>${mysql.version}version>
    42. <scope>runtimescope>
    43. dependency>
    44. <dependency>
    45. <groupId>org.projectlombokgroupId>
    46. <artifactId>lombokartifactId>
    47. dependency>
    48. <dependency>
    49. <groupId>com.alibabagroupId>
    50. <artifactId>druid-spring-boot-starterartifactId>
    51. <version>1.1.10version>
    52. dependency>
    53. <dependency>
    54. <groupId>com.github.pagehelpergroupId>
    55. <artifactId>pagehelper-spring-boot-starterartifactId>
    56. <version>1.2.3version>
    57. dependency>
    58. <dependency>
    59. <groupId>org.springframework.bootgroupId>
    60. <artifactId>spring-boot-starter-freemarkerartifactId>
    61. dependency>
    62. <dependency>
    63. <groupId>org.springframework.bootgroupId>
    64. <artifactId>spring-boot-starter-testartifactId>
    65. <scope>testscope>
    66. <exclusions>
    67. <exclusion>
    68. <groupId>org.junit.vintagegroupId>
    69. <artifactId>junit-vintage-engineartifactId>
    70. exclusion>
    71. exclusions>
    72. dependency>
    73. dependencies>
    74. <build>
    75. <plugins>
    76. <plugin>
    77. <groupId>org.springframework.bootgroupId>
    78. <artifactId>spring-boot-maven-pluginartifactId>
    79. plugin>
    80. <plugin>
    81. <groupId>org.mybatis.generatorgroupId>
    82. <artifactId>mybatis-generator-maven-pluginartifactId>
    83. <version>1.3.2version>
    84. <dependencies>
    85. <dependency>
    86. <groupId>mysqlgroupId>
    87. <artifactId>mysql-connector-javaartifactId>
    88. <version>${mysql.version}version>
    89. dependency>
    90. dependencies>
    91. <configuration>
    92. <overwrite>trueoverwrite>
    93. configuration>
    94. plugin>
    95. plugins>
    96. build>
    97. project>

    1.5 自动生成

     1.6 各个层的编写

    Mapper.xml

    1. <select id="query" resultMap="BaseResultMap" parameterType="com.zking.spboot.model.Book" >
    2. select
    3. <include refid="Base_Column_List" />
    4. from t_book where 1=1
    5. <if test="null!=bookname and ''!=bookname">
    6. and bookname like CONCAT('%',#{bookname},'%')
    7. if>
    8. select>

    mapper

    1. package com.zking.spboot.mapper;
    2. import com.zking.spboot.model.Book;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. @Repository
    6. public interface BookMapper {
    7. List query(Book book);
    8. int deleteByPrimaryKey(Integer id);
    9. int insert(Book record);
    10. int insertSelective(Book record);
    11. Book selectByPrimaryKey(Integer id);
    12. int updateByPrimaryKeySelective(Book record);
    13. int updateByPrimaryKey(Book record);
    14. }

    service

    1. package com.zking.spboot.service;
    2. import com.zking.spboot.model.Book;
    3. import java.util.List;
    4. /**
    5. * @author ljj
    6. * @site www.xiaomage.com
    7. * @company
    8. * @create  2022-11-21 14:16
    9. */
    10. public interface IBookService {
    11. List query(Book book);
    12. int insert(Book record);
    13. }

    impl(实现层)

    1. package com.zking.spboot.service;
    2. import com.zking.spboot.mapper.BookMapper;
    3. import com.zking.spboot.model.Book;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.stereotype.Service;
    6. import java.util.List;
    7. /**
    8. * @author ljj
    9. * @site www.xiaomage.com
    10. * @company
    11. * @create  2022-11-21 14:16
    12. */
    13. @Service
    14. public class BookServiceImpl implements IBookService {
    15. @Autowired
    16. private BookMapper bookMapper;
    17. @Override
    18. public List query(Book book) {
    19. return bookMapper.query(book);
    20. }
    21. @Override
    22. public int insert(Book record) {
    23. return bookMapper.insert(record);
    24. }
    25. }

    Contrpller

    1. package com.zking.spboot.controller;
    2. import com.zking.spboot.model.Book;
    3. import com.zking.spboot.service.IBookService;
    4. import lombok.AllArgsConstructor;
    5. import lombok.Data;
    6. import lombok.NoArgsConstructor;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import org.springframework.web.bind.annotation.RestController;
    10. import java.util.List;
    11. /**
    12. * @author ljj
    13. * @site www.xiaomage.com
    14. * @company
    15. * @create  2022-11-21 14:18
    16. */
    17. @RestController
    18. @RequestMapping("/book")
    19. public class BookController {
    20. @Autowired
    21. private IBookService bookService;
    22. @RequestMapping("/query")
    23. public JsonResponseBody query(Book book){
    24. List books = bookService.query(book);
    25. return new JsonResponseBody<>(200,"OK",books);
    26. }
    27. @RequestMapping("/add")
    28. public JsonResponseBody add(Book book){
    29. bookService.insert(book);
    30. return new JsonResponseBody<>();
    31. }
    32. @AllArgsConstructor
    33. @NoArgsConstructor
    34. @Data
    35. class JsonResponseBody{
    36. private int code=200;
    37. private String msg;
    38. private T data;
    39. }
    40. }

    二,前端

    actions.js

    1. /**
    2. * 对后台请求的地址的封装,URL格式如下:
    3. * 模块名_实体名_操作
    4. */
    5. export default {
    6. //服务器
    7. 'SERVER': 'http://localhost:8080/spboot',
    8. 'ALL':'/book/query',
    9. 'ADD':'/book/add',
    10. //获得请求的完整地址,用于mockjs测试时使用
    11. 'getFullPath': k => {
    12. return this.SERVER + this[k];
    13. }
    14. }

    BookLsit.vue页面

    1. <template>
    2. <div>
    3. <h1 align="center">SpringBoot阶段机试,ts={{ts}}h1>
    4. <el-form :inline="true">
    5. <el-form-item label="书籍名称">
    6. <el-input v-model="bookname">el-input>
    7. el-form-item>
    8. <el-form-item>
    9. <el-button type="primary" @click="query">查询el-button>
    10. <el-button type="primary" @click="open">添加书本el-button>
    11. el-form-item>
    12. el-form>
    13. <el-table :data="tableData" style="width: 100%">
    14. <el-table-column prop="id" label="书籍编号" width="180">
    15. el-table-column>
    16. <el-table-column prop="bookname" label="书籍名称" width="180">
    17. el-table-column>
    18. <el-table-column prop="price" label="书籍价格" width="180">
    19. el-table-column>
    20. <el-table-column prop="booktype" label="书籍类型">
    21. el-table-column>
    22. el-table>
    23. <el-dialog @close="close()" title="新增书籍" :visible.sync="dialogFormVisible">
    24. <el-form :rules="rules" ref="book" :model="book">
    25. <el-form-item prop="bookname" label="书本名称" :label-width="formLabelWidth">
    26. <el-input v-model="book.bookname" autocomplete="off">el-input>
    27. el-form-item>
    28. <el-form-item prop="price" label="书本价格" :label-width="formLabelWidth">
    29. <el-input v-model="book.price" autocomplete="off">el-input>
    30. el-form-item>
    31. <el-form-item prop="booktype" label="活动区域" :label-width="formLabelWidth">
    32. <el-select style="width: 100%;" v-model="book.booktype" placeholder="请选择书籍类型">
    33. <el-option label="修仙" value="修仙">el-option>
    34. <el-option label="武侠" value="武侠">el-option>
    35. el-select>
    36. el-form-item>
    37. el-form>
    38. <div slot="footer" class="dialog-footer">
    39. <el-button @click="dialogFormVisible = false">取 消el-button>
    40. <el-button type="primary" @click="save">确 定el-button>
    41. div>
    42. el-dialog>
    43. div>
    44. template>
    45. <script>
    46. export default {
    47. data: function() {
    48. return {
    49. ts: new Date().getTime(),
    50. bookname: '',
    51. tableData: [],
    52. dialogFormVisible: false,
    53. formLabelWidth: '100px',
    54. book: {
    55. bookname: '',
    56. price: '',
    57. booktype: ''
    58. },
    59. rules: {
    60. bookname: [{
    61. required: true,
    62. message: '请输入书籍名称',
    63. trigger: 'blur'
    64. }, ],
    65. price: [{
    66. required: true,
    67. message: '请输入书籍价格',
    68. trigger: 'blur'
    69. }, ],
    70. booktype: [{
    71. required: true,
    72. message: '请选择书籍类型',
    73. trigger: 'change'
    74. }, ],
    75. }
    76. };
    77. },
    78. methods: {
    79. close: function() {
    80. alert(111);
    81. this.$refs['book'].resetFields();
    82. },
    83. save: function() {
    84. this.$refs['book'].validate((valid) => {
    85. if (valid) {
    86. // 请求路径
    87. let url = this.axios.urls.ADD;
    88. // 发送请求
    89. this.axios.post(url, this.book).then(resp => {
    90. let rs = resp.data;
    91. if (rs.code == 200) {
    92. this.dialogFormVisible = false;
    93. this.query();
    94. }else{
    95. }
    96. }).catch(err => {
    97. });
    98. } else {
    99. console.log('error submit!!');
    100. return false;
    101. }
    102. });
    103. },
    104. open: function() {
    105. this.dialogFormVisible = true;
    106. },
    107. query: function() {
    108. // 查询参数
    109. let params = {
    110. bookname: this.bookname
    111. }
    112. // 请求路径
    113. let url = this.axios.urls.ALL;
    114. // 发起请求
    115. this.axios.post(url, params).then(resp => {
    116. let rs = resp.data;
    117. console.log(rs);
    118. this.tableData = rs.data;
    119. }).catch(err => {
    120. });
    121. }
    122. }
    123. }
    124. script>
    125. <style>
    126. style>

    页面展示:

     新增:

  • 相关阅读:
    [锁]:乐观锁与悲观锁
    Mybatis+Servlet+Mysql 整合的一个小项目:对初学者非常友好,有助于初学者很快的上手Java Web
    《中学科技》是什么级别的刊物?如何投稿?
    你还不会判定表和因果图法的概念及运用?一篇文章教会你
    Springboot基于ElasticSearch全文搜索引擎策略实现
    第一个实例:QT实现汽车电子仪表盘
    【.NET6+Modbus】Modbus TCP协议解析、仿真环境以及基于.NET实现基础通信
    electron打包后主进程下载文件崩溃
    Go语言基础,墙上时钟Wall Clock与单调时钟Monotonic Clock
    【indexedDB】indexedDB知识梳理
  • 原文地址:https://blog.csdn.net/weixin_64313980/article/details/127980743