映射文件的写法
SELECT查询
<select
id="接口中的方法名" --- 唯一标识。必须的
parameterType="参数类型" --- 参数类型。可选的
resultType="返回值类型" --- 查询结果的类型
resultMap="结果集类型" --- 结果集需要映射
flushcache="false" --- 是否清空本地和二级缓存。true表示清空,false(默认)表示不清空
useCache="true" --- 是否将本条语句的执行结果进行二级缓存。默认是true
timeout="10000" --- 语句抛出异常时,数据库返回结果的秒数
fetchSize="256" --- 批量返回结果的行数
statementType="PREPARED" --- jdbc语句对象的类型(statement、PreparedStatement、CallableStatement)
STATEMENT --- statement
PREPARED --- PreparedStatement (默认)
CALLABLE --- CallableStatement
>
select语句
</select>
INSERT插入
<insert
id="接口中的方法名" //唯一标识, 必须的
parameterType="参数类型" //参数类型,插入数据的类型
statementType="PREPARED"
useGeneratedKeys="false" //只对inser、update语句有用。若使用了主键自增
keyColumn="" //只对inser、update语句有用.指定主键自增的列
keyProperty="" //只对inser、update语句有用.指定自增的属性
>
insert语句
</insert>
//'#{}'类似于 PreparedStatement语句中的'?',是一个占位符。可以有效防止sql注入式攻击
DELECT删除
<delete
id="接口中的方法名" //唯一标识, 必须的
parameterType="参数类型" //参数类型,插入数据的类型
>
delete语句
</delete>
UPDATE更新
<update
id="接口中的方法名" //唯一标识, 必须的
parameterType="参数类型" //参数类型,插入数据的类型
>
update语句
</update>
模糊查询
#{}和${}的使用方法和区别:
(1) #{} 是预编译处理,MyBatis在处理#{}时,它会将sql中的#{}替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,使用占位符的方式提高效率,可以防止sql注入。
(2 ) ${} 表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,可能引发sql注入。
例如:查询姓’贾’的记录
//sql语句
select * from stu where sname like '%贾%';
//映射文件写法
select * from stu where sname like '%${
lastName}%'
select * from stu where sname like concat('%'