Mapper文件解析
<mappernamespace="test"><selectid="findUserById"parameterType="int"resultType="com.demo.po.User">
select * from user where id = #{id}</select><selectid="findUserByUsername"parameterType="java.lang.String"resultType="com.demo.po.User">
select * from user where username like '%${value}%'</select></mapper>
配置说明:
1) parameterType:定义输入参数的Java类型
2)resultType:定义结果映射类型
3)#{}:相当于JDBC中的?占位符
4)#{id}:表示使用preparedstatement设置占位符并将输入变量id传到sql
5)
v
a
l
u
e
:
取
出
参
数
名
为
v
a
l
u
e
的
值
,
然
后
把
{value}:取出参数名为value的值,然后把value:取出参数名为value的值,然后把{value}这个替换为value对应的值
#{}和KaTeX parse error: Expected 'EOF', got '#' at position 9: {}的区别 1)#̲{}相当于JDBC SQL语句…{}相当于JDBC SQL语句中的连接符号+(Statement)。
2)#{}在进行参数赋值的时候,会对参数进行类型解析(如果是String类型,那么SQL语句会自动加上’’);KaTeX parse error: Expected 'EOF', got '#' at position 63: … 1=1将查询条件忽略。 3)#̲{}进行简单类型(String…{}如果进行简单类型(String、Date、8基本数据类型的包装类)参数赋值,KaTeX parse error: Expected 'EOF', got '#' at position 20: …的名称必须是value。 4)#̲{}是通过反射获取数据,而{}是通过ognl表达式来进行参数赋值
主键返回
<insertid="insertUser"parameterType="com.demo.po.User"><!-- selectKey将主键返回,需要再返回 --><selectKeykeyProperty="id"order="AFTER"resultType="java.lang.Integer">
select LAST_INSERT_ID()</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address});</insert>
添加selectKey标签实现主键返回:
1)keyProperty:指定返回的主键,存储在pojo中的哪个成员变量
2)order:指定selectKey标签中的sql什么时候执行,是相对于insert语句而言。由于mysql的自增原理是执行完insert语句之后才将主键生成,所以这里的selectKey的执行时机是after。
3)resultType:返回的主键对应的java数据类型
4)LAST_INSERT_ID()是mysql的函数,返回auto_increment自增列新记录id的值
To Be Continue…