mybatis的一些用法
1.XXXMapper.xml中:
namespace标识mapper接口的完整路径。
resultMap标签表示手动映射数据库字段和实体类属性,resultMap中的id唯一标识该resultMap,type表示实体类的完整路径。
insert标签:id表示接口中的方法名,parameterType表示sql语句中的参数类型,对应实体类的完整路径。
foreach标签:collection表示接口方法传入的参数,如果使用了@param去重新表示参数名,那就用注解后的名字。
if标签:它中的test属性的值是判断,true就执行它的条件语句。
order by默认增序排列。
Group by的select的字段要满足出现在聚合函数中或者group by后。
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据
参数parameterType:代表传入sql语句中的参数的类型
返回类型用resultType或resultMap表示.
resultType:自动映射。前提:实体类中的属性名要与数据库表中的字段名对应。
resultMap:手动映射-当实体类中的属性名与数据库表中的字段名不一致时使用。
<!-- type:为实体类的类名
id的值要与写的sql语句中resultMap的值一致(标识这个唯一的resultMap).
colume:数据库中表的字段名称
property:实体类中属性的名称
--> <resultMap type="Orders" id="orders"> <result column="user_id" property="userId"/> </resultMap>
2.#{参数}:参数名称可以任意取
注意以下区别:
#{}: select * from user where id = ?; 占位符时用#,此时?=='参数'
${}: select * form user where username like '%${参数}%'; 字符串拼接时用$
使用 select * from user where username like "%"#{value}"%"防止sql注入
${}中的参数名称必须是value.
#{}中的参数可以是类型可以是value,如#{item.name,jdbcType = String}
3.<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.zrxjuly.mybatis.pojo.User">
<!-- 要想返回给操作层主键值,则加selectKey.
selectKey表示返回的主键,
keyProperty:主键的属性名称,
resultType:返回的类型,
order:若主键类型为Integer类型,自增长,此时order用AFTER;
若主键为char/varchar类型,order用BEFORE -->
<selectKey keyProperty="id" resultType="Integer" order="AFTER">
select LAST_INSERT_ID() </selectKey>
insert into user (username,birthday,address,sex) values (#{username},#{birthday},#{address},#{sex})
</insert>
4.Mapper接口开发需要遵循以下规范:
1)、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2)、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3)、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4)、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
5.标签:
1).<where>标签可以去掉where语句后的第一个and。
2).提取公共sql部分,可重用
<!-- 提取出来的sql片段,公共部分, -->
<sql id="selectA">
select * from user
</sql>
<select id="selectUser" parameterType="User" resultType="User">
<include refid="selectA" /><!-- 此处引用了select * from user -->
</select>
6.foreach标签
如果接口传过来的参数为Integer[]类型的,则collection="array",此时parameterType属性去掉 如果接口传过来的参数为List<Integer>类型的,则collection="list",此时parameterType属性去掉
collection:maper接口传递过来的参数,如果接口参数列表有@param ,那么collection就是@param注解的参数名。
item:循环遍历的值
open:遍历开始
close:遍历结束
separator:分隔符
批量删除用户,当传入的参数类型为List<类名>这样的集合时,parameterType的值为类名。