参考文章:https://blog.csdn.net/hellozpc/article/details/80878563
在这里就不介绍myBatis是干什么的了。自行百度查询。这里只告诉如何使用。
这里粘贴项目中用到的实体类
set/get方法省略
public class Product {
// 主键ID
private Long productId;
// 商品名
private String productName;
// 商品简介
private String productDesc;
// 简略图
private String imgAddr;
// 原价
private String normalPrice;
// 现价(推广价格)
private String promotionPrice;
// 权重,越大越排前显示
private Integer priority;
// 商品积分
private Integer point;
// 创建时间
private Date createTime;
// 最近一次的更新时间
private Date lastEditTime;
// 0.下架 1.在前端展示系统展示
private Integer enableStatus;
// 图片详情图列表,跟商品是多对一的关系
private List<ProductImg> productImgList;
// 商品类别,一件商品仅属于一个商品类别
private ProductCategory productCategory;
// 店铺实体类,标明商品属于哪个店铺
private Shop shop;
}
1.1 select
select中的几个属性说明:
id属性:当前名称空间下的statement的唯一标识。必须。要求id和mapper接口中的方法的名字一致。
resultType:将结果集映射为java的对象类型。必须(和 resultMap 二选一)
parameterType:传入参数类型。可以省略
接口方法定义
/**
* 查询商品列表并分页,可输入的条件有: 商品名(模糊),商品状态,店铺Id,商品类别
* @param productCondition
* @param rowIndex
* @param pageSize
* @return
*/
List<Product> queryProductList(@Param("productCondition")Product productCondition,@Param("rowIndex")int rowIndex,
@Param("pageSize")int pageSize);
xml文档编写
<resultMap id="productMap" type="com.tzf.o2o.entity.Product">
<id column="product_id" property="productId" />
<result column="product_name" property="productName" />
<result column="product_desc" property="productDesc" />
<result column="img_addr" property="imgAddr" />
<result column="normal_price" property="normalPrice" />
<result column="promotion_price" property="promotionPrice" />
<result column="priority" property="priority" />
<result column="create_time" property="createTime" />
<result column="last_edit_time" property="lastEditTime" />
<result column="enable_status" property="enableStatus" />
<result column="point" property="point" />
<association property="productCategory" column="product_category_id"
javaType="com.tzf.o2o.entity.ProductCategory">
<id column="product_category_id" property="productCategoryId" />
<result column="product_category_name" property="productCategoryName" />
</association>
<association property="shop" column="shop_id"
javaType="com.tzf.o2o.entity.Shop">
<id column="shop_id" property="shopId" />
<result column="owner_id" property="ownerId" />
<result column="shop_name" property="shopName" />
</association>
<collection property="productImgList" column="product_id"
ofType="com.tzf.o2o.entity.ProductImg">
<id column="product_img_id" property="productImgId" />
<result column="detail_img" property="imgAddr" />
<result column="img_desc" property="imgDesc" />
<result column="priority" property="priority" />
<result column="create_time" property="createTime" />
<result column="product_id" property="productId" />
</collection>
</resultMap>
<select id="queryProductList" resultType="com.tzf.o2o.entity.Product">
select
product_id,
product_name,
product_desc,
img_addr,
normal_price,
promotion_price,
priority,
create_time,
last_edit_time,
enable_status,
point,
product_category_id,
shop_id
FROM
tb_product
<where>
<if test="productCondition.shop!=null and productCondition.shop.shopId != null">
and shop_id = #{productCondition.shop.shopId}
</if>
<if test="productCondition.productCategory!=null
and productCondition.productCategory.productCategoryId!=null">
and product_category_id = #{productCondition.productCategory.productCategoryId}
</if>
<!-- 写like语句的时候 一般都会写成 like '% %' 在mybatis里面写就是应该是 like '%${name} %' 而不是
'%#{name} %' ${name} 是不带单引号的,而#{name} 是带单引号的 -->
<if test="productCondition.productName!=null">
and product_name like '%${productCondition.productName}%'
</if>
<if test="productCondition.enableStatus!=null">
and enable_status = #{productCondition.enableStatus}
</if>
</where>
ORDER BY
priority DESC
limit #{rowIndex},#{pageSize};
</select>
1.2 insert
insert 的几个属性说明:
id:唯一标识,随便写,在同一个命名空间下保持唯一,使用动态代理之后要求和方法名保持一致
parameterType:参数的类型,使用动态代理之后和方法的参数类型一致
useGeneratedKeys:开启主键回写
keyColumn:指定数据库的主键
keyProperty:主键对应的pojo属性名
接口方法定义
/**
* 插入商品
* @param product
* @return
*/
int insertProduct(Product product);
xml文档编写
<insert id="insertProduct" parameterType="com.tzf.o2o.entity.Product"
useGeneratedKeys="true" keyProperty="productId" keyColumn="product_id">
INSERT INTO
tb_product(product_name,product_desc,img_addr,
normal_price,promotion_price,priority,create_time,
last_edit_time,enable_status,point,product_category_id,
shop_id)
VALUES
(#{productName},#{productDesc},#{imgAddr},
#{normalPrice},#{promotionPrice},#{priority},#{createTime},
#{lastEditTime},#{enableStatus},#{point},#{productCategory.productCategoryId},
#{shop.shopId})
</insert>
1.3 update
delete 的几个属性说明:
id属性:当前名称空间下的statement的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
接口方法定义
/**
* 更新商品信息
* @param product
* @return
*/
int updateProduct(Product product);
xml文档编写
<update id="updateProduct" parameterType="com.tzf.o2o.entity.Product"
keyProperty="product_id" useGeneratedKeys="true">
update tb_product
<set>
<if test="productName != null">product_name=#{productName},</if>
<if test="productDesc != null">product_desc=#{productDesc},</if>
<if test="imgAddr != null">img_addr=#{imgAddr},</if>
<if test="normalPrice != null">normal_price=#{normalPrice},</if>
<if test="promotionPrice != null">promotion_price=#{promotionPrice},</if>
<if test="priority != null">priority=#{priority},</if>
<if test="lastEditTime != null">last_edit_time=#{lastEditTime},</if>
<if test="enableStatus != null">enable_status=#{enableStatus},</if>
<if test="point != null">point=#{point},</if>
<if
test="productCategory != null
and productCategory.productCategoryId != null">
product_category_id=#{productCategory.productCategoryId}
</if>
</set>
WHERE product_id = #{productId}
AND shop_id=#{shop.shopId}
</update>
1.4 delete
delete 的几个属性说明:
id属性:当前名称空间下的statement的唯一标识(必须属性);
parameterType:传入的参数类型,可以省略。
接口方法定义(其他接口展示)
/**
* 删除指定商品类别
*
* @param productCategoryId
* @param shopId
* @return effectedNum
*/
int deleteProductCategory(@Param("productCategoryId") long productCategoryId, @Param("shopId") long shopId);
xml文档编写
<delete id="deleteProductCategory">
delete from
tb_product_category
where product_category_id = #{productCategoryId}
and shop_id = #{shopId}
</delete>
网友评论