接上篇,对Mybatis的特点和映射管理介绍,本篇将详解介绍mapper.xml中的常用标签和它们各自的功能及使用方式
一、SQL语句标签:
insert into ordertable (order_id, cid, address,
create_date, orderitem_id)
values (#{orderId,jdbcType=VARCHAR}, #{cid,jdbcType=VARCHAR}, #{address,jdbcType=VARCHAR},
#{createDate,jdbcType=TIMESTAMP}, #{orderitemId,jdbcType=VARCHAR})
delete from ordertable
where order_id = #{orderId,jdbcType=VARCHAR}
update ordertable
set cid = #{cid,jdbcType=VARCHAR},
address = #{address,jdbcType=VARCHAR},
create_date = #{createDate,jdbcType=TIMESTAMP},
orderitem_id = #{orderitemId,jdbcType=VARCHAR}
where order_id = #{orderId,jdbcType=VARCHAR}
需要配置的属性:id="xxxx" >>> 表示此段sql执行语句的唯一标识,也是接口的方法名称【必须一致才能找到】
parameterType="" >>>表示该sql语句中需要传入的参数, 类型要与对应的接口方法的类型一致【可选】
resultMap=“ ”>>> 定义出参,调用已定义的
resultType=“ ”>>>定义出参,匹配普通java类型或自定义的pojo【出参类型若不指定,将为语句类型默认类型,如
p.s: 至于为何
传参和取值:mapper.xml 的灵活性还体现在SQL执行语句可以传参,参数类型通过parameterType= “” 定义
取值方式1:#{value jdbcType = valuetype}:jdbcType 表示该属性的数据类型在数据库中对应的类型,如 #{user jdbcType=varchar} 等价于 String username;
取值方式2:${value } : 这种方式不建议大量使用,可能会发送sql注入而导致安全性问题。一般该取值方式可用在非经常变化的值上,如orderby ${columnName};
二、sql片段标签
需要配置的属性:id="" >>>表示需要改sql语句片段的唯一标识
引用:通过
o.order_id,o.cid,o.address,o.create_date,o.orderitem_id,i.orderitem_id,i.product_id,i.count
需要配置的属性:
需要配置的参数:
需要维护的关系:所谓关系维护是值在主表查询时将其关联子表的结果也查询出来
1)一对一关系
Orderitem.java
package pojo;
public class Orderitem {
private String orderitemId;
private String productId;
private Integer count;
private Product product;
从上方代码段可以看出:Product 对象在 Orderitem 实体中以 product 属性存在
Orderitemmapper.xml
通过xml的配置可以看出,在resultMap映射管理器中,通过2)一对多关系的维护
【由于在一对多关系中,多的一放是以List形式存在,因此ofType的值取用Lsit> 的泛型对象类型】
OrderTable.java
public class OrderTable {
private String orderId;
private String cid;
private String address;
private Date createDate;
private String orderitemId;
private List orderitemList ;
}
OrderTableMapper.xml;
3.1)关联关系的维护可以根据实体类之间的实际情况进行嵌套维护
【
读者只用参考上方代码段的写法,实体关系仅为笔者举例没有必然的逻辑联系】
3.2)关于出现重复列名的处理:在实际操作过程中,查询到的结果可能会出现相同的列名,这样会对映射到实体属性带来影响甚至出现报错,那么对待这个问题可以通过对列取别名的方式处理
四:常用的动态语句标签:通过动态sql标签可以进行条件判断,条件遍历等操作从而满足结果的需要
update orderitem
product_id = #{productId,jdbcType=VARCHAR},
count = #{count,jdbcType=INTEGER},
where orderitem_id = #{orderitemId,jdbcType=VARCHAR}
【注:以上代码段转载自:http://blog.csdn.net/zenson_g/article/details/10137665】
属性:collection=“array” / collection = “list” ----->是数组类型,还是集合类型
item=“ productId ”------> 参数名
open="(" separator="," close=")" ------>开始符号,分隔符号,结束符号
index=“ ” ---->结束下标位置,不配置该参数时,默认为全部遍历
delete from product where product_Id in
#{productId,jdbcType = VARCHAR}