通过Mapper.xml和Mapper.java来实现mybatis 关键:Mapper.xml + Mapper.java +Sqlsession.getMapper()
1.Mapper.xml
<!-- 查询列表查询 -->
<!-- parameterType传入包装对象(包装了查询对象) -->
<select id="findItemList" parameterType="cn.itcast.ssm.po.ItemQueryVo"
resultType="cn.itcast.ssm.po.ItemCustomer">
SELECT * FROM items
<where>
items.name LIKE '%笔记本%'
</where>
</select>
首先:parameterType 指的是where的部分的来源,
在映射文件中通过parameterType指定输入 参数的类型。
它来源于ItemQueryVo(包装了查询条件)
package cn.itcast.ssm.po;
/**
*
* <p>Title: ItemQueryVo.java</p>
* <p>Description: 商品包装对象 </p>
* @author xitw
* @date DateTime 2018年5月11日 下午5:48:19
* @version 1.0
*/
public class ItemQueryVo {
//商品信息
private Items items;
//为了系统的可扩展性,对原始的po进行扩展(一般自动生成的po类不动,方便表有变动的时候还是自动生成就行)
private ItemCustomer itemCustomer;
public Items getItems() {
return items;
}
public void setItems(Items items) {
this.items = items;
}
public ItemCustomer getItemCustomer() {
return itemCustomer;
}
public void setItemCustomer(ItemCustomer itemCustomer) {
this.itemCustomer = itemCustomer;
}
}
package cn.itcast.ssm.po;
/**
*
* <p>Title: ItemCustomer.java</p>
* <p>Description: 商品信息的扩展类 </p>
* @author xitw
* @date DateTime 2018年5月11日 下午5:48:48
* @version 1.0
*/
/**
*
* <p>Title: ItemCustomer.java</p>
* <p>Description: </p>
* @author xitw
* @date DateTime 2018年5月11日 下午5:59:06
* @version 1.0
*/
public class ItemCustomer extends Items{
//添加商品信息扩展属性
}
其次是resultType:这个就是select * 中的* 显示的部分 这个来自cn.itcast.ssm.po.ItemCustomer 也就是商品的扩展信息,继承与Items表的类
在映射文件中通过resultType指定输出结果的类型。
处理完这两个来源之后:
我们看一下这个sql:SELECT * FROM items where items.name like "%笔记本%"
为了让这个查询能够复用,所以需要sql片段:
<!-- 定义商品查询的sql片段,就是商品查询 -->
<sql id="query_item_where">
<!-- 使用动态sql,通过if判断,满足条件进行sql拼接 -->
<if test="itemCustomer!=null">
<if test="itemCustomer.name!=null and itemCustomer.name=''">
items.name LIKE '%${itemCustomer.name}%'
</if>
</if>
</sql>
用if语句来判断,并且把条件参数化 这个参数来自于扩展属性类(因为它是能取得原本表的类+扩展属性的所有信息的)
itemCustomer.name 就是指表items的name字段
最后如下:用include来引用sql片段
<!-- 查询列表查询 -->
<!-- parameterType传入包装对象(包装了查询对象) -->
<select id="findItemList" parameterType="cn.itcast.ssm.po.ItemQueryVo"
resultType="cn.itcast.ssm.po.ItemCustomer">
SELECT * FROM items
<where>
<include refid="query_item_where"></include>
</where>
</select>
2.Mapper.java
相当于dao (数据访问层)
创建Mapper.java。同样通过ID找User。具体实现如下
对应xml一样名字:我的项目是用的:ItemsMapperCustomer.java 接口类:传入parameterType 返回resultType
public interface ItemsMapperCustomer {
public List<ItemCustomer> findItemList(ItemQueryVo itemQueryVo) throws Exception;
}