mybatis映射XML文件
一个简单的映射文件:
?xml version="1.0" encoding="UTF-8" ?>
!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
mapper namespace="com.cnx.wxcar.mapper.CustomerMapper">
/mapper>
当然这个文件中没有任何的元素
The Mapper XML files have only a few first class elements :
- cache – Configuration of the cache for a given namespace.
- cache-ref – Reference to a cache configuration from another namespace.
- resultMap – The most complicated and powerful element that describes how to load your objects from the database result sets.
- sql – A reusable chunk of SQL that can be referenced by other statements.
- insert – A mapped INSERT statement.
- update – A mapped UPDATE statement.
- delete – A mapped DELETE statement.
- select – A mapped SELECT statement.
select
简单的例子:
select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
/select>
select也有很多属性可以让你配置:
select
id="selectPerson"
parameterType="int"
parameterMap="deprecated"
resultType="hashmap"
resultMap="personResultMap"
flushCache="false"
useCache="true"
timeout="10000"
fetchSize="256"
statementType="PREPARED"
resultSetType="FORWARD_ONLY">
insert, update and delete
insert
id="insertAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
keyProperty=""
keyColumn=""
useGeneratedKeys=""
timeout="20">
update
id="updateAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">
delete
id="deleteAuthor"
parameterType="domain.blog.Author"
flushCache="true"
statementType="PREPARED"
timeout="20">
语句:
insert id="insertAuthor">
insert into Author (id,username,password,email,bio)
values (#{id},#{username},#{password},#{email},#{bio})
/insert>
update id="updateAuthor">
update Author set
username = #{username},
password = #{password},
email = #{email},
bio = #{bio}
where id = #{id}
/update>
delete id="deleteAuthor">
delete from Author where id = #{id}
/delete>
f your database supports auto-generated key fields (e.g. MySQL and SQL Server),上面的插入语句可以写成:
insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
/insert>
如果你的数据库还支持多条记录插入,可以使用下面这个语句:
insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username, password, email, bio) values
foreach item="item" collection="list" separator=",">
(#{item.username}, #{item.password}, #{item.email}, #{item.bio})
/foreach>
/insert>
sql
这个element可以定义一些sql代码的碎片,然后在多个语句中使用,降低耦合。比如:
sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password /sql>
然后在下面的语句中使用:
select id="selectUsers" resultType="map">
select
include refid="userColumns">property name="alias" value="t1"/>/include>,
include refid="userColumns">property name="alias" value="t2"/>/include>
from some_table t1
cross join some_table t2
/select>
Result Maps
官网给了个最最复杂的例子
大体意思呢就是一个博客系统有一个作者,很多博文,博文中有一个作者,很多评论,很多标签(包括了一对多,一对一)
!-- Very Complex Statement -->
select id="selectBlogDetails" resultMap="detailedBlogResultMap">
select
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id,
A.id as author_id,
A.username as author_username,
A.password as author_password,
A.email as author_email,
A.bio as author_bio,
A.favourite_section as author_favourite_section,
P.id as post_id,
P.blog_id as post_blog_id,
P.author_id as post_author_id,
P.created_on as post_created_on,
P.section as post_section,
P.subject as post_subject,
P.draft as draft,
P.body as post_body,
C.id as comment_id,
C.post_id as comment_post_id,
C.name as comment_name,
C.comment as comment_text,
T.id as tag_id,
T.name as tag_name
from Blog B
left outer join Author A on B.author_id = A.id
left outer join Post P on B.id = P.blog_id
left outer join Comment C on P.id = C.post_id
left outer join Post_Tag PT on PT.post_id = P.id
left outer join Tag T on PT.tag_id = T.id
where B.id = #{id}
/select>
!-- Very Complex Result Map -->
resultMap id="detailedBlogResultMap" type="Blog">
constructor>
idArg column="blog_id" javaType="int"/>
/constructor>
result property="title" column="blog_title"/>
association property="author" javaType="Author">
id property="id" column="author_id"/>
result property="username" column="author_username"/>
result property="password" column="author_password"/>
result property="email" column="author_email"/>
result property="bio" column="author_bio"/>
result property="favouriteSection" column="author_favourite_section"/>
/association>
collection property="posts" ofType="Post">
id property="id" column="post_id"/>
result property="subject" column="post_subject"/>
association property="author" javaType="Author"/>
collection property="comments" ofType="Comment">
id property="id" column="comment_id"/>
/collection>
collection property="tags" ofType="Tag" >
id property="id" column="tag_id"/>
/collection>
discriminator javaType="int" column="draft">
case value="1" resultType="DraftPost"/>
/discriminator>
/collection>
/resultMap>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
您可能感兴趣的文章:- mybatis框架的xml映射文件常用查询指南
- mybatis的mapper.xml中resultMap标签的使用详解
- 浅谈mybatis mapper.xml文件中$和#的区别
- MyBatis中XML 映射文件中常见的标签说明