总结:Mybatis映射文件中常用的标签

Mybatis

一个持久层框架,支持动态定制sql、存储过程以及高级映射。
优点:避免了所有的jdbc代码和手动设置参数以及获取结果集。Mybatis可以使用简单的xml或者注解来配置和映射原生信息,将接口和java对象对象映射成数据库中的记录。

整合

(1)引入Mybatis依赖关系包,mybatis-xxxx.jar.
(2)配置SQLsessionFactory,引入标签。
(3)mybatis配置文件中主要需要的配置:
1>properties 属性信息配置。
2>setting 设置(这个Mybatis中比较重要的设置,因为他们的设置会改变mybatis的运行时行为)

<settings>
<!--全局设置   配置文件中所有映射配置的任何缓存信息的  开启或者关闭,默认true -->
  <setting name="cacheEnabled" value="true"/>
  <!--全局设置   延迟加载的开启或者关闭,局部特定关系可以通过fetchType属性来修改开启或者关闭状态,默认false -->
  <setting name="lazyLoadingEnabled" value="true"/>
 <!--设置 是否允许单一语句返回多结果集,默认true-->
  <setting name="multipleResultSetsEnabled" value="true"/>
  <!--设置 是否允许使用列表代表列名-->
  <setting name="useColumnLabel" value="true"/>
   <!--设置 允许 JDBC 支持自动生成主键,需要驱动兼容。 如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作  默认false-->
  <setting name="useGeneratedKeys" value="false"/>
   <!--设置 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 默认PARTIAL-->
  <setting name="autoMappingBehavior" value="PARTIAL"/>
    <!--设置 指定发现自动映射目标未知列(或者未知属性类型)的行为。

    NONE: 不做任何反应
    WARNING: 输出提醒日志 ('org.apache.ibatis.session.AutoMappingUnknownColumnBehavior' 的日志等级必须设置为 WARN)
    FAILING: 映射失败 (抛出 SqlSessionException)
默认NONE
-->
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <!--设置 配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(prepared statements); BATCH 执行器将重用语句并执行批量更新  默认SIMPLE-->
  <setting name="defaultExecutorType" value="SIMPLE"/>
    <!--设置 设置超时时间,它决定驱动等待数据库响应的秒数。 -->
  <setting name="defaultStatementTimeout" value="25"/>
    <!--设置为驱动的结果集获取数量(fetchSize)设置一个提示值。此参数只可以在查询设置中被覆盖。-->
  <setting name="defaultFetchSize" value="100"/>
    <!--设置 允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为false。  默认false-->
  <setting name="safeRowBoundsEnabled" value="false"/>
    <!--设置 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 默认false-->
  <setting name="mapUnderscoreToCamelCase" value="false"/>
    <!--设置 MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 默认SESSION-->
  <setting name="localCacheScope" value="SESSION"/>
    <!--设置 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。默认OTHER -->
  <setting name="jdbcTypeForNull" value="OTHER"/>
    <!--设置 指定哪个对象的方法触发一次延迟加载。 -->
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

主要总结一下映射文件中的标签(面试官比较爱问)

一般常见的mybatis映射文件中,出现的一级标签主要有如下几类:
【cache】:给定命名空间的缓存配置。
【cache-ref】:引用其他命名空间的缓存配置。
【resultMap】:描述如何从数据库结果集中来加载对象。
【sql】:定制SQL片段。id为唯一标识,使用“引入sql片段。”
【insert】:映射插入语句。
【update】:映射更新语句。
【delete】:映射删除语句。
【select】:映射查询语句。
【动态sql,主要由if、where、foreach、set等动态标签组成】
sql语句
SQL语句执行标签处,如果test中的表达式满足条件,那么则把标签里的sql语句拼接到正在执行的sql语句后面。
【注意】:这里提一下,如果有需要判断是否为空,不仅要判断null,也要判断空字符’’。
标签的特性:可以自动处理它后面跟着的第一个and语句。
范例(这里只是说明问题,sql随意编写,不要在意sql细节,理解where标签为关键):如下这个写法,如果不写where 1=1 的话,执行的时候是会报错的

    <select id="findAllList" parameterType="int" resultType="List">
        select * from sys_user s
         <if test="USER_NAME!=null and USER_NAME !=''">
             AND S.USER_NAME = #{USER_NAME}
         </if>
    </select>

如果不想写where1=1,那么就需要where标签,如下处理:

标签:

    <!--
    foreach:表示一个foreach循环。
    collection:传入的集合参数的名称。
    item:遍历集合后定义的参数名称。
    open:动态拼接的SQL串头部分
    close:动态拼接的SQL串尾部分
    separator:遍历过程中拼接连接使用到的符号

    -->
    <select id="findAllUserList" parameterType="List" resultType="List">
        select * from sys_user s
        <where>
            <if test="userNameList!=null and userNameList.size>0">
                  <foreach collection="userNameList" item="userName" open="And userName in (" close=")" separator=",">
                      #{userName}
                  </foreach>
            </if>

        </where>

    </select>

标签:与where标签用法类似,set标签会去掉它后面第一个半角逗号。
详细手册:这里查找:http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值