1、#{ } 和 ${ } 的区别
#{ }
表示一个占位符号,通过#{ }
可以实现preparedStatement
向占位符中设置值,自动进行java 类型和 jdbc 类型转换,#{ }
可以有效防止sql注入。#{ }
可以接收简单类型值或 pojo 属性值(通过 OGNL 读取对象中的值,属性.属性.属性..方式获取对象属性值)。 如果parameterType
传输单个简单类型值,#{ }
括号中可以是 value 或其它名称。
${ }
表示拼接 sql 串,通过${ }
可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换,${ }
可以接收简单类型值或 pojo 属性值((通过 OGNL 读取对象中的值,属性.属性.属性..方式获取对象属性值)),如果 parameterType 传输单个简单类型值,${}括号中只能是 value。
2、parameterType 和 resultType 区别
parameterType:指定输入参数类型,mybatis 通过 ognl 从输入对象中获取参数值拼接在 sql 中。
resultType:指定输出结果类型,mybatis 将 sql 查询结果的一行记录数据映射为 resultType 指定类型的对象。
3、selectOne 和 selectList 区别
4、注意:
selectOne 查询一条记录来进行映射,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to bereturned by selectOne(), but found: 3 at
selectList 可以查询一条或多条记录来进行映射。
selectKey将主键返回,需要再返回
添加selectKey实现将主键返回
keyProperty:返回的主键存储在pojo中的哪个属性
order:selectKey的执行顺序,是相对与insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after
resultType:返回的主键是什么类型
LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值。