MyBatis实战记录(二)

本文对比了MyBatis与iBatis在配置方面的不同之处,包括XML映射文件的结构、命名空间的定义方式等,并介绍了MyBatis的一些高级特性如自动映射机制。

开始配置Mapper了(基于mybatis-spring 1.1.1)

第二天

  1. 忽然发现ibatis的mapper配置和mybatis配置完全不一样,原来生成好的mapper都废了,除了基本的sql,include,insert之类的,复杂的都变了,我苦,删了原来的mapper xml,开始重新搞
    <!-- ibatis -->
    <!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
    
    <sqlMap namespace="Test"><!-- ibatis是自定义的,随便定个名字就好,只要你自己找的到 -->
        <select id="query">...</select><!-- 这个id也已样,随便定个名字就好,反正要你自己找... -->
    </sqlMap>
    
    <!-- mybatis -->
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.dal.ITestDAO"><!-- mybatis是自动匹配的,所以namespace必须使用接口的全名称 -->
        <select id="query">...</select><!-- 这个id必须和你接口函数名称定义的一样,貌似不能重载了... -->
    </mapper>
    	

  2. resultMap在mybatis貌似不用定义,mybatis有强大的自动mapper机制,除非有列名和属性名称对不上的,而这一点ibatis是不是这样我也不知道
  3. mybatis全面放弃原来的标签式说明,转向表达式了(el?)http://www.mybatis.org/core/dynamic-sql.html
  4. 给mybatis加上配置,搞了半天配置文件原来这样配
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    	<settings>
    		<setting name="cacheEnabled" value="true" />
    		<setting name="lazyLoadingEnabled" value="false" />
    		<setting name="multipleResultSetsEnabled" value="true" />
    		<setting name="useColumnLabel" value="true" />
    		<setting name="useGeneratedKeys" value="false" />
    		<setting name="autoMappingBehavior" value="PARTIAL" />
    		<setting name="defaultExecutorType" value="SIMPLE" />
    		<setting name="defaultStatementTimeout" value="25000" />
    		<setting name="safeRowBoundsEnabled" value="false" />
    		<setting name="mapUnderscoreToCamelCase" value="false" />
    		<setting name="localCacheScope" value="SESSION" />
    		<setting name="jdbcTypeForNull" value="OTHER" />
    		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
    	</settings>
    	<typeAliases>
    		<package name="com.domain.do" /><!-- 这个是自动的,也可以一个一个配 -->
    	</typeAliases>
    </configuration>

  5. 修改spring,注入配置
    <bean id="guardianSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    	<property name="dataSource" ref="dataSource" />
    	<property name="configLocation" value="META-INF/configuration.xml" />
    	<property name="mapperLocations" value="classpath*:META-INF/sqlmap/**/*.xml" />
    </bean>
    

Mapper注意事项:

遇到的问题:

  1. 进过实测,select如果不加入resultMap,除了id会被设置进去,对象的其他属性都会是null
  2. selectKey不设resultType的话会报no Map found的错误

转载:

  1. <sql> 这里的SQL语句, 切忌最后加 " ; " , 否则, 会出现 错误字符 </sql>
  2. mapper.xml 中的注释 <!-- -->(Y) , 而 <!--注释--注释-->(X)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值