1. 程式人生 > >Mybatis項目中不使用代理寫法【我】

Mybatis項目中不使用代理寫法【我】

xxx routes tor XML truct .get valid odin 1.2

首先 spring 配置文件中引入 數據源配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
> <!-- 配置數據源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="jdbc:mysql://172.16.1.24:8866/xxx?characterEncoding=UTF-8" /> <property name="username" value
="txxc" /> <property name="password" value="tydic123" /> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="10" /> <property name="maxWait" value="60000" /> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="select 1 from dual" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> </bean> <!-- 配置數據源 --> <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="url" value="jdbc:mysql://192.168.0.246:8866/xxx?characterEncoding=UTF-8" /> <property name="username" value="txxc" /> <property name="password" value="tydic123" /> <property name="initialSize" value="1" /> <property name="minIdle" value="1" /> <property name="maxActive" value="10" /> <property name="maxWait" value="60000" /> <property name="timeBetweenEvictionRunsMillis" value="60000" /> <property name="minEvictableIdleTimeMillis" value="300000" /> <property name="validationQuery" value="select 1 from dual" /> <property name="testWhileIdle" value="true" /> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> </bean> <!-- sqlSessionFactory工廠 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:sql-config/**/*.xml" /> <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" /> </bean> <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource1" /> <property name="mapperLocations" value="classpath:sql-config/**/*.xml" /> <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" /> </bean> <bean id="routeSwith" class="com.txxc.fm.mybatis.impl.RouteSwithImpl"></bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory" /> <property name="targetSqlSessionFactorys"> <map> <entry key="ds1" value-ref="sqlSessionFactory" /> <entry key="ds2" value-ref="sqlSessionFactory1" /> </map> </property> <property name="routeSwith" ref="routeSwith"></property> </bean> <bean id="sqlSessionDaoSupport" class="com.txxc.fm.mybatis.dao.SqlSessionDaoImpl"> <property name="sqlSessionTemplate" ref="sqlSessionTemplate" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource1" /> </bean> <!-- 配置事務回滾的場景--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="registerUser*" rollback-for="java.lang.Exception" /> <tx:method name="testServiceJson*" rollback-for="java.lang.Exception" /> <tx:method name="addWorkOrder" rollback-for="java.lang.Exception" /> </tx:attributes> </tx:advice> <tx:advice id="txAdvice1" transaction-manager="transactionManager1"> <tx:attributes> <tx:method name="registerUser*" rollback-for="java.lang.Exception" /> <tx:method name="testServiceJson*" rollback-for="java.lang.Exception" /> </tx:attributes> </tx:advice> <!-- 指定那些類的哪些方法參與事務 --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.txxc.jtcrm..*.*(..))" /> <aop:advisor advice-ref="txAdvice1" pointcut="execution(* com.txxc.jtcrm..*.*(..))" /> </aop:config> </beans>

其中需要主要關註的就是:

    <!-- sqlSessionFactory工廠 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:sql-config/**/*.xml" />
        <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" />
    </bean>

首先是配置了sql工廠類的bean: sqlSessionFactory,然後裏面配置了使用的數據源 datasource ,還有 mybatis的 主配置文件mybatis.config.xml , 還有 操作數據庫表的 xml 文件的位置 classpath:sql-config/**/*.xml

==========

mybatis.config.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>
    <properties>
        <!-- 目標數據庫環境oracle,mysql,其它類型數據庫待擴展,no表示不處理 -->
        <property name="data_base" value="mysql" />
        <!-- 是否需要sql轉換,1:處理,0:不處理 -->
        <property name="handle" value="0" />
        <!--排除部分sqlId -->
        <property name="handle_exclude_sql" value="" />
        <!-- 是否需要sql提示,1:提示,0:不提示 -->
        <property name="hint" value="1" />
        <!-- 排除部分關鍵字,多個以逗號隔開,比如nvl,ifnull -->
        <property name="hint_no_keys" value="getcodename" />
        <!--排除部分sqlId -->
        <property name="hint_exclude_sql" value="" />
        <!-- sql表數量限制,0:關閉,其它則默認開啟,建議為4 -->
        <property name="limit" value="4" />
        <!-- sql排除sqlId -->
        <property name="limit_exclude_sql" value="" />
        <!-- 序列替換的函數名 -->
        <property name="handle_seqname_fun" value="getSeqFunction" />
    </properties>
    
    <settings>
        <setting name="cacheEnabled" value="true"/>
        
        <setting name="callSettersOnNulls" value="true"/>
    </settings>
    <plugins>
        <plugin interceptor="com.tydic.fm.mybatis.pages.TPageInterceptor">
            <property name="databaseType" value="mysql" />
        </plugin>
    </plugins>
</configuration>

==========

xml文件:

技術分享圖片

=====

然後就是代碼使用了,

首先定義一個基礎的 service:

import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.ResultHandler;
import org.apache.ibatis.session.RowBounds;
import org.springframework.beans.factory.annotation.Autowired;
import com.tydic.fm.mybatis.dao.SqlSessionDaoImpl;


public abstract class ParentService {
    @Autowired
    private SqlSessionDaoImpl sqlSessionDaoSupport;

