首先 spring 配置文件中引入 数据源配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <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
  3. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  4. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
  5. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  6. <!-- 配置数据源 -->
  7. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  8.  
  9. <property name="url" value="jdbc:mysql://172.16.1.24:8866/xxx?characterEncoding=UTF-8" />
  10. <property name="username" value="txxc" />
  11. <property name="password" value="tydic123" />
  12.  
  13. <property name="initialSize" value="1" />
  14. <property name="minIdle" value="1" />
  15. <property name="maxActive" value="10" />
  16. <property name="maxWait" value="60000" />
  17. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  18. <property name="minEvictableIdleTimeMillis" value="300000" />
  19. <property name="validationQuery" value="select 1 from dual" />
  20. <property name="testWhileIdle" value="true" />
  21. <property name="testOnBorrow" value="false" />
  22. <property name="testOnReturn" value="false" />
  23. </bean>
  24. <!-- 配置数据源 -->
  25. <bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
  26.  
  27. <property name="url" value="jdbc:mysql://192.168.0.246:8866/xxx?characterEncoding=UTF-8" />
  28. <property name="username" value="txxc" />
  29. <property name="password" value="tydic123" />
  30.  
  31. <property name="initialSize" value="1" />
  32. <property name="minIdle" value="1" />
  33. <property name="maxActive" value="10" />
  34. <property name="maxWait" value="60000" />
  35. <property name="timeBetweenEvictionRunsMillis" value="60000" />
  36. <property name="minEvictableIdleTimeMillis" value="300000" />
  37. <property name="validationQuery" value="select 1 from dual" />
  38. <property name="testWhileIdle" value="true" />
  39. <property name="testOnBorrow" value="false" />
  40. <property name="testOnReturn" value="false" />
  41. </bean>
  42.  
  43. <!-- sqlSessionFactory工厂 -->
  44. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  45. <property name="dataSource" ref="dataSource" />
  46. <property name="mapperLocations" value="classpath:sql-config/**/*.xml" />
  47. <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" />
  48. </bean>
  49.  
  50. <bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
  51. <property name="dataSource" ref="dataSource1" />
  52. <property name="mapperLocations" value="classpath:sql-config/**/*.xml" />
  53. <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" />
  54. </bean>
  55.  
  56. <bean id="routeSwith" class="com.txxc.fm.mybatis.impl.RouteSwithImpl"></bean>
  57.  
  58. <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
  59. <constructor-arg ref="sqlSessionFactory" />
  60. <property name="targetSqlSessionFactorys">
  61. <map>
  62. <entry key="ds1" value-ref="sqlSessionFactory" />
  63. <entry key="ds2" value-ref="sqlSessionFactory1" />
  64. </map>
  65. </property>
  66. <property name="routeSwith" ref="routeSwith"></property>
  67. </bean>
  68.  
  69. <bean id="sqlSessionDaoSupport" class="com.txxc.fm.mybatis.dao.SqlSessionDaoImpl">
  70. <property name="sqlSessionTemplate" ref="sqlSessionTemplate" />
  71. </bean>
  72.  
  73. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  74. <property name="dataSource" ref="dataSource" />
  75. </bean>
  76. <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  77. <property name="dataSource" ref="dataSource1" />
  78. </bean>
  79.  
  80. <!-- 配置事务回滚的场景-->
  81. <tx:advice id="txAdvice" transaction-manager="transactionManager">
  82. <tx:attributes>
  83. <tx:method name="registerUser*" rollback-for="java.lang.Exception" />
  84. <tx:method name="testServiceJson*" rollback-for="java.lang.Exception" />
  85. <tx:method name="addWorkOrder" rollback-for="java.lang.Exception" />
  86. </tx:attributes>
  87. </tx:advice>
  88.  
  89. <tx:advice id="txAdvice1" transaction-manager="transactionManager1">
  90. <tx:attributes>
  91. <tx:method name="registerUser*" rollback-for="java.lang.Exception" />
  92. <tx:method name="testServiceJson*" rollback-for="java.lang.Exception" />
  93. </tx:attributes>
  94. </tx:advice>
  95.  
  96. <!-- 指定那些类的哪些方法参与事务 -->
  97. <aop:config>
  98. <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.txxc.jtcrm..*.*(..))" />
  99. <aop:advisor advice-ref="txAdvice1" pointcut="execution(* com.txxc.jtcrm..*.*(..))" />
  100. </aop:config>
  101.  
  102. </beans>

其中需要主要关注的就是:

  1. <!-- sqlSessionFactory工厂 -->
  2. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  3. <property name="dataSource" ref="dataSource" />
  4. <property name="mapperLocations" value="classpath:sql-config/**/*.xml" />
  5. <property name="configLocation" value="classpath:mybatis-config/mybatis.config.xml" />
  6. </bean>

