MyBatis使用操作:
编写接口方法--> 编写SQL --> 执行方法
实体类属性名 和 数据库表列名 不一致,不能自动封装数据:
1)起别名:在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样(基本不用)
2)resultMap:定义<resultMap> 完成不一致的属性名和列名的映射
参数占位符:
1)#{}:执行SQL时,会将#{}占位符替换为?,将来自动设置参数值
2)${}:固定数值。会存在SQL注入问题
3)使用时机:
参数传递,都使用#{}
如果要对表名、列名进行动态设置,只能使用${}进行sql拼接
parameterType:
用于设置参数类型,该参数可以省略
SQL 语句中特殊字符处理:
转义字符
<![CDATA[ 内容 ]]>:(输CD提示补全)
SQL语句设置多个参数的三种方式:
1) 散装参数:使用@Param("SQL中的参数名称")xxx xxx (使用麻烦)
2) 实体类封装参数:SQL中的参数名 和 实体类属性名对应
3) map集合:SQL中的参数名 和 map集合的键的名称对应
动态SQL:
if:用于判断参数是否有值,使用test属性进行条件判断
存在的问题:第一个条件不需要逻辑运算符
解决方案:
1) 使用恒等式让所有条件格式都一样
2) <where> 标签替换 where 关键字
eg:
<select id="selectByCondition" resultMap="brandResultMap">
select *
from tb_brand
<where>
<if test="status != null">
and status = #{status}
</if>
<if test="companyName != null and companyName != ''">
and company_name like #{companyName}
</if>
<if test="brandName != null and brandName != ''">
and brand_name like #{brandName}
</if>
</where>
</select>