mybaits3整合spring总结

时间:2022-04-29
本文章向大家介绍mybaits3整合spring总结,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、maven定义properties:

<org.springframework.version>4.3.1.RELEASE</org.springframework.version>
<!-- mybatis版本号 -->
<mybatis.version>3.2.8</mybatis.version>
<!-- mybatis-srping版本号 -->
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>

2、maven加入mybaits依赖包

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>${mybatis.spring.version}</version>
</dependency>
<dependency>
    <groupId>com.github.miemiedev</groupId>
    <artifactId>mybatis-paginator</artifactId>
    <version>${mybatis.paginator.version}</version>
</dependency>

3、spring 配置文件,增加数据源以及mybaits

<!-- 数据源 -->
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName">
            <value>${DEFAULT_JNDI}</value>
        </property>
    </bean>
<!-- 配置mybatis sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/sqlmap-config-${DBTYPE}.xml" />
    </bean>
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory" />
    </bean>

DBTYPE为参数

4、sqlmap-config-oracle.xml示例:

<?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="jdbcTypeForNull" value="NULL" />
       <setting name="logImpl" value="LOG4J"/>
    </settings>
    
    <typeAliases>
        <package name="com.sven.ssm.dto"></package> <!-- 扫描model的包名 -->
    </typeAliases>
    
    <plugins>
        <plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
            <property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"/>
        </plugin>
    </plugins>
    
    <mappers>
        <mapper resource="mybatis/oracle/UserDto.xml" />
    </mappers>
</configuration>

5、UserDto.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">
<!-- namespace用于java代码调用时识别指定xml的mapper文件 -->
<mapper namespace="UserDto">
    <!-- 用来定义可重用的SQL代码段 -->
    <!-- sql片段 -->
    <sql id="Base_Column_List">
        A.USER_ID,USER_NAME,USER_CODE,PWD,CONTACT_INFO,MEMO,USER_EFF_DATE,USER_EXP_DATE,CREATED_DATE,A.STATE,A.STATE_DATE,IS_LOCKED,PWD_EXP_DATE,FORCE_LOGIN,LOGIN_FAIL,UNLOCK_DATE,A.SP_ID
    </sql>
    <select id="selectUserByUserCode" parameterType="Map" resultType="UserDto">
        SELECT
        <include refid="Base_Column_List"></include><!-- sql片段引入 -->
        ,B.PORTAL_ID, B.APP_ID
        FROM
        BFM_USER A,BFM_APP_USER B
        WHERE
        A.USER_ID=B.USER_ID AND B.APP_ID=#{APP_ID} AND A.STATE!='X' AND
        B.STATE!='X'
        AND
        <choose>
            <when test="caseSensitive !=null and caseSensitive != ''">
                UPPER(A.USER_CODE) = #{USER_CODE}
            </when>
            <otherwise>
                A.USER_CODE = #{USER_CODE}
            </otherwise>
        </choose>
    </select>
</mapper>

6、使用demo

        java.util.Map<String,String> parameterMap = new java.util.HashMap<String,String> ();
        parameterMap.put("APP_ID", String.valueOf(appId));
        parameterMap.put("USER_CODE", caseSensitive ? userCode.toUpperCase() : userCode);
        parameterMap.put("caseSensitive", caseSensitive ?"True":null);
        UserDto dto = DaoUtils.getSqlTpl().selectOne("UserDto.selectUserByUserCode", parameterMap);

其中DaoUtils为一个简单的工具类,用来获取sqlSessionTemplate

public class DaoUtils {
    public static SqlSessionTemplate getSqlTpl() {
        return getSqlTpl(null);
    }
    public static SqlSessionTemplate getSqlTpl(String jndi_name) {
        if (!TransactionSynchronizationManager.isSynchronizationActive()) {
            throw new RuntimeException("没有通过Spring的事务管控,不允许获取连接!");
        }
        /*if (Consts.LOG_JNDI_NAME.equals(jndi_name)) { //日志库
            return SpringUtils.getBean("logSqlSessionTemplate");
        }*/
        return SpringUtils.getBean("sqlSessionTemplate");
    }
}