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= ...
随机推荐
- AspectJ用注解替换xml配置
AspectJ基于注解的使用 AspectJ简介 AspectJ是一个基于Java语言的AOP框架,一般 其主要用途:自定义开发 一般情况下spring自动生成代理,要配置aop, 首先确定目标类,a ...
- Yii2后台管理系统常规单据模块最佳实践
后台管理系统的常规单据通常包括数据,页面,功能:其中数据,页面,功能又可以细分如下: 分类 二级分类 主要内容 注意事项 例如 数据 数据库迁移脚本 用于数据表生成及转态回滚 1.是否需要增 ...
- SSM+shiro,所有配置文件,详细注释版,自用
spring配置文件applicationContext.xml,放在resources下 <?xml version="1.0" encoding="UTF-8& ...
- How to recovery compiz
sudo apt install compizconfig-settings-manager dconf reset -f /org/compiz/ setsid unity dconf list / ...
- 学习 Spring (十四) Introduction
Spring入门篇 学习笔记 Introduction 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由 中的 元素声明该元素用于声明所匹配的类型拥有一个新的 p ...
- Civil 3D 二次开发 创建AutoCAD对象—— 00 ——
不积跬步无以至千里,不积小流无以成江海.虽然创建一条直线.添加一个图层这样的小程序没有什么实际意义(内部命令很简单就可以完成),但对于初学二次开发的您来说,这可是一大步,这一步跨出去,您就跨进了二次开 ...
- java代码自动下载Spring Boot用户手册
本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...
- Go语言变量和常量
一.变量相关 1.变量声明 C# : int a; Go : var a int; 需要在前面加一个var关键字,后面定义类型 可以使用 var( a int; b string;)减少var 2.变 ...
- luogu P1816 【忠诚】
话说许多dalao都采取线段树A题可本蒟蒻不会啊, 暴力的我想出了暴力解法(快排) #include<cstdio> #include<algorithm> using nam ...
- JavaScript——JS屏蔽F12和右键
键盘表 来源:http://www.phpweblog.net/kiyone/archive/2007/04/19/1138.html 通过onkeydowm监听键盘按下事件,并修改键盘码 //禁止F ...