|
开始配置Mapper了(基于mybatis-spring 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>
- resultMap在mybatis貌似不用定义,mybatis有强大的自动mapper机制,除非有列名和属性名称对不上的,而这一点ibatis是不是这样我也不知道
- mybatis全面放弃原来的标签式说明,转向表达式了(el?)http://www.mybatis.org/core/dynamic-sql.html
- 给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>
- 修改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注意事项:
遇到的问题:
- 进过实测,select如果不加入resultMap,除了id会被设置进去,对象的其他属性都会是null
- selectKey不设resultType的话会报no Map found的错误
转载:
- <sql> 这里的SQL语句, 切忌最后加 " ; " , 否则, 会出现 错误字符 </sql>
- mapper.xml 中的注释 <!-- -->(Y) , 而 <!--注释--注释-->(X)
|