目录

提前准备好的db(数据库表),html(前端代码),java(后端代码)等文件夹
表:
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里面进行执行即可

现在数据库准备工作已经完成
把我们提前准备好的HTML文件里面的spbook文件夹导入前端工具中
在找的文件的根目录执行
npm -v 查看版本

注意:如果npm -v没有出现版本的话我们需要以管理员的身份进入即可
在执行npm i 或者npm install下载依赖
npm run dev


这样我们的前端准备工作就完成了
导入准备好的java中的开发工具中

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

导入改变即可
1.3.2.修改配置文件
application.yml
- server:
- port: 8080
- servlet:
- context-path: /spboot
- spring:
- datasource:
- type: com.alibaba.druid.pool.DruidDataSource
- driver-class-name: com.mysql.jdbc.Driver
- url: jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=utf8&useSSL=false
- username: root
- password: 123456
- druid:
- initial-size: 5
- min-idle: 5
- max-active: 20
- max-wait: 60000
- time-between-eviction-runs-millis: 60000
- min-evictable-idle-time-millis: 30000
- validation-query: SELECT 1 FROM DUAL
- test-while-idle: true
- test-on-borrow: true
- test-on-return: false
- pool-prepared-statements: true
- max-pool-prepared-statement-per-connection-size: 20
- filter:
- stat:
- merge-sql: true
- slow-sql-millis: 5000
- web-stat-filter:
- enabled: true
- url-pattern: /*
- exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
- session-stat-enable: true
- session-stat-max-count: 100
- stat-view-servlet:
- enabled: true
- url-pattern: /druid/*
- reset-enable: true
- login-username: admin
- login-password: admin
- allow: 127.0.0.1
- #deny: 192.168.1.100
- freemarker:
- cache: false
- charset: UTF-8
- content-type: text/html
- suffix: .ftl
- template-loader-path: classpath:/templates
- mybatis:
- mapper-locations: classpath:mapper/*.xml
- type-aliases-package: com.zking.spboot.model
- configuration:
- map-underscore-to-camel-case: true
- logging:
- level:
- com.zking.spboot.mapper: debug
- pagehelper:
- helperDialect: mysql
- reasonable: true
- supportMethodsArguments: true
- params: count=countSql

其他不要修改即可!!!
jdbc.properties
- jdbc.driver=com.mysql.jdbc.Driver
- jdbc.url=jdbc:mysql://localhost:3306/bookshop?useUnicode=true&characterEncoding=UTF-8
- jdbc.username=root
- jdbc.password=123456
同样的修改数据库名称和密码
generatorConfig.xml
- "1.0" encoding="UTF-8" ?>
- generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
- "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
- <generatorConfiguration>
-
- <properties resource="jdbc.properties"/>
-
-
- <classPathEntry location="D:\repository\mvn-repository\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/>
-
-
- <context id="infoGuardian">
-
- <commentGenerator>
- <property name="suppressAllComments" value="true"/>
- <property name="suppressDate" value="true"/>
- commentGenerator>
-
-
- <jdbcConnection driverClass="${jdbc.driver}"
- connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
-
-
- <javaTypeResolver>
-
- <property name="forceBigDecimals" value="false"/>
- javaTypeResolver>
-
-
-
-
- <javaModelGenerator targetPackage="com.zking.spboot.model"
- targetProject="src/main/java">
-
- <property name="enableSubPackages" value="false"/>
-
- <property name="constructorBased" value="true"/>
-
- <property name="trimStrings" value="false"/>
-
- <property name="immutable" value="false"/>
- javaModelGenerator>
-
-
- <sqlMapGenerator targetPackage="com.zking.spboot.mapper"
- targetProject="src/main/resources">
-
- <property name="enableSubPackages" value="false"/>
- sqlMapGenerator>
-
-
-
-
-
- <javaClientGenerator targetPackage="com.zking.spboot.mapper"
- targetProject="src/main/java" type="XMLMAPPER">
-
- <property name="enableSubPackages" value="false"/>
- javaClientGenerator>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <table schema="" tableName="t_book" domainObjectName="Book"
- enableCountByExample="false" enableDeleteByExample="false"
- enableSelectByExample="false" enableUpdateByExample="false">
-
-
-
-
- table>
-
- context>
- generatorConfiguration>


1.3.3.配置maven


同时即可生成代码
完成以上步骤说明前后端环境已经搭建完成!!!!
BookMapper:
- package com.zking.spboot.mapper;
-
- import com.zking.spboot.model.Book;
- import org.springframework.stereotype.Repository;
-
- import java.util.List;
-
- @Repository
- public interface BookMapper {
- int deleteByPrimaryKey(Integer id);
-
- /**
- * 根据书籍名称模糊查询
- * @param book
- * @return
- */
- List
query(Book book); -
- /**
- * 新增书籍
- * @param record
- * @return
- */
-
- int insert(Book record);
-
- int insertSelective(Book record);
-
- Book selectByPrimaryKey(Integer id);
-
- int updateByPrimaryKeySelective(Book record);
-
- int updateByPrimaryKey(Book record);
- }