首先是配置了sql工厂类的bean: sqlSessionFactory,然后里面配置了使用的数据源 datasource ,还有 mybatis的 主配置文件mybatis.config.xml , 还有 操作数据库表的 xml 文件的位置 classpath:sql-config/**/*.xml  。

==========

mybatis.config.xml 文件:

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <properties>
  7. <!-- 目标数据库环境oracle,mysql,其它类型数据库待扩展,no表示不处理 -->
  8. <property name="data_base" value="mysql" />
  9. <!-- 是否需要sql转换,1:处理,0:不处理 -->
  10. <property name="handle" value="0" />
  11. <!--排除部分sqlId -->
  12. <property name="handle_exclude_sql" value="" />
  13. <!-- 是否需要sql提示,1:提示,0:不提示 -->
  14. <property name="hint" value="1" />
  15. <!-- 排除部分关键字,多个以逗号隔开,比如nvl,ifnull -->
  16. <property name="hint_no_keys" value="getcodename" />
  17. <!--排除部分sqlId -->
  18. <property name="hint_exclude_sql" value="" />
  19. <!-- sql表数量限制,0:关闭,其它则默认开启,建议为4 -->
  20. <property name="limit" value="4" />
  21. <!-- sql排除sqlId -->
  22. <property name="limit_exclude_sql" value="" />
  23. <!-- 序列替换的函数名 -->
  24. <property name="handle_seqname_fun" value="getSeqFunction" />
  25. </properties>
  26.  
  27. <settings>
  28. <setting name="cacheEnabled" value="true"/>
  29.  
  30. <setting name="callSettersOnNulls" value="true"/>
  31. </settings>
  32. <plugins>
  33. <plugin interceptor="com.tydic.fm.mybatis.pages.TPageInterceptor">
  34. <property name="databaseType" value="mysql" />
  35. </plugin>
  36. </plugins>
  37. </configuration>

==========

xml文件:

=====

然后就是代码使用了,

