spring+springmvc+mybaits
实现功能
级联新增 form表单 用户信息、订单信息 同时保存到用户表和订单表
级联删除 删除用户信息 如果存在订单,级联删除订单
在同一个项目中
级联增加
就是先增加账户信息再增加账单信息,但是在一个功能中实现
saveArAccountOrder.html
<body>
<form action="/ordersController/saveArAccountOrder" method="post">
账户:<input type="text" name="username"><br>
金额:<input type="text" name="money"><br>
账单名称:<input type="text" name="oName"><br>
价钱:<input type="text" name="oMoney"><br>
<input type="submit" value="保存">
</form>
</body>
在OrderController中添加方法如下
//级联保存
@RequestMapping("/saveArAccountOrder")
public String saveArAccountOrder(ArAccount arAccount, Orders orders){
int i = ordersService.saveArAccountOrders(arAccount,orders);
if (i > 0){
return "redirect:/static/accountToOrder.html";
}
return "redirect:/static/saveArAccountOrder.html";
}
service服务层
在OrdersService接口中定义方法
int saveArAccountOrders(ArAccount arAccount,Orders orders);
OrdersServiceImpl实现类
@Autowired
private ArAccountMapper arAccountMapper;
@Override
@Transactional
public int saveArAccountOrders(ArAccount arAccount,Orders orders) {
//先保存账户信息然后生成主键
int j = 0;
int i = arAccountMapper.saveArAccount(arAccount);
if(i>0){
orders.setaId(arAccount.getId());
//orders.setoTime(date);
j = ordersMapper.saveOrders(orders);
if(j == 0){//模拟异常
// System.out.println(1/0);
throw new MyException("级联保存用户订单业务失败");
}
}
return j;
}
在utils包中自定义异常MyException
public class MyException extends RuntimeException {
private String messages;
public MyException(String messages) {
this.messages = messages;
}
public MyException() {
}
//toString setter getter
}
mapper包中
ArAccountMapper中
在ArAccountMapper类中
//保存账户信息
int saveArAccount(ArAccount arAccount);
在ArAccountMapper.xml中增加
<!--保存用户信息-->
<insert id="saveArAccount" useGeneratedKeys="true" keyProperty="id">
insert into ar_account(username,money) values (#{username},#{money})
</insert>
OrdersMapper中
在OrdersMapper类中增加方法
//保存账单
int saveOrders(Orders orders);
在OrdersMapper.xml中
<!--保存账单-->
<insert id="saveOrders" parameterType="Orders">
insert into orders(o_name,o_money,a_id) values (#{oName},#{oMoney},#{aId})
</insert>
在浏览器地址栏中访问saveArAccounOrder.html
输入信息保存也可以查看数据库可以看到两个表都多了一条数据
级联删除
在accountToOrder.html中加入
最主要的就是拼接上超链接
$.get("/ordersController/findArAccountToOrder",function (data) {
$.each(data,function (index,obj) {
var tr = "<tr><td>"+obj.id+"</td><td>"+obj.username+"</td><td>"+obj.money+"</td>" +
"<td><a href='/ordersController/deleteCount?id="+obj.id+"'>删除</a></td>"+
先看看效果访问页面
mapper
账户mapper
ArAccountMapper.java加入如下方法
//删除账户信息
int deletcCount(Integer id);
ArAccountMapper.xml中
<!--删除用户-->
<delete id="deletcCount">
delete from ar_account where id = #{id}
</delete>
订单mapper
OrdersMapper.java加入如下方法
//删除账单
int deleteOrders(Integer id);
OrdersMapper.xml中
<!--删除账单-->
<delete id="deleteOrders">
delete from orders where a_id = #{aId}
</delete>
service层
OrdersService接口中
int deleteCount(Integer id);
OrdersServiceImpl实现类中
@Override
public int deleteCount(Integer id) {
int j = 0;
int i = ordersMapper.deleteOrders(id);
if(i > 0){
j = arAccountMapper.deletcCount(id);
if(j == 0){
throw new MyException("级联删除失败");
}
}
return j;
}
controller层
OrdersController.java中加入
//级联删除删除用户
@RequestMapping("/deleteCount")
public String deleteCount(Integer id){
int i = ordersService.deleteCount(id);
return "redirect:/static/accountToOrder.html";
}
删除张三的信息可以看到删除了数据库中也没有了