MyBatis SQL应用

xiaoxiao2021-02-28  53

1.数据库使用xml文件中防止SQL注入,涉及模糊查询的语句

<if test="objectName!=null and objectName!=''"> AND OBJECT_NAME like concat(concat('%',#{objectName}),'%') </if> 2.

map和List,array相比,map是用K,V存储的,在foreach中,使用map时,index属性值为map中的Key的值。

因为map中的Key不同于list,array中的索引,所以会有更丰富的用法。

批量插入

<insert id="ins_string_string"> insert into string_string (key, value) values <foreach item="item" index="key" collection="map" open="" separator="," close="">(#{key}, #{item})</foreach> </insert>

3.select的例子

<select id="sel_key_cols" resultType="int"> select count(*) from key_cols where <foreach item="item" index="key" collection="map" open="" separator="AND" close="">${key} = #{item}</foreach> </select> 可以看到这里用key=value来作为查询条件,对于动态的查询,这种处理方式可以借鉴。 一定要注意到$和#的区别 ,$的参数直接输出,#的参数会被替换为?,然后传入参数值执行。

DEBUG [main] - ==> Preparing: select count(*) from key_cols where col_a = ? AND col_b = ? DEBUG [main] - ==> Parameters: 22(Integer), 222(Integer) DEBUG [main] - <== Total: 1 4.foreach 循环LIST

item:循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details。 具体说明:在list和数组中是其中的对象,在map中是value。 该参数为必选。

<select id="countByUserList" resultType="_int" parameterType="list"> select count(*) from users <where> id in <foreach item="item" collection="list" separator="," open="(" close=")" index=""> #{item.id, jdbcType=NUMERIC} </foreach> </where> </select> 注:select count(*) from users WHERE id in ( ? , ? ) 

5.foreach 循环数组

JAVA传入参数

public void testQuery() { ColInfoDao dao=(ColInfoDao)ctx.getBean("colInfoDao"); Map map = new HashMap(); map.put("userId", "tom"); map.put("password", "123"); String[] a = { "20000001", "20000002" }; map.put("classIds", Arrays.asList(a)); Object password = dao.query(map); System.out.println("password:" + password); Assert.assertEquals("123", password); }

XML文件使用

<select id="queryPasswordByUserId" parameterClass="java.util.Map" resultClass="java.lang.String"> <![CDATA[ select PASSWORD as password from T_S_P_USER ]]> <dynamic prepend="where"> <isNotEmpty prepend="AND" property="userId"> USER_ID=#userId# </isNotEmpty> <isNotEmpty prepend="AND" property="password"> PASSWORD=#password# </isNotEmpty> <isNotEmpty prepend="AND" property="classIds"> <iterate property="classIds" open="(" conjunction="OR" close=")"> CLASS_ID = #classIds[]# </iterate> </isNotEmpty> </dynamic> </select>

转载请注明原文地址: https://www.6miu.com/read-56857.html

最新回复(0)