概述
MyBatis的真正强大之处在于它的映射语句,这也是它的魔力所在。由于它的功能异常强大,映射器的XML文件文件就显得相对简单。如果拿他跟具有相同功能的JDBC代码进行对比,你会立即发现省掉将近95%的代码。MyBatis就是针对SQL构建的,并且比普通的方法做的更好。
select元素的主要属性介绍
下面的属性可以根据方法对比理解,id相当于方法名,parameterType相当与参数类型(因为Mybatis可以自动推断,可选),resultType/resultMap相当于返回值类型。
- id。命名空间中唯一的标识符,可以被用来引用这条语句。
- parameterType。是传入参数类型的完全限定名或别名。该属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。
- resultType。语句返回的期望类型的完全限定名或别名。注意如果结果返回的是集合情形,那应该是集合中包含的类型,而不是集合本身。返回时可以使用resulType或resultMap,但不能同时使用。
- resultMap。外部resultMap的命名引用。结果集映射是MyBatis最强大的特性,对其有一个很好的理解的话,许多复杂映射的情形都能迎刃而解。返回时可以使用resultMap或resultType,但不能同时使用。
insert、update和delete
insert、update和delete元素用来映射DML语句,是MyBatis中最常用的元素之一。
配置与select非常接近。例如:
<insert
id="inserUser"
parameterType="org.fkit.domain.User"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys="false"
timeout="20">
<update
id="updateUser"
parameterType="org.fkit.domain.User"
flushCache="true"
statementType="PREPARD"
timeout="20">
<delete
id="deleteUser"
parameterType="org.fkit.domain.User"
flushCache="true"
statementType="PREPARED"
timeout="20">
insert、update、delete元素的属性大多和select一致。
- id。命名空间中唯一的标识符,可以被用来引用这条语句。
- parameterType。是传入参数类型的完全限定名或别名。该属性是可选的,因为MyBatis可以通过TypeHandler推断出具体传入语句的参数,默认值为unset。
- useGeneratedKeys。用于主键自动生成的数据库场景(仅对insert和update有用)这会令MyBatis使用JDBC的getGeneratedKeys方法获取由数据库内部生成的主键(比如,想MySql和SQLServer这样的关系数据库管理系统的自动递增字段),默认值为false。
- keyProperty。(仅对insert和update有用)唯一标记一个属性,把需要返回的列值设置到对象的属性中。MyBatis会通过getGeneratedKeys的返回值或者通过insert/update元素的selectKey子元素设置它的键值,默认为unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
- keyColumn。(仅对insert和update有效)指定生成的键值在数据库中的列名,这个设置仅对某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列时需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
返回值相关属性
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">
- keyProperty。selectKey语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
- keyColumn。匹配返回的结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
- resultType。结果的类型。MyBatis通常可以推算出来,但是为了更加确定,建议明确写出。MyBatis允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的Object或一个Map。
- order。可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它 会首先选择属性并设置到对象中,然后执行插入语句。设置为AFTER,那么先执行插入语句,然后是selectKey元素。
sql
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>
参数
resultMap
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100116.html