补充:
1.在开发中遇到数据表的字段和实体的属性名不匹配时的处理方法
a.查询的时候给查询条件取别名
例:
User selectUser(@Param("userName") String name, @Param("userAge") Integer age);@param("xxx")这个注解就是给实体属性名起的别名,在对应的xml配置文件中的sql语句就可以写为
SELECT * FROM USER WHERE USERNAME = #{userName} AND USERAGE = #{userAge}括号内就放你起的别名
b.建立属性和字段的映射关系
在对应的mapper映射文件(xml文件)里面进行提前映射
例:
<resultMap id="userResultMap" type="com.example.User"> <!-- 主键映射 --> <id property="id" column="user_id"/> <!-- 普通字段映射 --> <result property="userName" column="user_name"/> <result property="userAge" column="age"/> </resultMap>property:Java 实体类的属性名
column:数据库表的列名
id 用于主键,result 用于普通字段
这样配置好后就可以用这个配置名替换resultType为resultMap
例:
<select id="selectUser" resultMap="userResultMap"> SELECT user_id, user_name, age FROM user WHERE user_id = #{id} </select>2.开启驼峰命名自动映射
如果数据库是 user_name 这种下划线风格,Java 是 userName 驼峰风格,可以在 MyBatis 全局配置文件(mybatis-config.xml)里开启自动映射:
<settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>1.动态sql
where - if:
例:当有三个位置可能有参数传递时(ID,name,age)
那么xml映射文件里的对应代码就应该写为
<select id="selectUser" resultType="com.example.User"> SELECT * FROM user <where> <if test="id != null"> AND id = #{id} </if> <if test="name != null and name != ''"> AND name = #{name} </if> <if test="age != null"> AND age = #{age} </if> </where> </select>foreach:
当需要查询一个数组里所有的数时可以用
List<User> selectByIds(@Param("ids") List<Integer> ids);<select id="selectByIds" resultType="com.example.User"> SELECT * FROM user WHERE id IN <foreach collection="ids" item="id" open="(" close=")" separator=","> #{id} </foreach> </select>属性 说明 是否必需
collection 要遍历的集合/数组名 必需
item 每次遍历的元素别名 必需
index 遍历的索引(List 是下标,Map 是 key) 可选
open 循环开始前拼接的字符串 可选
close 循环结束后拼接的字符串 可选
separator 每次循环之间的分隔符 可选
2.在sql语句中的运算符转译
"<"的转义符为
">"的转义符为
">="的转义符为
"<="的转义符为