Mybatis映射文件SQL讲解
1、最简单的SQL语句
<!-- id的值必须与dao层的方法名相同才能实现dao层调用该条sql。resultType 返回类型是一个实体类,也就是查询出的表的数据赋值给对应的表的实体类。因为没有向SQL中传入参数所 以不用parameterType="Integer"(传入类型)-->
<selectid="SELECT_ALL"resultType="对应实体类的路径">
select * from 表名
</select>
2、带传入参数的SQL
<!-- 条件查询数据量 传入的参数类型parameterType="String" 为String类型 ,参数用#{参数名}代替 -->
<selectid="getCON"parameterType="String" resultType="Integer">
SELECT NVL(COUNT(*),0) FROM 表名 WHERE 字段名 LIKE CONCAT(CONCAT('%',#{字段对应的参数名}),'%')
</select>
对应的dao层的方法也是需要带参数的
int getCON(int 参数名) |
如果查询的不是数量的SQL而是查询表中的数据,那么resultType="对应的实体类路径"
dao层的方法则是List<实体类名> getCon(String 参数名) 参数类型视情况而定,不一定是String类型 |
3、同种类型对应多个参数的情况
<!-- 传入的单数类型是Integer类型的一个集合#{0} 表示传入的第一个参数,依次类推-->
<selectid="selPage"parameterType="Integer"resultType="对应实体类的路径">
SELECT * FROM (SELECTh.* ,ROWNUM RN FROM 表名 h) WHERE RN>= #{0} and #{1}>= RN
</select>
dao层方法
public List<实体类名> selPage(int 参数1,int 参数2);//参数1和2的名字叫什么没有关系,只要类型正确就行mybatis.xml中会用#{0}表示第一个参数值,#{1}表示第二个,依次类推。 |
4、不同类型,多个参数
<!-- 将参数装到map中,在SQL中取key就等与传入的value值,参数的名字一定要与实现方法中map对象中赋予的key相同-->
拓展:>=代表>=因为在mybatis中>号是特殊字符所以需要进行转义,同样<=表示<=
<selectid="get_Select"parameterType="map"resultType="对应的实体类路径">
SELECT * FROM (SELECT h.* ,ROWNUM RN FROM 表名 h where CPH LIKE CONCAT(CONCAT('%',#{参数1}),'%')) WHERE RN>= #{参数2} and RN<=#{参数3}
</select>
dao层方法
public List<实体类名> get_Select(Map<String,Object> map);//实现方法中对map对象进行赋值 |
5、mybatis中的sql判断(SQL语句同4)
<selectid="get_Select"parameterType="map"resultType="对应的实体类路径">
SELECT * FROM (SELECT h.* ,ROWNUM RN FROM 表名 h where CPH LIKE CONCAT(CONCAT('%',#{参数1}),'%'))
<iftest="判断条件,判断的参数是同map中取的key值,或者其他类型的参数值">
WHERE RN>= #{参数2} and RN<=#{参数3}
</if>
</select>
6、mybatis创建表
map为传入的参数,第一个key是表名,第二个key是list类型里面存的是表的字段名字
<update id="CreateTable" parameterType="map">
create table ${tableName} (
<foreach collection="createTable" item="item" index="index" separator=",">
${item} VARCHAR2(500)
</foreach>
)
</update>
特别说明: 1、${}的方式来调用参数,用#{}无法获取参数值,原因现在还没有搞明白。
2、collection="createTable"中的createTable是map中的key,对应的value是字段值的list集合。
3、separator=","是在每个元素之间添加逗号