Mybatis项目中不使用代理写法【我】
首先 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项目中不使用代理写法【我】的更多相关文章
- SpringBoot Mybatis项目中的多数据源支持
1.概述 有时项目里里需要抽取不同系统中的数据源,需要访问不同的数据库,本文介绍在Springboot+Mybatis项目中如何支持多数据源操作. 有需要的同学可以下载 示例代码 项目结构如下: 2. ...
- 项目中Service层的写法
截取自项目中的一个service实现类,记录一下: base类 package com.bupt.auth.service.base; import javax.annotation.Resource ...
- Spring + SpringMVC + Mybatis项目中redis的配置及使用
maven文件 <!-- redis --> <dependency> <groupId>redis.clients</groupId> <art ...
- javaweb项目中绝对路径的写法理解
Tomcat的默认访问路径为http://localhost:8080,后需添加项目路径. 请求转发,是转发到本项目中的其他文件,所以在默认访问路径中添加了本项目的项目路径,故可以省略项目名称: re ...
- SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例
要搭建的项目的项目结构如下(使用的框架为:Spring.SpingMVC.MyBatis): 2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包): 其中 ...
- mybatis项目中,使用useSSL=true却报错
今天在玩儿mybatis的时候遇到一个蛮有东西的事情:抛了一个让我折腾几个小时的错误,所以记录一下 这个错误有意思的地方就在于这里: 当使用useSSL安全连接时,抛出了上述的错误把useSSL改为f ...
- SpringBoot+MyBatis项目Dao层最简单写法
前言 DAO(Data Access Object) 是数据访问层,说白了就是跟数据库打交道的,而数据库都有哪几种操作呢?没错,就是增删改查.这就意味着Dao层要提供增删改查操作. 不知道大家是怎么写 ...
- React项目中那些奇怪的写法
1.在一个React组件里看到一个奇怪的写法: const {matchs} = this.props.matchs; 原来,是解构赋值,虽然听说过,但是看起来有点奇怪 下面做个实验: <scr ...
- 在springboot 和 mybatis 项目中想要显示sql 语句进行调试
在springBoot+Mybatis日志显示SQL的执行情况的最简单方法就是在properties新增: logging.level.com.dy.springboot.server.mapper= ...
随机推荐
- 【转】MySQL sql_mode 说明(及处理一起 sql_mode 引发的问题)
1. MySQL 莫名变成了 Strict SQL Mode 最近测试组那边反应数据库部分写入失败,app层提示是插入成功,但表里面里面没有产生数据,而两个写入操作的另外一个表有数据.因为 inser ...
- B站弹幕姬(🐔)分析与开发(上篇)
辞职之后 休息了一段时间,最近准备开始恢复去工作的状态了,所以搞点事情来练练手.由于沉迷b站女妆大佬想做个收集弹幕的然后根据弹幕自动回复一些弹幕的东西.网上搜了一下有个c#的版本,感觉还做得不错,于是 ...
- 存储过程中的 SET XACT_ABORT ON 和事务
在存储过程中写SET XACT_ABORT ON 有什么用? SET XACT_ABORT ON是设置事务回滚的!当为ON时,如果你存储中的某个地方出了问题,整个事务中的语句都会回滚为OFF时,只回滚 ...
- web攻擊
一.dos攻擊 向服務器發送數量龐大的合法數據,讓服務器分不清是不是正常請求,導致服務器接收所有的請求.海量的數據請求會使得服務器停止服務和拒絕服務. 防禦:阿里云或其它資源服務器有專門web應用防火 ...
- 三、Docker网络
一.查看8001端口是否开启处监听状态 netstat -apnl | grep 8001 二.使用brctl show可以看到虚拟机的网络关系 brctl show docker每新建一个conta ...
- JS--bom对象:borswer object model浏览器对象模型
bom对象:borswer object model浏览器对象模型 navigator获取客户机的信息(浏览器的信息) navigator.appName;获得浏览器的名称 window:窗口对象 a ...
- Overrid Equals Defined Operator
public class Common { public override int GetHashCode() { return base.GetHashCode(); } public overri ...
- js 异步代码
这段时间一直在用node.js做毕设的后台,所以需要一些异步代码操作,主要的异步方式有:Promise.Generator 和 async / await,但下面主要讲 Promise 和 async ...
- 【AGC014E】Blue and Red Tree 并查集 启发式合并
题目描述 有一棵\(n\)个点的树,最开始所有边都是蓝边.每次你可以选择一条全是蓝边的路径,删掉其中一条,再把这两个端点之间连一条红边.再给你一棵树,这棵树的所有边都是红边,问你最终能不能把原来的树变 ...
- Linux qemu-nbd mount qemu disk image
Linux qemu-nbd mount qemu disk image deepin@deepin:~$ deepin@deepin:~$ qemu-nbd --help Usage: qemu-n ...