• 利用SpringBoot和vue+elementui做一个简单的书本信息管理系统


    目录

    1.准备工作

    1.1.数据库准备

    1.2.前端准备工作

    1.3.后端准备工作

    2.后台代码的编写

    2.1.修改配置文件

    2.2. 编写service层

    2.3.编写Controller层

    3.前台代码的编写

    3.1.在src里面的api里面的action.js

    3.2.搜索栏,表单 

    3.3.表格

    3.4.弹出新增的模态框


    1.准备工作

    提前准备好的db(数据库表),html(前端代码),java(后端代码)等文件夹

    1.1.数据库准备

    表:

    create database if not exists bookshop default charset utf8 collate utf8_general_ci;
    use bookshop;
    create table t_book(
       id int not null auto_increment primary key comment '书本编号',
       bookname varchar(50) not null comment '书本名称',
       price float default 0 comment '书本价格',
       booktype varchar(20) comment '书本类型'
    ) comment '书本信息表';
    insert into t_book(bookname,price,booktype) values
    ('三国演义',110,'战争'),
    ('西游记',120,'神话'),
    ('红楼梦',130,'古典');

    把什么的数据直接放到mysql里面进行执行即可

     现在数据库准备工作已经完成

    1.2.前端准备工作

    把我们提前准备好的HTML文件里面的spbook文件夹导入前端工具中

    在找的文件的根目录执行

    npm -v     查看版本

     注意:如果npm -v没有出现版本的话我们需要以管理员的身份进入即可

    在执行npm i 或者npm install下载依赖

     npm run dev

     这样我们的前端准备工作就完成了

    1.3.后端准备工作

    导入准备好的java中的开发工具中

     1.3.1修改maven仓库

    导入项目之后面要修改maven仓库,一定要找到本地仓库

     导入改变即可

    1.3.2.修改配置文件

    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

     其他不要修改即可!!!

    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

    同样的修改数据库名称和密码

    generatorConfig.xml

    1. "1.0" encoding="UTF-8" ?>
    2. 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="D:\repository\mvn-repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.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.3.3.配置maven

     

     同时即可生成代码

    完成以上步骤说明前后端环境已经搭建完成!!!!

    2.后台代码的编写

    2.1.修改配置文件

    BookMapper:
    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. int deleteByPrimaryKey(Integer id);
    8. /**
    9. * 根据书籍名称模糊查询
    10. * @param book
    11. * @return
    12. */
    13. List query(Book book);
    14. /**
    15. * 新增书籍
    16. * @param record
    17. * @return
    18. */
    19. int insert(Book record);
    20. int insertSelective(Book record);
    21. Book selectByPrimaryKey(Integer id);
    22. int updateByPrimaryKeySelective(Book record);
    23. int updateByPrimaryKey(Book record);
    24. }

     BookMapper.xml:

    1. "1.0" encoding="UTF-8" ?>
    2. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3. <mapper namespace="com.zking.spboot.mapper.BookMapper" >
    4. <resultMap id="BaseResultMap" type="com.zking.spboot.model.Book" >
    5. <constructor >
    6. <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
    7. <arg column="bookname" jdbcType="VARCHAR" javaType="java.lang.String" />
    8. <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
    9. <arg column="booktype" jdbcType="VARCHAR" javaType="java.lang.String" />
    10. constructor>
    11. resultMap>
    12. <sql id="Base_Column_List" >
    13. id, bookname, price, booktype
    14. sql>
    15. <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
    16. select
    17. <include refid="Base_Column_List" />
    18. from t_book
    19. where id = #{id,jdbcType=INTEGER}
    20. select>
    21. <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
    22. delete from t_book
    23. where id = #{id,jdbcType=INTEGER}
    24. delete>
    25. <select id="query" resultType="com.zking.spboot.model.Book" >
    26. select <include refid="Base_Column_List"/> from t_book where 1=1
    27. <if test="null!=bookname and ''!=bookname">
    28. and bookname like concat('%',#{bookname},'%')
    29. if>
    30. select>
    31. <insert id="insert" parameterType="com.zking.spboot.model.Book" >
    32. insert into t_book (id, bookname, price,
    33. booktype)
    34. values (#{id,jdbcType=INTEGER}, #{bookname,jdbcType=VARCHAR}, #{price,jdbcType=REAL},
    35. #{booktype,jdbcType=VARCHAR})
    36. insert>
    37. <insert id="insertSelective" parameterType="com.zking.spboot.model.Book" >
    38. insert into t_book
    39. <trim prefix="(" suffix=")" suffixOverrides="," >
    40. <if test="id != null" >
    41. id,
    42. if>
    43. <if test="bookname != null" >
    44. bookname,
    45. if>
    46. <if test="price != null" >
    47. price,
    48. if>
    49. <if test="booktype != null" >
    50. booktype,
    51. if>
    52. trim>
    53. <trim prefix="values (" suffix=")" suffixOverrides="," >
    54. <if test="id != null" >
    55. #{id,jdbcType=INTEGER},
    56. if>
    57. <if test="bookname != null" >
    58. #{bookname,jdbcType=VARCHAR},
    59. if>
    60. <if test="price != null" >
    61. #{price,jdbcType=REAL},
    62. if>
    63. <if test="booktype != null" >
    64. #{booktype,jdbcType=VARCHAR},
    65. if>
    66. trim>
    67. insert>
    68. <update id="updateByPrimaryKeySelective" parameterType="com.zking.spboot.model.Book" >
    69. update t_book
    70. <set >
    71. <if test="bookname != null" >
    72. bookname = #{bookname,jdbcType=VARCHAR},
    73. if>
    74. <if test="price != null" >
    75. price = #{price,jdbcType=REAL},
    76. if>
    77. <if test="booktype != null" >
    78. booktype = #{booktype,jdbcType=VARCHAR},
    79. if>
    80. set>
    81. where id = #{id,jdbcType=INTEGER}
    82. update>
    83. <update id="updateByPrimaryKey" parameterType="com.zking.spboot.model.Book" >
    84. update t_book
    85. set bookname = #{bookname,jdbcType=VARCHAR},
    86. price = #{price,jdbcType=REAL},
    87. booktype = #{booktype,jdbcType=VARCHAR}
    88. where id = #{id,jdbcType=INTEGER}
    89. update>
    90. mapper>

    2.2. 编写service层

    BookService:
    1. package com.zking.spboot.service;
    2. import com.zking.spboot.model.Book;
    3. import org.springframework.stereotype.Repository;
    4. import java.util.List;
    5. public interface BookService {
    6. /**
    7. * 根据商品名称模糊查询
    8. * @param book
    9. * @return
    10. */
    11. List<Book> query(Book book);
    12. /**
    13. * 新增书籍
    14. * @param record
    15. * @return
    16. */
    17. int insert(Book record);
    18. }

     选中BookService  alt+Enter 选择 implement interface

     

     即可生成

    BookServiceImpl:
    1. package com.zking.spboot.service.impl;
    2. import com.zking.spboot.mapper.BookMapper;
    3. import com.zking.spboot.model.Book;
    4. import com.zking.spboot.service.BookService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import java.util.List;
    9. /**
    10. * @author冰冰
    11. * @create  2022-11-19 10:24
    12. */
    13. @Service
    14. public class BookServiceImpl implements BookService {
    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. }

    2.3.编写Controller层

    BookController:
    1. package com.zking.spboot.controller;
    2. import com.zking.spboot.model.Book;
    3. import com.zking.spboot.service.BookService;
    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冰冰
    13. * @create  2022-11-19 10:29
    14. */
    15. @RestController
    16. @RequestMapping("/book")
    17. public class BookController {
    18. @Autowired
    19. private BookService bookService;
    20. //模糊查询
    21. @RequestMapping("/query")
    22. public JsonResponseBody query(Book book){
    23. List books = bookService.query(book);
    24. return new JsonResponseBody<>(200,"ok",books);
    25. }
    26. //新增
    27. @RequestMapping("/add")
    28. public JsonResponseBody add(Book book){
    29. bookService.insert(book);
    30. return new JsonResponseBody<>();
    31. }
    32. @Data
    33. @AllArgsConstructor
    34. @NoArgsConstructor
    35. class JsonResponseBody{
    36. private int code = 200;
    37. private String msg = "ok";
    38. private T data;
    39. }
    40. }

    注意:这里要确保下载了Lombok主键

     

     

     

     以上完成后台就全部写完了!!(只包括新增和查询和模糊查询)

    3.前台代码的编写

    3.1.在src里面的api里面的action.js

    action.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. }

    3.2.搜索栏,表单 

    表单的样式我们拜读官网

    Element - The world's most popular Vue UI framework

    注意:下面这个bookname是跟数据库的书籍名称保存一致


            
              
                bookname" >
              

              
                query">查询
              

            

    效果:

    3.3.表格

     
            tableData" style="width: 100%">
                
                

                
                

                
                

                
                

            

    效果:

    查询

     模糊查询

    3.4.弹出新增的模态框


            @close="close" title="书籍新增" :visible.sync="dialogFormVisible">
                book" :rules="rules" ref="book">
                    
                        book.bookname" autocomplete="off">
                    

                    
                        book.price" autocomplete="off">
                    

                    formLabelWidth">
                        book.booktype" placeholder="请输入书籍类型">
                            
                            
                        

                    

                

                


            

     

    增加一个新增按钮


                
                    
                

                
                    查询
                    新增
                

            

    全部代码:BookList.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="书本价格">
    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 :model="book" :rules="rules" ref="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. this.$refs['book'].resetFields();
    81. },
    82. save: function() {
    83. this.$refs['book'].validate((valid) => {
    84. if (valid) {
    85. let url = this.axios.urls.ADD;
    86. this.axios.post(url, this.book).then(resp => {
    87. let rs = resp.data;
    88. if(rs.code==200){
    89. //关闭对话框
    90. this.dialogFormVisible=false;
    91. //刷新
    92. this.query();
    93. }else{
    94. }
    95. }).catch(err => {
    96. });
    97. }else{
    98. console.log('error submit!!');
    99. return false;
    100. }
    101. });
    102. },
    103. open:function(){
    104. this.dialogFormVisible = true;
    105. },
    106. query: function() {
    107. //查询参数
    108. let params = {
    109. bookname: this.bookname
    110. }
    111. //请求路径
    112. let url = this.axios.urls.ALL;
    113. //发起请求
    114. this.axios.post(url, params).then(resp => {
    115. let rs = resp.data;
    116. console.log(rs);
    117. this.tableData = rs.data;
    118. }).catch(err => {
    119. })
    120. }
    121. }
    122. }
    123. script>
    124. <style>
    125. style>

    效果:

  • 相关阅读:
    微服务平滑迁移上云最佳实践
    华为HCIA(三)
    Windows连接Linux上安装的Redis
    (十一)Powershell调用java实验
    【花雕动手做】有趣好玩的音乐可视化系列小项目(15)--横排LED方管灯
    CH455G驱动数码管
    Spring第六讲:Spring事务原理及应用
    Vue3+node.js网易云音乐实战项目(六)
    基于SSM+Vue的乐购游戏商城系统
    web 安全总结
  • 原文地址:https://blog.csdn.net/m0_68211831/article/details/127924520