1、xml映射文件中标签含义:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="admin.modules.sys.mapper.SysUserMapper">
<!-- 根据用户名查询 -->
<select id="getUserByName" resultType="admin.modules.sys.entity.SysUser">
select * from sys_user where username = #{username} and del_flag = 0
</select>
</mapper>
<select>: 映射查询语句使用的标签。
id:命名空间中的唯一标识符,可用来代表这条语句。
select 标签中的select * from sys_user where id= #{id}是查询语句。
#{username} : MyBatis SQL 中使用预编译参数的一种方式,大括号中的username是传入的参数名。
resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,而resultType中的内容就是pojo在本项目中的位置。
因此对于单表查询的话用resultType是最合适的。但是,如果在写pojo时,不想用数据库表中定义的字段名称,也是可以使用resultMap进行处理对应的。多表连接查询时,若是一对一的连接查询,那么需要新建一个pojo,pojo中包括两个表中需要查询出的所有的字段,这个地方的处理方式通常为创建一个继承一个表字段的pojo,再在里面添加另外一个表内需要查询出的字段即可。若是一对多查询时,若是使用内连接查询,则很可能出现查询出的字段有重复。使用双重for循环嵌套处理即可。
2、有关if test以及==的用法
Mybatis中,通常都要在mapper.xml中写复杂的sql语句,结合页面的查询筛选条件,需要在sql语句中加入<if test=""></if>
等的判断
<select id="getUserByDepId" resultType="admin.modules.sys.entity.SysUser"> select * from sys_user where del_flag = 0 and id in (select user_id from sys_user_depart where dep_id=#{departId}) <if test="username!=null and username!=''"> and username = #{username} </if> <if test="username=='1'"> and username = #{username} </if> </select>
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束。
<update id="deleteBathRolePermissionRelation"> delete from sys_role_permission where role_id in <foreach item="id" collection="roleIdArray" open="(" separator="," close=")"> #{id} </foreach> </update>