当前位置: 首页 > 工具软件 > Mapper > 使用案例 >

mybatis Mapper.xml和Mapper.java

吕钧
2023-12-01

  通过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;
}


 类似资料: