一:后端配置
1、(设置里面)配置maven本地仓库
2、 配置Tomcat
2.1点击编辑配置
2.2.1点击左上角加号搜索tomcat,点击本地配置JDK
2.2.2点击部署,点击加号选择工作,然后选下面那个长的,应用程序上下文里面可以编辑成自己想要的路径
3、配置resource里jdbc.properties文件,设置好自己的数据库,用户名,密码
(其他的可以自己选择配好至可以运行为止)
二:后端代码
1、mapper.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zking.ssm.mapper.OrderMapper">
<resultMap id="BaseResultMap" type="com.zking.ssm.model.Order">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="order_desc" jdbcType="VARCHAR" property="orderDesc" />
<result column="amount" jdbcType="FLOAT" property="amount" />
<result column="cust_name" jdbcType="VARCHAR" property="custName" />
<result column="cust_phone" jdbcType="VARCHAR" property="custPhone" />
<result column="cust_addr" jdbcType="VARCHAR" property="custAddr" />
</resultMap>
<sql id="Base_Column_List">
id, order_desc, amount, cust_name, cust_phone, cust_addr
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_order
where id = #{id,jdbcType=INTEGER}
</select>
<select id="listOrders" resultType="com.zking.ssm.model.Order">
select
<include refid="Base_Column_List" />
from t_order
<where>
<if test="orderDesc != null and orderDesc != ''">
and order_desc like concat(#{orderDesc,jdbcType=VARCHAR}, '%')
</if>
</where>
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from t_order
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.zking.ssm.model.Order" useGeneratedKeys="true">
insert into t_order (order_desc, amount, cust_name,
cust_phone, cust_addr)
values (#{orderDesc,jdbcType=VARCHAR}, #{amount,jdbcType=FLOAT}, #{custName,jdbcType=VARCHAR},
#{custPhone,jdbcType=VARCHAR}, #{custAddr,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.zking.ssm.model.Order" useGeneratedKeys="true">
insert into t_order
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="orderDesc != null">
order_desc,
</if>
<if test="amount != null">
amount,
</if>
<if test="custName != null">
cust_name,
</if>
<if test="custPhone != null">
cust_phone,
</if>
<if test="custAddr != null">
cust_addr,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="orderDesc != null">
#{orderDesc,jdbcType=VARCHAR},
</if>
<if test="amount != null">
#{amount,jdbcType=FLOAT},
</if>
<if test="custName != null">
#{custName,jdbcType=VARCHAR},
</if>
<if test="custPhone != null">
#{custPhone,jdbcType=VARCHAR},
</if>
<if test="custAddr != null">
#{custAddr,jdbcType=VARCHAR},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.zking.ssm.model.Order">
update t_order
<set>
<if test="orderDesc != null">
order_desc = #{orderDesc,jdbcType=VARCHAR},
</if>
<if test="amount != null">
amount = #{amount,jdbcType=FLOAT},
</if>
<if test="custName != null">
cust_name = #{custName,jdbcType=VARCHAR},
</if>
<if test="custPhone != null">
cust_phone = #{custPhone,jdbcType=VARCHAR},
</if>
<if test="custAddr != null">
cust_addr = #{custAddr,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.zking.ssm.model.Order">
update t_order
set order_desc = #{orderDesc,jdbcType=VARCHAR},
amount = #{amount,jdbcType=FLOAT},
cust_name = #{custName,jdbcType=VARCHAR},
cust_phone = #{custPhone,jdbcType=VARCHAR},
cust_addr = #{custAddr,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>
</mapper>
2、controller层(增删改查)
2.1增加
@PostMapping("/insert")
public Object insert(Order order) {
Map<String,Object> data = new HashMap<>();
try {
orderService.insert(order);
data.put("code", 1);
data.put("msg", "操作成功");
return data;
} catch (Exception e) {
e.printStackTrace();
data.put("code", -1);
data.put("msg", "操作失败");
return data;
}
}
2.2删除
@DeleteMapping("/del")
public Object delete(Integer id) {
Map<String,Object> map = new HashMap<>();
try {
orderService.deleteByPrimaryKey(id);
map.put("code", 1);
map.put("msg", "操作成功");
return map;
} catch (Exception e) {
e.printStackTrace();
map.put("code", -1);
map.put("msg", "操作失败");
return map;
}
}
2.3修改
@PostMapping("/update")
public Object update(Order order) {
Map<String,Object> upd = new HashMap<>();
try {
orderService.updateByPrimaryKey(order);
upd.put("code", 1);
upd.put("msg", "操作成功");
return upd;
} catch (Exception e) {
e.printStackTrace();
upd.put("code", -1);
upd.put("msg", "操作失败");
return upd;
}
}
2.4查询(模糊查询)
@GetMapping("/orders")
public Object getOrders(String orderDesc) {
List<Order> orders = orderService.listOrders(orderDesc);
Map<String, Object> data = new HashMap<>();
data.put("code", 1);
data.put("msg", "操作成功");
data.put("data", orders);
return data;
}
3、mapper文件
public interface OrderMapper {
int deleteByPrimaryKey(Integer id);
int insert(Order record);
int insertSelective(Order record);
Order selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(Order record);
int updateByPrimaryKey(Order record);
List<Order> listOrders(@Param("orderDesc") String orderDesc);
}
4、service层(接口)
接口
public interface IOrderService {
List<Order> listOrders(@Param("orderDesc") String orderDesc);
void insert(Order record);
int deleteByPrimaryKey(Integer id);
int updateByPrimaryKey(Order record);
}
代码层
@Service
public class OrderService implements IOrderService {
@Autowired
private OrderMapper orderMapper;
@Override
public List<Order> listOrders(String orderDesc) {
return orderMapper.listOrders(orderDesc);
}
@Override
public void insert(Order record) {
orderMapper.insert(record);
}
@Override
public int deleteByPrimaryKey(Integer id) {
return orderMapper.deleteByPrimaryKey(id);
}
@Override
public int updateByPrimaryKey(Order record) {
return orderMapper.updateByPrimaryKey(record);
}
}
三:前端代码
0、下载前端插件
0.1找到项目所在目录输入cmd
0.2输入npm install 等它下载完
0.3输入npm run dev运行到前端界面
1、js层代码
/**
* 对后台请求的地址的封装,URL格式如下:
* 模块名_实体名_操作
*/
export default {
//服务器
'SERVER': 'http://localhost:8080/',
//获取订单信息
'ORDERMSG_REQ': '/orders',
//增加书本信息
'ORDERMSG_ADD': '/insert',
//删除书本信息
'ORDERMSG_DEL': '/del',
//删除书本信息
'ORDERMSG_UPD': '/update',
//获得请求的完整地址,用于mockjs测试时使用
'getFullPath': k => {
return this.SERVER + this[k];
}
}
2、vue界面
2.1前面查询框
<!-- 查询-->
<el-form :inline="true" class="demo-form-inline">
<el-form-item label="订单描述">
<el-input v-model="orderDesc" placeholder="订单描述"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="quy()">查询</el-button>
<el-button type="primary" @click="add()">新增</el-button>
</el-form-item>
</el-form>
2.2表格区
<!-- 表格 -->
<el-table :data="orders" style="width: 100%">
<el-table-column prop="id" label="编号" width="180"></el-table-column>
<el-table-column prop="orderDesc" label="商品描述" width="180"></el-table-column>
<el-table-column prop="custPhone" label="电话" width="180"></el-table-column>
<el-table-column prop="custName" label="客户名称" width="180"></el-table-column>
<el-table-column prop="amount" label="商品价格" width="180"></el-table-column>
<el-table-column prop="custAddr" label="收获地址"></el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<el-button size="mini" type="warning" @click="Edit(scope.row)">修改</el-button>
<el-button size="mini" type="danger" @click="Del(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
2.3增加或修改弹出表
<!-- 弹出窗口增加 -->
<el-dialog title="增加订单" :visible.sync="dialogFormVisible" width="500px">
<el-form :model="orderForm" :rules="rules" ref="orderForm">
<el-form-item label="描述" :label-width="formLabelWidth" prop="orderDesc">
<el-input v-model="orderForm.orderDesc" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="金额" :label-width="formLabelWidth" prop="amount">
<el-input v-model="orderForm.amount" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="客户" :label-width="formLabelWidth">
<el-input v-model="orderForm.custName" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="电话" :label-width="formLabelWidth">
<el-input v-model="orderForm.custPhone" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="地址" :label-width="formLabelWidth">
<el-input v-model="orderForm.custAddr" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="save('orderForm')">确 定</el-button>
</div>
</el-dialog>
<!-- 弹出窗口修改 -->
<el-dialog title="修改订单" :visible.sync="dialogFormVisible1" width="500px">
<el-form :model="orderForm1">
<el-form-item label="描述" :label-width="formLabelWidth">
<el-input v-model="orderForm1.orderDesc" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="金额" :label-width="formLabelWidth">
<el-input v-model="orderForm1.amount" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="客户" :label-width="formLabelWidth">
<el-input v-model="orderForm1.custName" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="电话" :label-width="formLabelWidth">
<el-input v-model="orderForm1.custPhone" autocomplete="off" :style="{width: formEleWidth}"></el-input>
</el-form-item>
<el-form-item label="地址" :label-width="formLabelWidth">
<el-input v-model="orderForm1.custAddr" autocomplete="off" :style=" {width: formEleWidth}"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible1 = false">取 消</el-button>
<el-button type="primary" @click="save1()">确 定</el-button>
</div>
</el-dialog>
2.4data功能区
data: function() {
data: function() {
// var checkAmount = (rule, value, callback) => {
// if (!value) {
// return callback(new Error('请输入金额'));
// }
// if (isNaN(value)) {
// return callback(new Error("金额必须为数字"));
// }
// return callback();
// }
return {
ts: new Date().getTime(),
orderDesc: '',
orders: [],
dialogFormVisible: false,
dialogFormVisible1: false,
formLabelWidth: '40px',
formEleWidth: '400px',
orderForm: {
orderDesc: '',
amount: '',
custName: null,
custPhone: '',
custAddr: ''
},
orderForm1: {
orderDesc: '',
amount: '',
custName: null,
custPhone: '',
custAddr: ''
},
// rules: {
// orderDesc: [{
// required: true,
// message: '请输入描述',
// trigger: 'blur'
// }],
// amount: [{
// required: true,
// validator: checkAmount,
// trigger: 'blur'
// }]
// },
// stuForm: {
// oderDesc: '',
// amount: ''
// }
};
},
2.5methods功能区
methods: {
//查询
quy: function() {
let url = this.axios.urls.ORDERMSG_REQ;
this.axios.get(url, {
params: {
orderDesc: this.orderDesc
}
}).then(resp => {
this.orders = resp.data.data
}).cache(error => {})
},
//增加
add: function() {
this.dialogFormVisible = true;
},
save: function() {
let url = this.axios.urls.ORDERMSG_ADD;
// this.$refs['orderForm'].validate(valid => {
// if (valid) {
this.axios.post(url, this.orderForm).then(resp => {
if (resp.data.code == 1) {
this.$message({
message: resp.data.msg,
type: 'success'
});
this.dialogFormVisible = false;
this.quy();
} else {
this.$message({
message: resp.data.msg,
type: 'error'
});
this.dialogFormVisible = false;
}
}).catch(error => {
})
// }
// })
},
//修改
Edit: function(row) {
this.dialogFormVisible1 = true;
this.orderForm1 = row;
},
save1: function() {
let url = this.axios.urls.ORDERMSG_UPD;
this.axios.post(url, this.orderForm1).then(resp => {
if (resp.data.code == 1) {
this.$message({
message: resp.data.msg,
type: 'success',
});
this.dialogFormVisible1 = false;
this.quy();
} else {
this.$message({
message: resp.data.msg,
type: 'error'
});
this.dialogFormVisible1 = false;
}
}).catch(error => {
})
},
// 删除
Del: function(row) {
let url = this.axios.urls.ORDERMSG_DEL + "?id=" + row.id;
this.axios.delete(url).then(resp => {
if (resp.data.code == 1) {
this.$message({
message: resp.data.msg,
type: 'success'
});
this.quy();
}
})
}
}