首先定义一个基础的 service:

  1. import java.util.List;
  2. import java.util.Map;
  3. import org.apache.ibatis.session.ResultHandler;
  4. import org.apache.ibatis.session.RowBounds;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import com.tydic.fm.mybatis.dao.SqlSessionDaoImpl;
  7.  
  8. public abstract class ParentService {
  9. @Autowired
  10. private SqlSessionDaoImpl sqlSessionDaoSupport;
  11.  
  12. /**
  13. * 查询方法(无参数+返回单行)
  14. *
  15. * @param routeObject
  16. * @param statement
  17. * @return
  18. */
  19. protected <T> T selectOne(Object routeObject, String statement) {
  20. return this.sqlSessionDaoSupport.getSqlSession().selectOne(routeObject, statement);
  21. }
  22.  
  23. /**
  24. * 查询参数(参数+返回单行)
  25. *
  26. * @param routeObject
  27. * @param statement
  28. * @param parameter
  29. * @return
  30. */
  31. protected <T> T selectOne(Object routeObject, String statement, Object parameter) {
  32. return this.sqlSessionDaoSupport.getSqlSession().selectOne(routeObject, statement, parameter);
  33. }
  34.  
  35. /**
  36. * 查询方法(参数+返回List)
  37. *
  38. * @param routeObject
  39. * @param statement
  40. * @return
  41. */
  42. protected <E> List<E> selectList(Object routeObject, String statement) {
  43. return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement);
  44. }
  45.  
  46. /**
  47. * 查询方法(参数+返回List)
  48. *
  49. * @param routeObject
  50. * @param statement
  51. * @param parameter
  52. * @return
  53. */
  54. protected <E> List<E> selectList(Object routeObject, String statement, Object parameter) {
  55. return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement, parameter);
  56. }
  57.  
  58. /**
  59. * 查询方法(参数+返回List+逻辑分页) 该分页方法不建议使用
  60. *
  61. * @param routeObject
  62. * @param statement
  63. * @param parameter
  64. * @param rowBounds
  65. * @return
  66. */
  67. protected <E> List<E> selectList(Object routeObject, String statement, Object parameter, RowBounds rowBounds) {
  68. return this.sqlSessionDaoSupport.getSqlSession().selectList(routeObject, statement, parameter, rowBounds);
  69. }
  70.  
  71. /**
  72. * 查询方法(无参数+返回List+指定mapKey)
  73. *
  74. * @param routeObject
  75. * @param statement
  76. * @param mapKey
  77. * @return
  78. */
  79. protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, String mapKey) {
  80. return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, mapKey);
  81. }
  82.  
  83. /**
  84. * 查询方法(参数+返回List+指定mapKey)
  85. *
  86. * @param routeObject
  87. * @param statement
  88. * @param parameter
  89. * @param mapKey
  90. * @return
  91. */
  92. protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, Object parameter, String mapKey) {
  93. return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, parameter, mapKey);
  94. }
  95.  
  96. /**
  97. * 查询方法(参数+返回List+指定mapKey+逻辑分页) 该分页方法不建议使用
  98. *
  99. * @param routeObject
  100. * @param statement
  101. * @param parameter
  102. * @param mapKey
  103. * @param rowBounds
  104. * @return
  105. */
  106. protected <K, V> Map<K, V> selectMap(Object routeObject, String statement, Object parameter, String mapKey, RowBounds rowBounds) {
  107. return this.sqlSessionDaoSupport.getSqlSession().selectMap(routeObject, statement, parameter, mapKey, rowBounds);
  108. }
  109.  
  110. /**
  111. * 查询方法(无参数+回调)
  112. *
  113. * @param routeObject
  114. * @param statement
  115. * @param handler
  116. */
  117. protected void select(Object routeObject, String statement, ResultHandler handler) {
  118. this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, handler);
  119. }
  120.  
  121. /**
  122. * 查询方法(参数+回调)
  123. *
  124. * @param routeObject
  125. * @param statement
  126. * @param parameter
  127. * @param handler
  128. */
  129. protected void select(Object routeObject, String statement, Object parameter, ResultHandler handler) {
  130. this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, parameter, handler);
  131. }
  132.  
  133. /**
  134. * 查询方法(参数+分页+回调)
  135. *
  136. * @param routeObject
  137. * @param statement
  138. * @param parameter
  139. * @param rowBounds
  140. * @param handler
  141. */
  142. protected void select(Object routeObject, String statement, Object parameter, RowBounds rowBounds, ResultHandler handler) {
  143. this.sqlSessionDaoSupport.getSqlSession().select(routeObject, statement, parameter, rowBounds, handler);
  144. }
  145.  
  146. /**
  147. * 插入(无参数)
  148. *
  149. * @param routeObject
  150. * @param statement
  151. * @return
  152. */
  153. protected int insert(Object routeObject, String statement) {
  154. return this.sqlSessionDaoSupport.getSqlSession().insert(routeObject, statement);
  155. }
  156.  
  157. /**
  158. * 插入(带参数)
  159. *
  160. * @param routeObject
  161. * @param statement
  162. * @param parameter
  163. * @return
  164. */
  165. protected int insert(Object routeObject, String statement, Object parameter) {
  166. return this.sqlSessionDaoSupport.getSqlSession().insert(routeObject, statement, parameter);
  167. }
  168.  
  169. /**
  170. * 更新(无参数)
  171. *
  172. * @param routeObject
  173. * @param statement
  174. * @return
  175. */
  176. protected int update(Object routeObject, String statement) {
  177. return this.sqlSessionDaoSupport.getSqlSession().update(routeObject, statement);
  178. }
  179.  
  180. /**
  181. * 更新(带参数)
  182. *
  183. * @param routeObject
  184. * @param statement
  185. * @param parameter
  186. * @return
  187. */
  188. protected int update(Object routeObject, String statement, Object parameter) {
  189. return this.sqlSessionDaoSupport.getSqlSession().update(routeObject, statement, parameter);
  190. }
  191.  
  192. /**
  193. * 删除(无参数)
  194. *
  195. * @param routeObject
  196. * @param statement
  197. * @return
  198. */
  199. protected int delete(Object routeObject, String statement) {
  200. return this.sqlSessionDaoSupport.getSqlSession().delete(routeObject, statement);
  201. }
  202.  
  203. /**
  204. * 删除(带参数)
  205. *
  206. * @param routeObject
  207. * @param statement
  208. * @param parameter
  209. * @return
  210. */
  211. protected int delete(Object routeObject, String statement, Object parameter) {
  212. return this.sqlSessionDaoSupport.getSqlSession().delete(routeObject, statement, parameter);
  213. }
  214. }

====

然后在具体的业务service中记承它,再实现业务接口,写代码:

  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.OutputStreamWriter;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.ArrayList;
  11. import java.util.Date;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15. import javax.annotation.Resource;
  16. import javax.servlet.ServletContext;
  17. import javax.servlet.http.HttpServletRequest;
  18.  
  19. import org.slf4j.Logger;
  20. import org.slf4j.LoggerFactory;
  21. import org.springframework.stereotype.Service;
  22.  
  23. @Service
  24. public class batchXXXNameServiceImpl extends ParentService implements batchXXXNameService {
  25.  
  26. private final static Logger logger = LoggerFactory.getLogger(batchXXXNameServiceImpl.class);
  27.  
  28. @Resource
  29. private batchXXXNameServiceSub batchXXXNameServiceSub;
  30.  
  31. //根据某参数 查询对应数据记录数量
  32. @Override
  33. public String queryWaitHandleCount(String jsonString){
  34. Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
  35. String count = this.selectOne("ds1", "batchXXX.queryWaitHandleCount",requestMap);
  36. Map<String, Object> resultMap = new HashMap<>();
  37. resultMap.put("count", count);
  38. return Util.getInterfaceRes(resultMap);
  39. }
  40.  
  41. //根据条件 查询对应数据列表
  42. @Override
  43. public String queryWaitHandleList(String jsonString) {
  44. Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
  45. List<Map> WaitHandleList = this.selectList("ds1", "batchXXX.queryWaitHandleList",requestMap);
  46. Map<String, Object> resultMap = new HashMap<>();
  47. resultMap.put("WAIT_HANDLE_LIST", WaitHandleList);
  48. return Util.getInterfaceRes(resultMap);
  49. }
  50.  
  51. ////更新数据
  52. @Override
  53. public String updateProvBatchCd(String jsonString) {
  54. Map<String, Object> requestMap = Util.getJsonRequestObject(jsonString);
  55. this.update("ds1", "batchXXX.updateProvBatchCd",requestMap);
  56. Map<String, Object> resultMap = new HashMap<>();
  57. return Util.getInterfaceRes(resultMap);
  58. }
  59.  
  60. }

Mybatis项目中不使用代理写法【我】的更多相关文章

  1. SpringBoot Mybatis项目中的多数据源支持

    1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...

  2. 项目中Service层的写法

    截取自项目中的一个service实现类,记录一下: base类 package com.bupt.auth.service.base; import javax.annotation.Resource ...

  3. Spring + SpringMVC + Mybatis项目中redis的配置及使用

    maven文件 <!-- redis --> <dependency> <groupId>redis.clients</groupId> <art ...

  4. javaweb项目中绝对路径的写法理解

    Tomcat的默认访问路径为http://localhost:8080,后需添加项目路径. 请求转发,是转发到本项目中的其他文件,所以在默认访问路径中添加了本项目的项目路径,故可以省略项目名称: re ...

  5. SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例

     要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...

  6. mybatis项目中,使用useSSL=true却报错

    今天在玩儿mybatis的时候遇到一个蛮有东西的事情:抛了一个让我折腾几个小时的错误,所以记录一下 这个错误有意思的地方就在于这里: 当使用useSSL安全连接时,抛出了上述的错误把useSSL改为f ...

  7. SpringBoot+MyBatis项目Dao层最简单写法

    前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...

  8. React项目中那些奇怪的写法

    1.在一个React组件里看到一个奇怪的写法: const {matchs} = this.props.matchs; 原来,是解构赋值,虽然听说过,但是看起来有点奇怪 下面做个实验: <scr ...

  9. 在springboot 和 mybatis 项目中想要显示sql 语句进行调试

    在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...

随机推荐

  1. RN 实战 & React Native 实战

    RN 实战 & React Native 实战 https://abc.xgqfrms.xyz/react-native-docs/ 0.59 https://github.com/xgqfr ...

  2. final关键字的用法

    final关键字的作用 1.被final修饰的类不能被继承 报错信息:cannot inherit from final 'com.dajia.test.Animal' 2.被final修饰的方法不能 ...

  3. 老男孩python学习自修第十七天【装饰器】

    装饰器:在某个方法执行前后去执行其他新定义的行为 例如: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ def before_say_hello(): pr ...

  4. java静态工厂

    本文摘自:https://www.jianshu.com/p/ceb5ec8f1174 本文略长,所以先来个内容提要 序:什么是静态工厂方法 Effective Java 2.1 静态工厂方法与构造器 ...

  5. 三、ASP.NET Core 部署Linux

    预备工作 1.删除dotnet core sdk sudo yum erase libunwind libicu 2.删除链接 sudo rm -rf /usr/local/bin 3.sudo yu ...

  6. 启用chacha20和salsa20等加密方法

    wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz tar zxf LATEST.tar.gz cd libsod ...

  7. play framework接收post请求json格式的参数

    大家在用play framework框架开发第三方调用你的接口的时候并且用json格式的参数post请求 ,参数接收是个问题 ,因为play对表单提交post请求有处理: 有两种方法: 1.直接形参列 ...

  8. 【建模应用】PLS偏最小二乘回归原理与应用

    @author:Andrew.Du 声明:本文为原创,转载请注明出处:http://www.cnblogs.com/duye/p/9031511.html,谢谢. 一.前言 1.目的: 我写这篇文章的 ...

  9. IntelliJ IDEA 导航的 20 大特性

    本文由 ImportNew - elviskang 翻译自 dzone.欢迎加入翻译小组.转载请见文末要求. 在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及 ...

  10. python BeautifulSoup库的基本使用

    Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以 ...