    /**
     * 查詢方法(無參數+返回單行)
     * 
     * @param routeObject
     * @param statement
     * @return
     */
    protected <T> T selectOne(Object routeObject, String statement) {
        return this.sqlSessionDaoSupport.getSqlSession().selectOne(routeObject, statement);
    }

    /**
     * 查詢參數(參數+返回單行)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @return
     */
    protected <T> T selectOne(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().selectOne(routeObject, statement, parameter);
    }

    /**
     * 查詢方法(參數+返回List)
     * 
     * @param routeObject
     * @param statement
     * @return
     */
    protected <E> List<E> selectList(Object routeObject, String statement) {
        return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement);
    }

    /**
     * 查詢方法(參數+返回List)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @return
     */
    protected <E> List<E> selectList(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement, parameter);
    }

    /**
     * 查詢方法(參數+返回List+邏輯分頁) 該分頁方法不建議使用
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @param rowBounds
     * @return
     */
    protected <E> List<E> selectList(Object routeObject, String statement, Object parameter, RowBounds rowBounds) {
        return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement, parameter, rowBounds);
    }

    /**
     * 查詢方法(無參數+返回List+指定mapKey)
     * 
     * @param routeObject
     * @param statement
     * @param mapKey
     * @return
     */
    protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, String mapKey) {
        return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, mapKey);
    }

    /**
     * 查詢方法(參數+返回List+指定mapKey)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @param mapKey
     * @return
     */
    protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, Object parameter, String mapKey) {
        return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, parameter, mapKey);
    }

    /**
     * 查詢方法(參數+返回List+指定mapKey+邏輯分頁) 該分頁方法不建議使用
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @param mapKey
     * @param rowBounds
     * @return
     */
    protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, Object parameter, String mapKey, RowBounds rowBounds) {
        return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, parameter, mapKey, rowBounds);
    }

    /**
     * 查詢方法(無參數+回調)
     * 
     * @param routeObject
     * @param statement
     * @param handler
     */
    protected void select(Object routeObject, String statement, ResultHandler handler) {
        this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, handler);
    }

    /**
     * 查詢方法(參數+回調)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @param handler
     */
    protected void select(Object routeObject, String statement, Object parameter, ResultHandler handler) {
        this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, parameter, handler);
    }

    /**
     * 查詢方法(參數+分頁+回調)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @param rowBounds
     * @param handler
     */
    protected void select(Object routeObject, String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) {
        this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, parameter, rowBounds, handler);
    }

    /**
     * 插入(無參數)
     * 
     * @param routeObject
     * @param statement
     * @return
     */
    protected int insert(Object routeObject, String statement) {
        return this.sqlSessionDaoSupport.getSqlSession().insert(routeObject, statement);
    }

    /**
     * 插入(帶參數)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @return
     */
    protected int insert(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().insert(routeObject, statement, parameter);
    }

    /**
     * 更新(無參數)
     * 
     * @param routeObject
     * @param statement
     * @return
     */
    protected int update(Object routeObject, String statement) {
        return this.sqlSessionDaoSupport.getSqlSession().update(routeObject, statement);
    }

    /**
     * 更新(帶參數)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @return
     */
    protected int update(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().update(routeObject, statement, parameter);
    }

    /**
     * 刪除(無參數)
     * 
     * @param routeObject
     * @param statement
     * @return
     */
    protected int delete(Object routeObject, String statement) {
        return this.sqlSessionDaoSupport.getSqlSession().delete(routeObject, statement);
    }

    /**
     * 刪除(帶參數)
     * 
     * @param routeObject
     * @param statement
     * @param parameter
     * @return
     */
    protected int delete(Object routeObject, String statement, Object parameter) {
        return this.sqlSessionDaoSupport.getSqlSession().delete(routeObject, statement, parameter);
    }
}

====

然後在具體的業務service中記承它,再實現業務接口,寫代碼:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;


@Service
public class batchXXXNameServiceImpl extends ParentService implements batchXXXNameService {
    
    private final static Logger logger = LoggerFactory.getLogger(batchXXXNameServiceImpl.class);

    @Resource
    private batchXXXNameServiceSub batchXXXNameServiceSub;

    
    //根據某參數 查詢對應數據記錄數量
    @Override
    public String queryWaitHandleCount(String jsonString){
        Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
        String count = this.selectOne("ds1", "batchXXX.queryWaitHandleCount",requestMap);
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("count", count);
        return Util.getInterfaceRes(resultMap);
    }
    
    //根據條件 查詢對應數據列表
    @Override
    public String queryWaitHandleList(String jsonString) { 
        Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
        List<Map> WaitHandleList = this.selectList("ds1", "batchXXX.queryWaitHandleList",requestMap);
        Map<String, Object> resultMap = new HashMap<>();
        resultMap.put("WAIT_HANDLE_LIST", WaitHandleList);
        return Util.getInterfaceRes(resultMap);
    }
    
    ////更新數據
    @Override
    public String updateProvBatchCd(String jsonString) {
        Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
        this.update("ds1", "batchXXX.updateProvBatchCd",requestMap);
        Map<String, Object> resultMap = new HashMap<>();
        return Util.getInterfaceRes(resultMap);
    }
    
}

Mybatis項目中不使用代理寫法【我】