• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mybatis映射XML文件详解及实例

    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 :

    1. cache – Configuration of the cache for a given namespace.
    2. cache-ref – Reference to a cache configuration from another namespace.
    3. resultMap – The most complicated and powerful element that describes how to load your objects from the database result sets.
    4. sql – A reusable chunk of SQL that can be referenced by other statements.
    5. insert – A mapped INSERT statement.
    6. update – A mapped UPDATE statement.
    7. delete – A mapped DELETE statement.
    8. 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 映射文件中常见的标签说明
    上一篇:mybatis 项目配置文件实例详解
    下一篇:MySQL与Oracle数据类型对应关系(表格形式)
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mybatis映射XML文件详解及实例 mybatis,映射,XML,文件,详解,