文章目录
本文档以较老版本guns-v3.0.1 为例
1. 环境准备
以实际为准
2.导入项目
-
打开项目
-
修改为本机JDK
-
添加maven 【提前配置好maven环境】
guns-parent 下的pom.xml文件右击 ,找到Add as maven
-
利用sql文件,导入到数据库中
-
自定义修改端口 【本机设置的8080】
-
数据库设置 【根据实际情况进行修改】
-
启动项目
-
出错最多原因 【mysql驱动 版本】
Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/spring/boot/starter/MybatisPlusAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is com.baomidou.mybatisplus.exceptions.MybatisPlusException: Error: GlobalConfigUtils setMetaData Fail ! Cause:java.sql.SQLException: Unknown system variable 'tx_isolation'
根据本机数据库版本修改maven中sql驱动版本即可, 本机修改版本为8.0及以上版本可正常运行
- 登录 初始账户:admin 密码:111111
3. guns 开发
3.1 准备数据库表
CREATE TABLE `my_order` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '主键id',
`user` varchar(255) DEFAULT NULL COMMENT '下单人名称',
`place` varchar(255) DEFAULT NULL COMMENT '地点',
`goods` varchar(255) DEFAULT NULL COMMENT '商品名称',
`createtime` datetime DEFAULT NULL COMMENT '下单时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3
自定义添加一些数据
3.2 mybatis-plus 代码生成
-
修改为本机项目目录
-
修改为本机数据库设置
-
设置单独生成my_order表 【不加生成所有表】
-
运行后 删除TTT文件夹 【本项目无用】
-
自动生成业务代码
生成文件
3.3 菜单设置和权限配置
重新加载后 可显示页面
3.4 修改前端js文件
3.5 显示列表订单业务代码编写
package com.stylefeng.guns.modular.order.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.stylefeng.guns.common.persistence.dao.MyOrderMapper;
import com.stylefeng.guns.common.persistence.model.MyOrder;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
/**
* 订单业务控制器
*
* @author fengshuonan
* @Date 2022-02-20 10:39:02
*/
@Controller
@RequestMapping("/order")
public class OrderController extends BaseController {
private String PREFIX = "/order/order/";
@Autowired
private MyOrderMapper myOrderMapper;
/**
* 获取订单业务列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
//查询全部
List<MyOrder> myOrders = myOrderMapper.selectList(null);
return myOrders;
}
}
3.7 显示列表订单管理-----搜索功能
package com.stylefeng.guns.modular.order.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.stylefeng.guns.common.persistence.dao.MyOrderMapper;
import com.stylefeng.guns.common.persistence.model.MyOrder;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
/**
* 订单业务控制器
*
* @author fengshuonan
* @Date 2022-02-20 10:39:02
*/
@Controller
@RequestMapping("/order")
public class OrderController extends BaseController {
private String PREFIX = "/order/order/";
@Autowired
private MyOrderMapper myOrderMapper;
/**
* 获取订单业务列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
if (ToolUtil.isNotEmpty(condition)){
// 搜索
EntityWrapper<MyOrder> objectEntityWrapper = new EntityWrapper<>();
Wrapper<MyOrder> goods = objectEntityWrapper.like("goods", "%" + condition + "%");
List<MyOrder> myOrders = myOrderMapper.selectList(goods);
return myOrders;
}else {
//查询全部
List<MyOrder> myOrders = myOrderMapper.selectList(null);
return myOrders;
}
}
}
3.8 新增订单业务
后端
/**
* 新增订单业务
*/
@RequestMapping(value = "/add")
@ResponseBody
public Object add(MyOrder myOrder) {
if (myOrder != null){
myOrder.setCreatetime(new Date());
}
Integer insert = myOrderMapper.insert(myOrder);
return super.SUCCESS_TIP;
}
前端
修改js
添加菜单
添加角色
测试
3.9 修改和删除业务实现
- 添加修改和删除的菜单设置和角色权限配置
- 添加修改页面html代码 注意:字段变量与后端传入变量一致
@layout("/common/_container.html"){
<div class="ibox float-e-margins">
<div class="ibox-content">
<div class="form-horizontal">
<input type="hidden" id="id" value="${myOrder.id}">
<div class="row">
<div class="col-sm-6 b-r">
<#input id="user" name="下单用户" type="user" value="${myOrder.user}"/>
<#input id="goods" name="商品名称" type="goods" value="${myOrder.goods}"/>
</div>
<div class="col-sm-6">
<#input id="place" name="地点" type="place" value="${myOrder.place}"/>
<#input id="createtime" name="下单时间" type="createtime" value="${myOrder.createtime}"/>
</div>
</div>
<div class="row btn-group-m-t">
<div class="col-sm-10">
<#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="OrderInfoDlg.editSubmit()"/>
<#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="OrderInfoDlg.close()"/>
</div>
</div>
</div>
</div>
</div>
<script src="${ctxPath}/static/modular/order/order/order_info.js"></script>
@}
- 修改js代码 确保Controller类中有对应映射地址
- Controller类
package com.stylefeng.guns.modular.order.controller;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.stylefeng.guns.common.constant.factory.ConstantFactory;
import com.stylefeng.guns.common.persistence.dao.MyOrderMapper;
import com.stylefeng.guns.common.persistence.model.MyOrder;
import com.stylefeng.guns.common.persistence.model.User;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.log.LogObjectHolder;
import com.stylefeng.guns.core.util.ToolUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
* 订单业务控制器
*
* @author fengshuonan
* @Date 2022-02-20 10:39:02
*/
@Controller
@RequestMapping("/order")
public class OrderController extends BaseController {
private String PREFIX = "/order/order/";
@Resource
private MyOrderMapper myOrderMapper;
/**
* 跳转到订单业务首页
*/
@RequestMapping("")
public String index() {
return PREFIX + "order.html";
}
/**
* 跳转到添加订单业务
*/
@RequestMapping("/order_add")
public String orderAdd() {
return PREFIX + "order_add.html";
}
/**
* 跳转到修改订单业务
*/
@RequestMapping("/order_update/{orderId}")
public String orderUpdate(@PathVariable Integer orderId, Model model) {
MyOrder myOrder = this.myOrderMapper.selectById(orderId);
model.addAttribute(myOrder);
LogObjectHolder.me().set(myOrder);
return PREFIX + "order_edit.html";
}
/**
* 获取订单业务列表
*/
@RequestMapping(value = "/list")
@ResponseBody
public Object list(String condition) {
if (ToolUtil.isNotEmpty(condition)){
// 搜索
EntityWrapper<MyOrder> objectEntityWrapper = new EntityWrapper<>();
Wrapper<MyOrder> goods = objectEntityWrapper.like("goods", "%" + condition + "%");
List<MyOrder> myOrders = myOrderMapper.selectList(goods);
return myOrders;
}else {
//查询全部
List<MyOrder> myOrders = myOrderMapper.selectList(null);
return myOrders;
}
}
/**
* 新增订单业务
*/
@RequestMapping(value = "/add")
@ResponseBody
public Object add(MyOrder myOrder) {
if (myOrder != null){
myOrder.setCreatetime(new Date());
}
Integer insert = myOrderMapper.insert(myOrder);
return super.SUCCESS_TIP;
}
/**
* 删除订单业务
*/
@RequestMapping(value = "/delete")
@ResponseBody
public Object delete(@RequestParam Integer orderId) {
Integer integer = myOrderMapper.deleteById(orderId);
return super.SUCCESS_TIP;
}
/**
* 修改订单业务
*/
@RequestMapping(value = "/update")
@ResponseBody
public Object update(MyOrder myOrder) {
if (ToolUtil.isNotEmpty(myOrder.getId())){
Integer integer = myOrderMapper.updateById(myOrder);
return integer;
}
return super.SUCCESS_TIP;
}
/**
* 订单业务详情
*/
@RequestMapping(value = "/detail")
@ResponseBody
public Object detail() {
return null;
}
}
4. Spring Boot 精要
- Spring Boot是新一代的Spring框架
- Spring Boot可以快速构建Spring程序,简化了spring开发
- Spring Boot不是应用服务器 (内置了一个tomcat服务器而已)
- Spring Boot不是SpringMVC的替代
- Spring Boot没有代码生成(自动装配autoconfig)
4.1 创建一个Spring Boot程序
- start.spring.io 网站自动创建
- IDEA创建
4.2 Spring Boot核心
- 自动配置
- 起步依赖
- 命令行界面(spring boot cli)(不用java来写代码,可以用groovy)
- Actuator监控(监控spring 程序的健康状态,看到springboot帮你配置了哪些bean)
4.2.1 自动配置介绍
- 当程序启动时决定用哪个配置,不用哪个配置
- Spring-boot-autoconfigure包介绍