一、删除操作
下面是我的dao层,这里插入的是字符数组
在对应的mapper.xml文件中
写入如下语句
其中parameterType是你传入参数的类型,下面的foreach语句是循环输出数组中的数据,主要是collection,因为传入的是数组,所以用的是array,如果用的是传入参数list,parameterType就要写出下面这样,
parameterType="java.util.List"
collection改为list
二、批量插入操作
这里以Mysql数据库为例,这里先给几个我用到的类,以及定义属性情况
//订单表
@Data
public class Order {
private String oid; // 主键
private String ordertime;// 下单时间
private double total;// 总计金额
private int status;// 订单状态:1.未付款,2.已付款未发货,3.已发货未确认收货,4.确认收货,交易完成,5.已取消(只要未付款能取消),6.完成全部评价,查看评价;
private String address;// 收货地址
private User owner;// 订单所有者
private List<OrderItem> orderItemList; // 所有订单
}
//订单细节表
@Data
public class OrderItem {
private String orderItemId;//主键
private int quantity; //数量
private double subtotal; //小计
private Book book; //关联图书
private int ostatus=0;//该图书是否被评价,0.没有被评价,1.被评价了
private Order order; //关联订单
}
//图书类
@Data
public class Book {
private String bid; //主键
private String bname; //书名
private String author; //作者
private double discount; //折扣
private double price; //市场价
private double currPrice; //商城价
private int viewCount;//浏览次数
private int sellCount;//销售次数
private String press; //出版社
private int pageNum; //页数
private int wordNum; //字数
private String printtime;//出版时间
private String cid;
private Category category; //所属分类(cid是关联对象的属性)
private String image_w; //封面大图路径
private String image_b; //封面小图路径
}
首先我插入的是OrderItem的数据链表,也就是订单详细信息链表,该表有两个关联类,Book和Order,可以用下面方法解决数据库批量插入操作
@Transactional注解代表事物,意思是让该方法传递给事物管理,订单下有个订单详细信息的List
/**
* 创建购物车
*/
@Transactional
public void createOrder(Order order) {
//创建购物车
orderDao.createOrder(order,order.getOwner().getUid());
//批量插入购物车详细数据
List<OrderItem> orderItems=order.getOrderItemList();
orderDao.addOrderItems(orderItems,order.getOid());
}
这里是Dao层定义的两个方法,注意第二个方法,链表最好用@Param注解定义好,方便后面<foreach>循环
这里着重展示第二个方法在mapper.xml文件中如何书写
<!--添加购物车详细信息-->
<insert id="addOrderItems">
insert into b_orderitem (orderItemId,quantity,subtotal,bid,bname,currPrice,image_b,oid,ostatus) values
<foreach collection="orderItems" item="orderItem" separator=",">
(
#{orderItem.orderItemId,jdbcType=VARCHAR},
#{orderItem.quantity,jdbcType=INTEGER},
#{orderItem.subtotal,jdbcType=DECIMAL},
#{orderItem.book.bid,jdbcType=VARCHAR},
#{orderItem.book.bname,jdbcType=VARCHAR},
#{orderItem.book.currPrice,jdbcType=DECIMAL},
#{orderItem.book.image_b,jdbcType=VARCHAR},
#{oid,jdbcType=VARCHAR},
#{orderItem.ostatus,jdbcType=INTEGER}
)
</foreach>
</insert>
这里有几个注意的点,<foreach>标签中的collection属性就不是上面的array数组了,而是你用@Param注解定义好的属性名,item代表每次循环用的属性名
注意这么一段属性#{orderItem.book.bid,jdbcType=VARCHAR},这里的book,是OrderItem类的引用类型Book的属性名,当你写这个标签是,Mybatis会自动使用orderItem.getBook().getBid()方法,自动帮你获取值,后面的jdbcType请最好写上,防止出问题,等于号后面注意必须全大写,这也是Mybatis规范之一。养成良好的规范,有助于我们的编写的代码优美。
本次分享就到这里啦,谢谢大家观看,也希望能相互学习,在成长道路上,互相勉励。
如果感觉不错的话,请点个赞哦~~~~~~~~~
参考链接: