目录
[#{} 和 ${}](#{} 和 ${})
[choose when](#choose when)
[association 一对一关联查询](#association 一对一关联查询)
通用
#{} 和 ${}
在MyBatis 的xml映射配置文件中,动态传参有#{}和${}两种方式
1)#{}:动态解析 -> 预编译 -> 执行
2)${}:动态解析 -> 编译 -> 执行
1)变量替换后,#{} 对应的变量自动加上单引号 ''
2)变量替换后,${} 对应的变量不会加上单引号 ''
1)#{} 能防止sql 注入
2)${} 不能防止sql 注入
使用方式相同
(1)public User getUser(String username,String password);
<select id="getUser" resultType="com.User">select * from t user where username=#{arg0} and password=#{arg1}>
</select>
(2)使用自定义参数名,前提: 在映射器接口方法的参数前加注解@Param("")
public User getUser(@Param("username") String username,@Param("password") String password);
或 public User getUser(User user);
<select id="getUser" resultType="com.User">select * from t user where username=#{username} and password=#{password} </select>
返回类型
1.实体类: 将查询结果封装为Java对象,通常是自定义的实体类
2.Map: 将查询结果封装为Map对象
3.List: 将查询结果封装为List对象。
4.Array: 将查询结果封装为数组对象
5.ResultMap: 将查询结果封装为ResultMap对象
6.自定义类型外理器:根据自定义类型的类或数据类型外理查询结果,将查询结果封装为自定义类型的对象
7.Void: 不返回任何结果。
8.Cursor: 返回结果集的游标,可以逐行读取结果集
9.InputStream: 返回结果集的二进制流,适合处理较大的结果集
查询
sql处理
in数组处理
<if test="bankids !=null and bankids.size()>0" >
and (t.BANKID IN
<foreach item="item" collection="bankids" open="(" close=")" index="index">
<if test="index != 0">
<choose>
<when test="index % 1000 == 999">) OR t.BANKID IN(</when>
<otherwise>,</otherwise>
</choose>
</if>
#{item}
</foreach>)
</if>
if语句
<if test="startdate !=null">
AND t.TRANDATE >= to_date(#{startdate},'yyyy-MM-dd HH24:mi:ss')
</if>
choose when
<choose>
<when test="index % 1000 == 999">) OR t.FILLINFOSTATE IN(</when>
<otherwise>,</otherwise>
</choose>
association 一对一关联查询
<association property="customer" javaType="Customer"
select="com.xu.mapper.CustomerMapper.selectById"
column="{id:customer_id}">
</association>
日期格式
and t.trandate <![CDATA[>=]]> to_date(#{startDate},'yyyy-MM-dd')