Mybatis之使用总结

文章目录

  1. 1. Mybatis之使用总结
    1. 1.1. 多表连接查询
    2. 1.2. 表与实体类中的字段不对应
    3. 1.3. Mapper方法中参数问题
    4. 1.4. 批量删除

Mybatis之使用总结

多表连接查询

  • 如果需要使用多表连接查询,使用resultMap对应表与实体类的对应关系太麻烦,我们可以定义一个值对象,其中封装了多表连接查询返回的字段,我们直接使用值对象接收返回的结果即可
  • 比如我们在商城网站上的显示购物车的模块,使用的CartVo
代码语言:javascript
复制
/**
 * 购物车的值对象
 * 用于接收多表连接查询的结果
 * @author chenjiabing
 */
public class CartVo implements Serializable {
	private static final long serialVersionUID = 8904622535687816912L;
	private Integer id;    //主键 购物车表中的主键
	private String goodsId;  //商品的id
	private Integer uid;  //用户id
	private String image;  //图片地址
	private String title;  //商品标题
	private Integer price; //商品价格
	private Integer num;  //加入购物车的商品数量
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getGoodsId() {
		return goodsId;
	}
	public void setGoodsId(String goodsId) {
		this.goodsId = goodsId;
	}
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
	public String getImage() {
		return image;
	}
	public void setImage(String image) {
		this.image = image;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Integer getPrice() {
		return price;
	}
	public void setPrice(Integer price) {
		this.price = price;
	}
	public Integer getNum() {
		return num;
	}
	public void setNum(Integer num) {
		this.num = num;
	}
	@Override
	public String toString() {
		return "CartVo [id=" + id + ", goodsId=" + goodsId + ", uid=" + uid
				+ ", image=" + image + ", title=" + title + ", price=" + price
				+ ", num=" + num + "]";
	}

}

表与实体类中的字段不对应

  • 一般在数据库中定义字段的格式是使用下划线_连接的,但是在java中定义是使用驼峰式的命名风格,因此难免会出现字段不一样的情况,我们一般可以使用resultMap实现其的对应关系,或者在查询的时候,使用别名即可

Mapper方法中参数问题

  • 默认的mapper接口中的方法只能有一个参数,但是我们可以使用@Param("")这个注解来新增加参数

批量删除

  • 批量删除mapper接口中方法传入的是数组,必须使用@Param()标记,否则将不能识别
  • 使用的sql语句: delete from 表名 where id in (.....)
  • 我们可以在<delete>节点中使用<forEach>标签来遍历传入的数组
代码语言:javascript
复制
<!--
void deleteCartById(Integer[] ids);
批量删除
-->
<delete id="deleteCartById" parameterType="java.lang.Integer">
delete from t_cart
where
id in
<!--
遍历数组ids
collection:需要遍历的数组
item: 数组中的每一个值
open : 开始的内容
close: 结束的内容
separator :每个元素的分割符
最后拼接的就是 (id,id,id,id,id)
-->
<foreach collection="ids" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>