zoukankan      html  css  js  c++  java
  • 详解mybatis映射配置文件

    一  mybatis 映射文件结构


          mybatis映射配置文件存在如下顶级元素,且这些元素按照如下顺序被定义。

    • cache – 给定命名空间的缓存配置。
    • cache-ref – 其他命名空间缓存配置的引用。  
    • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
    • parameterMap – 已废弃!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除,这里不会记录。
    • sql – 可被其他语句引用的可重用语句块。
    • insert – 映射插入语句
    • update – 映射更新语句
    • delete – 映射删除语句
    • select – 映射查询语句

    二  mybatis映射配置文件顶级元素分析


     (一)CRUD

     在映射配置文件中,基本的CRUD操作定义如下

    <!--select by id-->
        <select id="getUserInfoById" resultType="UserInfo">
            SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}
        </select>
    
        <!--insert-->
        <insert id="addUserInfo" useGeneratedKeys="true">
            INSERT INTO user_info(user_name,user_addr)VALUES(#{user_name},#{user_addr})
        </insert>
    
        <!--update-->
        <update id="updateUserInfo">
             UPDATE user_info set user_name=#{user_name} WHERE user_id=#{user_id}
        </update>
    
        <!--delete-->
        <delete id="delUserInfoById">
            DELETE FROM user_info WHERE user_id=#{user_id}
        </delete>

    1.#{}表示占位符,相当于?,#{}需要经过预处理,能防止SQL漏洞注入,当然,也可以使用${},只是不能防止漏洞注入。

    2.select语句有很多属性

    id -- 唯一标识select语句

    parameterType --参数类型

    paramerterMap -- 参数映射

    resultType -- 返回类型

    resultMap -- 返回类型映射

    flushCache -- 当语句被调用时,是否清除本地缓存或二级缓存

    useCache -- 是否使用二级缓存

    timeout -- 在抛出异常之前,驱动程序等待数据库返回请求结果的秒数

    fetchSize -- 每次批量返回的结果行数

    statementType -- 使用STATEMENT,PREPARED 或 CALLABLE 的一个

    resultSetType -- 使用FORWARD_ONLY,SCROLL_SENSITIVE 或 SCROLL_INSENSITIVE 中的一个

    <select
      id="selectPerson"
      parameterType="int"
      parameterMap="deprecated"
      resultType="hashmap"
      resultMap="personResultMap"
      flushCache="false"
      useCache="true"
      timeout="10000"
      fetchSize="256"
      statementType="PREPARED"
      resultSetType="FORWARD_ONLY">

    (二)resultType

    resultType可表示返回基本类型,也可表示返回复杂对象类型(包括自定义类型)

    1.返回基本类型

    <select id="listUserInfo" resultType="int">
         SELECT userId FROM user_info
    </select>

    2.返回复杂类型

    <select id="getUserInfoById" resultType="UserInfo">
         SELECT user_name ,user_addr FROM user_info WHERE user_id=#{user_id}
    </select>

    (三)resultMap

    resultMap主要解决TABLE字段与JavaBean映射不匹配问题。

    举个例子:

    定义一个JavaBean

    public class UserInfo {
        String userName;
        String addr;
    
        //setter和getter
    }

    SQL语句:

    DROP TABLE IF EXISTS `user_info`;
    CREATE TABLE `user_info`  (
      `user_id` int(5) NOT NULL AUTO_INCREMENT,
      `user_name` varchar(50) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
      `user_addr` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
      PRIMARY KEY (`user_id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
    
    SET FOREIGN_KEY_CHECKS = 1;

    通过如上发现,user_name与userName不匹配,user_addr与addr不匹配。

    通过resultMap就能很好地解决该问题

    <resultMap id="userInfoMap" type="UserInfo">
       <result property="userName" column="user_name"/>
       <result property="addr" column="user_addr"/>
    </resultMap>

    property表示JavaBean,column表示table字段

    (四)SQL

    sql语句,定义可重用语句。

     <sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.addr </sql>

    引定义好的sql

        <select id="listUserInfo" resultMap="userInfoMap">
            SELECT
            <include refid="userColumns">
                <property name="alias" value="t1"/>
            </include>
            FROM user_info t1
        </select>

    (五)cache &cache-ref

    cache和cache-ref比较重要,放在下篇文章讲解。

    三   Mybatis系列文章


         浅谈JavaWeb架构演变

         浅谈mybatis如何半自动化解耦

         详解mybatis配置文件

    四  参考文献


       【01】http://www.mybatis.org/mybatis-3/zh/configuration.html#

    五 版权区


    •    转载博客,必须注明博客出处
    •    博主网址:http://www.cnblogs.com/wangjiming/
    •    如您有新想法,欢迎提出,邮箱:2098469527@qq.com
  • 相关阅读:
    linux 运维必备150个命令
    CentOS 6.5 安装nginx 1.6.3
    centos 6.5 zabbix3.0.4 监控apache
    iOS更改ShareSDK默认的分享功能界面
    使用AFNetworking时, 控制器点击返回销毁了, 但还是会执行请求成功或失败的block, 导致野指针异常
    iOS性能优化
    'Invalid update: invalid number of rows in section xx. The number of rows contained in an existing section after the update (xxx)...
    iOS 改变UITextField中光标颜色
    使用ShareSDK完成Facebook第三方登录和Facebook分享时没办法跳转到Facebook应用
    [!] Unable to satisfy the following requirements:
  • 原文地址:https://www.cnblogs.com/wangjiming/p/10399333.html
Copyright © 2011-2022 走看看