BookMapper.xml:
- "1.0" encoding="UTF-8" ?>
- mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
- <mapper namespace="com.zking.spboot.mapper.BookMapper" >
- <resultMap id="BaseResultMap" type="com.zking.spboot.model.Book" >
- <constructor >
- <idArg column="id" jdbcType="INTEGER" javaType="java.lang.Integer" />
- <arg column="bookname" jdbcType="VARCHAR" javaType="java.lang.String" />
- <arg column="price" jdbcType="REAL" javaType="java.lang.Float" />
- <arg column="booktype" jdbcType="VARCHAR" javaType="java.lang.String" />
- constructor>
- resultMap>
- <sql id="Base_Column_List" >
- id, bookname, price, booktype
- sql>
- <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
- select
- <include refid="Base_Column_List" />
- from t_book
- where id = #{id,jdbcType=INTEGER}
- select>
- <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
- delete from t_book
- where id = #{id,jdbcType=INTEGER}
- delete>
-
- <select id="query" resultType="com.zking.spboot.model.Book" >
- select <include refid="Base_Column_List"/> from t_book where 1=1
- <if test="null!=bookname and ''!=bookname">
- and bookname like concat('%',#{bookname},'%')
- if>
-
- select>
-
-
-
- <insert id="insert" parameterType="com.zking.spboot.model.Book" >
- insert into t_book (id, bookname, price,
- booktype)
- values (#{id,jdbcType=INTEGER}, #{bookname,jdbcType=VARCHAR}, #{price,jdbcType=REAL},
- #{booktype,jdbcType=VARCHAR})
- insert>
- <insert id="insertSelective" parameterType="com.zking.spboot.model.Book" >
- insert into t_book
- <trim prefix="(" suffix=")" suffixOverrides="," >
- <if test="id != null" >
- id,
- if>
- <if test="bookname != null" >
- bookname,
- if>
- <if test="price != null" >
- price,
- if>
- <if test="booktype != null" >
- booktype,
- if>
- trim>
- <trim prefix="values (" suffix=")" suffixOverrides="," >
- <if test="id != null" >
- #{id,jdbcType=INTEGER},
- if>
- <if test="bookname != null" >
- #{bookname,jdbcType=VARCHAR},
- if>
- <if test="price != null" >
- #{price,jdbcType=REAL},
- if>
- <if test="booktype != null" >
- #{booktype,jdbcType=VARCHAR},
- if>
- trim>
- insert>
- <update id="updateByPrimaryKeySelective" parameterType="com.zking.spboot.model.Book" >
- update t_book
- <set >
- <if test="bookname != null" >
- bookname = #{bookname,jdbcType=VARCHAR},
- if>
- <if test="price != null" >
- price = #{price,jdbcType=REAL},
- if>
- <if test="booktype != null" >
- booktype = #{booktype,jdbcType=VARCHAR},
- if>
- set>
- where id = #{id,jdbcType=INTEGER}
- update>
- <update id="updateByPrimaryKey" parameterType="com.zking.spboot.model.Book" >
- update t_book
- set bookname = #{bookname,jdbcType=VARCHAR},
- price = #{price,jdbcType=REAL},
- booktype = #{booktype,jdbcType=VARCHAR}
- where id = #{id,jdbcType=INTEGER}
- update>
- mapper>

BookService:
- package com.zking.spboot.service;
-
- import com.zking.spboot.model.Book;
- import org.springframework.stereotype.Repository;
-
- import java.util.List;
-
- public interface BookService {
-
- /**
- * 根据商品名称模糊查询
- * @param book
- * @return
- */
- List<Book> query(Book book);
-
- /**
- * 新增书籍
- * @param record
- * @return
- */
-
- int insert(Book record);
-
-
- }

选中BookService alt+Enter 选择 implement interface


即可生成
BookServiceImpl:
- package com.zking.spboot.service.impl;
-
- import com.zking.spboot.mapper.BookMapper;
- import com.zking.spboot.model.Book;
- import com.zking.spboot.service.BookService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.annotation.RequestMapping;
-
- import java.util.List;
-
- /**
- * @author冰冰
- * @create 2022-11-19 10:24
- */
- @Service
- public class BookServiceImpl implements BookService {
- @Autowired
- private BookMapper bookMapper;
- @Override
- public List
query(Book book) { - return bookMapper.query(book);
- }
-
- @Override
- public int insert(Book record) {
- return bookMapper.insert(record);
- }
- }
BookController:
- package com.zking.spboot.controller;
-
- import com.zking.spboot.model.Book;
- import com.zking.spboot.service.BookService;
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- import java.util.List;
-
- /**
- * @author冰冰
- * @create 2022-11-19 10:29
- */
- @RestController
- @RequestMapping("/book")
- public class BookController {
-
- @Autowired
- private BookService bookService;
- //模糊查询
- @RequestMapping("/query")
- public JsonResponseBody> query(Book book){
- List
books = bookService.query(book); - return new JsonResponseBody<>(200,"ok",books);
- }
- //新增
- @RequestMapping("/add")
- public JsonResponseBody> add(Book book){
- bookService.insert(book);
- return new JsonResponseBody<>();
- }
-
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- class JsonResponseBody
{ - private int code = 200;
- private String msg = "ok";
- private T data;
- }
-
- }

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



以上完成后台就全部写完了!!(只包括新增和查询和模糊查询)
action.js:
- /**
- * 对后台请求的地址的封装,URL格式如下:
- * 模块名_实体名_操作
- */
- export default {
- //服务器
- 'SERVER': 'http://localhost:8080/spboot',
- 'ALL':'/book/query',
- 'ADD':'/book/add',
- //获得请求的完整地址,用于mockjs测试时使用
- 'getFullPath': k => {
- return this.SERVER + this[k];
- }
- }
表单的样式我们拜读官网
Element - The world's most popular Vue UI framework
注意:下面这个bookname是跟数据库的书籍名称保存一致
bookname" >
query">查询
效果:

tableData" style="width: 100%">
效果:
查询

模糊查询

@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
- <template>
- <div>
- <h1 align="center">SpringBoot阶段机试,ts={{ts}}h1>
-
- <el-form :inline="true">
- <el-form-item label="书籍名称">
- <el-input v-model="bookname">el-input>
- el-form-item>
- <el-form-item>
- <el-button type="primary" @click="query">查询el-button>
- <el-button type="primary" @click="open">新增el-button>
- el-form-item>
- el-form>
-
-
- <el-table :data="tableData" style="width: 100%">
- <el-table-column prop="id" label="书本编号" width="180">
- el-table-column>
- <el-table-column prop="bookname" label="书本名称" width="180">
- el-table-column>
- <el-table-column prop="price" label="书本价格">
- el-table-column>
- <el-table-column prop="booktype" label="书本类型">
- el-table-column>
- el-table>
-
- <el-dialog @close="close" title="书籍新增" :visible.sync="dialogFormVisible">
- <el-form :model="book" :rules="rules" ref="book">
- <el-form-item prop="bookname" label="书籍名称" :label-width="formLabelWidth">
- <el-input v-model="book.bookname" autocomplete="off">el-input>
- el-form-item>
- <el-form-item prop="price" label="书籍价格" :label-width="formLabelWidth">
- <el-input v-model="book.price" autocomplete="off">el-input>
- el-form-item>
- <el-form-item prop="booktype" label="书籍类型" :label-width="formLabelWidth">
- <el-select style="width: 100%;" v-model="book.booktype" placeholder="请选择书籍类型">
- <el-option label="言情" value="言情">el-option>
- <el-option label="玄幻" value="玄幻">el-option>
- el-select>
- el-form-item>
- el-form>
- <div slot="footer" class="dialog-footer">
- <el-button @click="dialogFormVisible = false">取 消el-button>
- <el-button type="primary" @click="save">确 定el-button>
- div>
- el-dialog>
-
-
- div>
- template>
-
- <script>
- export default {
- data: function() {
- return {
- ts: new Date().getTime(),
- bookname: '',
- tableData: [],
- dialogFormVisible: false,
- formLabelWidth: '100px',
- book: {
- bookname: '',
- price: '',
- booktype: ''
- },
- rules: {
- bookname: [{
- required: true,
- message: '请输入书籍名称',
- trigger: 'blur'
- }],
- price: [{
- required: true,
- message: '请输入书籍价格',
- trigger: 'blur'
- }],
- booktype: [{
- required: true,
- message: '请选择书籍类型',
- trigger: 'change'
- }],
- }
-
- };
- },
- methods: {
- close: function() {
- this.$refs['book'].resetFields();
- },
- save: function() {
- this.$refs['book'].validate((valid) => {
- if (valid) {
- let url = this.axios.urls.ADD;
- this.axios.post(url, this.book).then(resp => {
- let rs = resp.data;
- if(rs.code==200){
- //关闭对话框
- this.dialogFormVisible=false;
- //刷新
- this.query();
- }else{
-
- }
- }).catch(err => {
-
- });
- }else{
- console.log('error submit!!');
- return false;
- }
-
- });
- },
- open:function(){
- this.dialogFormVisible = true;
- },
- query: function() {
- //查询参数
- let params = {
- bookname: this.bookname
- }
- //请求路径
- let url = this.axios.urls.ALL;
- //发起请求
- this.axios.post(url, params).then(resp => {
- let rs = resp.data;
- console.log(rs);
- this.tableData = rs.data;
- }).catch(err => {
-
- })
-
- }
- }
- }
- script>
-
- <style>
- style>
效果:

