MyBatis的真正强大之处在于它的映射语句,这也是它的魔力所在。由于它的功能异常强大,映射器的XML文件文件就显得相对简单。如果拿他跟具有相同功能的JDBC代码进行对比,你会立即发现省掉将近95%的代码。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。
下面的属性可以根据方法对比理解,id相当于方法名,parameterType相当与参数类型(因为Mybatis可以自动推断,可选),resultType/resultMap相当于返回值类型。
insert、update和delete元素用来映射DML语句,是MyBatis中最常用的元素之一。
配置与select非常接近。例如:
insert、update、delete元素的属性大多和select一致。
userGeneratedKeys、keyProperty、keyColumn是为了把插入数据自动生成的主键值返回给调用者。
首先,如果数据库支持自动生成主键的字段(比如MySql和SQL Server),那么可以设置useGeneratedKeys=“true”,然后再把keyProperty设置到目标属性上就可以了(一般设置到id属性上)。例如,如果TB_USER表已经对id使用了自动生成的列类型,那么语句可以修改为。
<insert id="inserUser" useGeneratedKeys="true" keyProperty="id">
insert into TB_USER (username,password,email,address)
values (#{username},#{password},#{email},#{address})
insert>
对于不支持自动生成类型的数据库(比如Oracle)或可能不支持自动生成主键的JDBC驱动来说,MyBatis有另外一种方法来生成主键。
<insert id="insertUser">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select SEQUENCE_TB_USER.nextval as id from dual
selectKey>
insert into TB_USER (id,username,password,email,address)
values (#{id},#{username},#{password},#{email},#{address})
insert>
在上面的示例中,selectKey元素将会首先运行,其通过查询SEQUENCE序列,TB_USER的id会被设置,然后插入语句会被调用。
selectKey元素描述如下:
<selectKey
keyProperty="id"
keyColumn="id"
resultType="int"
order="BEFORE"
statementType="PREPARED">
sql元素可以被用来定义可重用的SQL代码,可以被包含在其他语句中。它可以被静态的(在加载参数时)参数化。
示例:
<sql id="base_columns">
id,name,age,sex
sql>
<select id="selectUser" resultType="com.fkit.User">
select <include refid="base_columns">
from t_user where id = #{id}
select>
参考:Mybatis @Param注解使用总结