|@q!UoqhDI}=rASIy^Auho5##5bHiM3|j55dOSP3T#b4r<~S%+S<%s^*5pQEaln0LMD@O4QskB
z?P3uN!)u=X-PNd8U%Ty8z`=@XymPs$>P_Gwx7_3?D&7p4f*
zk{m$lc}5~-%YaFuG%#=SEv+kwOf8q85WRFLrVn5jhxQ2RR(kJ%#zv+%Heowtyidyb
z+-#ka64B5=Cof&LH=ebtL?M#Xc6U@fvK(3W*2a~vSG*d}=^v|5{eGj{^70a@hKAM0
zCl?rn3|l;`XsEf4TG)irlcWp@IQk1RwVTlGd_}lC(^0Z_np@6g!X)9wClQo<8geCk5~Q3-xD9LxEt(`pB`USX;AFu`H)>Z#`2Lcm~hco
zw{}H|6OdbNrhZIsmsWyM-W1H%zmLOi@G@k+3FG>_HP(;=i1A-B5QbaS1EyGgnS0*L
z$D}o}M5**{q;t!LLUAuS;1Mo*nKt0kixSMWkQ|B+_ZJHo*BpT@)DCY94S|fd-tLu?
zmi9R_8Y^78pN=%3=mIB$I2ogv;*E$M5lNMKbi;&+qvL3;z795Sg_jGpZj6h;E{R?h
zye6-jjhsf?s{l#V-K!A)z)1BaP0isB@261Jza$Sp*@EZi*-%Iz=CvDFF>72J?;kkK
zrsZ;F`y${s)Zr&tU0a28r^T2rfE=DZayEvB(z(4D)=rc=DY5pZ^dd5?DZ%Hm>#`
zuFkPr`isS4FC-|&~TwFUl$iMkooQrEUlIxM$0qS}q
z^q+$iiUGa&*N(+JqaPSjpt=aIH|Pf5+%68
zVaC!X0tMp%nUqkYwPH+{=iLI`ynS{cCv4=xec{iTv6lrp8lJ&vp24JOpc#xs0j-(z
zf{Y{`Gs2W0GYQ8LP7{4M`g23aEPaR1vPsYOKu~R5>PF#}rvv7N^A?$P8SL1*d5t*d
zd;uMZcV|WkVoq!?bp2?4Q-S5X*qJKhnYoFw7R+%iWE{aT$Rncxskx}H1orN
zZaB-N?19$;9jo6S3cFu92;HM1tAKu=&M89__QL~V5Kwl6f!6mzPHhQVOqnp}P;+^Y
zCJE-B_i2iLRqO0{qN{bBlD<2S$sJ&nx8*F2`l1k|4CGO666(;Q+5?XL>q1Onkz8@+
z7Va}bS?mfd9b>+jJ9WFPJgXAYO1-gYDGvx9$@ChV`QSk4_3jlcLXH$J2UtjaKp65?
zQ;x20?<+A=Tzzs@bIZO>joa7xI!iDbr4WrSoN2yDfZKrk;S#7313$=}Y;n1Ce9Cn0
z+Sio{$%$0divb1@2`L?H5GrYWNDf%;5#Mh-+g8WbL#ONp70W@QOKP>eeZ!A__(HYm`u0m<^y)0%ZBXFK4Su%GUSjn82z_PK)Vrq1@{
zMgvrhrfB$sqp|GXEe=2{yPe`kXra04b?PdF6hJhew&6aou3i7BjJ#dEI!?
z78LI1!c%vBx#MK(@IV>Awm8R`)3o`}e!OTQ`$@;tmwP=K0l-R7H{|HRL%pSD{7=8p
zwBxg#Vu8mr&8)I;1#VXkcCa;n%C2Ze?b+Z@iASPc{;`Uk#%=a=^Va4`!RE3AZe9Rh
zy7BFsR;7Tdx-oxJKF>n=9&OhfArbNVehx~Sf1lPFwQPX_Iz9bOr$wi-;`)pUSS8#u
zfVUz3#o%`!8ZV*88W}YFRjrV#Gu9~rb33QoAgbI`E&{^_yP*e@AfD9p{$|p`*9Me}
zh3)s)gUxq#D+c74j?8jZ`fPq0LZu}l{^qTDXQX~AUeqF}m8)>WO9S3kFc!d>W^4h&
zRbLepY=s#i=ebJ#YZRm7ROvp~H8=ZqU3I%^1L`q#T_84DXDCc2>wfbCbpf@w#>iFV
zi|ZDsXHC8@uE4_6?R!(z2-35c7YYObu?{WK0A$30CA^BjEVL>pg}w#*Ae_?qU4CfA
zvj0%4jHFzK?7nMwt%2e4tC>4q$%%B3F}oyY4_ajvK;Iy&wZb33(fX|+n-~qbhM5w6
zof=HkHSMSa&Ko`2xiOV~GB^efhuhazt)`2rR=RWz2tRz7vZc-X!I&9Uf$~0~eQiio
zcST6f{dbX*aIP-z^^;m^!E1lL8{`k4+Z3(8cR@2BLDgPw-Q8RP+k0Cg5D4yJ%+k%_
zS^e85%3_OYChA0BkzN2!=`-}%Lly&i^mo9um2r$@&1=%D*x%3
zEVp?Up75PqX#JD>I(Z(KmPPV}O?5ow9tL%46+U_J>}yb%V37+q0>xbE6kKez`$s!j
z_GGMJboY?58^MG*
zp)U1wOLEiI1Nvr`hHG+S{%(EGmpiI`tO;{2ev=aDE7W%-~?mkDqV-
nyMd$s6!L!^dHVnBU|+I)?BQ?al%LNIWHr8Hej9Vk?a6-tHY+};
literal 0
HcmV?d00001
diff --git a/spring/spring-druid-mybatis-annotation/README.md b/spring/spring-druid-mybatis-annotation/README.md
new file mode 100644
index 0000000..070582f
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/README.md
@@ -0,0 +1,488 @@
+# spring +druid+ mybatis(注解配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+ com.alibaba
+ druid
+ 1.1.12
+
+
+
+
+```
+
+2、新建 DispatcherServletInitializer.java继承自AbstractAnnotationConfigDispatcherServletInitializer,等价于我们在web.xml中配置的前端控制器
+
+```java
+public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ protected Class>[] getRootConfigClasses() {
+ return new Class[0];
+ }
+
+ protected Class>[] getServletConfigClasses() {
+ return new Class[]{ServletConfig.class};
+ }
+
+ protected String[] getServletMappings() {
+ return new String[]{"/"};
+ }
+}
+```
+
+3、基础servlet 3.0的支持,可以采用注解的方式注册druid的servlet和filter
+
+ 注:关于servlet 注解支持可以查看[Servlet 规范文档](https://github.com/heibaiying/spring-samples-for-all/blob/master/referenced%20documents/Servlet3.1%E8%A7%84%E8%8C%83%EF%BC%88%E6%9C%80%E7%BB%88%E7%89%88%EF%BC%89.pdf)中**8.1小节 注解和可插拔性**
+
+```java
+package com.heibaiying.config.druid;
+
+import com.alibaba.druid.support.http.StatViewServlet;
+
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+
+/**
+ * @author : heibaiying
+ * @description : 配置监控页面用户名密码
+ */
+@WebServlet(urlPatterns = "/druid/*",
+ initParams={
+ @WebInitParam(name="resetEnable",value="true"),
+ @WebInitParam(name="loginUsername",value="druid"),
+ @WebInitParam(name="loginPassword",value="druid")
+ })
+public class DruidStatViewServlet extends StatViewServlet {
+}
+
+```
+
+```java
+package com.heibaiying.config.druid;
+
+import com.alibaba.druid.support.http.WebStatFilter;
+
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebInitParam;
+
+/**
+ * @author : heibaiying
+ * @description : WebStatFilter用于采集web-jdbc关联监控的数据
+ */
+@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
+ initParams={
+ @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
+ }
+)
+public class DruidStatFilter extends WebStatFilter {
+
+}
+
+```
+
+4、在resources文件夹下新建数据库配置文件mysql.properties、oracle.properties
+
+```properties
+# mysql 数据库配置
+mysql.driverClassName=com.mysql.jdbc.Driver
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+```
+
+```properties
+# oracle 数据库配置
+oracle.driverClassName=oracle.jdbc.driver.OracleDriver
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+5、在新建数据库配置映射类DataSourceConfig.java
+
+```java
+package com.heibaiying.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Configuration
+@PropertySource(value = "classpath:mysql.properties")
+@Data
+public class DataSourceConfig {
+
+ @Value("${mysql.driverClassName}")
+ private String driverClassName;
+ @Value("${mysql.url}")
+ private String url;
+ @Value("${mysql.username}")
+ private String username;
+ @Value("${mysql.password}")
+ private String password;
+
+}
+
+```
+
+6、新建ServletConfig.java,进行数据库相关配置
+
+```java
+package com.heibaiying.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+;
+
+
+/**
+ * @author : heibaiying
+ */
+@Configuration
+@EnableTransactionManagement // 开启声明式事务处理 等价于xml中
+@EnableWebMvc
+@ComponentScan(basePackages = {"com.heibaiying.*"})
+public class ServletConfig implements WebMvcConfigurer {
+
+ /**
+ * 配置静态资源处理器
+ */
+ public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
+ configurer.enable();
+ }
+
+ /**
+ * 配置druid 数据源
+ */
+ @Bean
+ public DruidDataSource dataSource(DataSourceConfig sourceConfig) throws SQLException {
+ DruidDataSource dataSource = new DruidDataSource();
+ dataSource.setUrl(sourceConfig.getUrl());
+ dataSource.setUsername(sourceConfig.getUsername());
+ dataSource.setPassword(sourceConfig.getPassword());
+
+ // 配置获取连接等待超时的时间
+ dataSource.setMaxWait(60000);
+
+ // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ dataSource.setTimeBetweenEvictionRunsMillis(2000);
+
+ // 配置一个连接在池中最小生存的时间,单位是毫秒
+ dataSource.setMinEvictableIdleTimeMillis(600000);
+ dataSource.setMaxEvictableIdleTimeMillis(900000);
+
+ /* validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
+ * 但是在 oracle 数据库下需要写成 select 'x' from dual 不然实例化数据源的时候就会失败,
+ * 这是由于oracle 和 mysql 语法间的差异造成的
+ */
+ dataSource.setValidationQuery("select 'x'");
+
+ // 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+ dataSource.setTestWhileIdle(true);
+ // 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+ dataSource.setTestOnBorrow(false);
+ // 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
+ dataSource.setTestOnReturn(false);
+
+ // 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
+ dataSource.setPhyMaxUseCount(100000);
+
+ /*配置监控统计拦截的filters Druid连接池的监控信息主要是通过StatFilter 采集的,
+ 采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等*/
+ dataSource.setFilters("stat");
+
+ return dataSource;
+ }
+
+
+ /**
+ * 配置mybatis 会话工厂
+ *
+ * @param dataSource 这个参数的名称需要保持和上面方法名一致 才能自动注入,因为
+ * 采用@Bean注解生成的bean 默认采用方法名为名称,当然也可以在使用@Bean时指定name属性
+ */
+ @Bean
+ public SqlSessionFactoryBean sessionFactoryBean(DruidDataSource dataSource) throws IOException {
+ SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+ sessionFactoryBean.setDataSource(dataSource);
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ sessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mappers/**/*.xml"));
+ sessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatisConfig.xml"));
+ return sessionFactoryBean;
+ }
+
+ /**
+ * 配置mybatis 会话工厂
+ */
+ @Bean
+ public MapperScannerConfigurer MapperScannerConfigurer() {
+ MapperScannerConfigurer configurer = new MapperScannerConfigurer();
+ configurer.setSqlSessionFactoryBeanName("sessionFactoryBean");
+ configurer.setBasePackage("com.heibaiying.dao");
+ return configurer;
+ }
+
+ /**
+ * 定义事务管理器
+ */
+ @Bean
+ public DataSourceTransactionManager transactionManager(DruidDataSource dataSource) {
+ DataSourceTransactionManager manager = new DataSourceTransactionManager();
+ manager.setDataSource(dataSource);
+ return manager;
+ }
+
+}
+
+```
+
+7、新建mybtais 配置文件 更多settings配置项可以参考[官方文档](http://www.mybatis.org/mybatis-3/zh/configuration.html)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+8、新建查询接口及其对应的mapper文件
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+```mysql
+public interface OracleDao {
+
+ List queryById(long id);
+}
+
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+9.新建测试controller进行测试
+
+```java
+package com.heibaiying.controller;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class MysqlController {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @GetMapping("relation/{id}")
+ public String get(@PathVariable(name = "id") String id) {
+ return mysqlDao.queryById(id).get(0).toString();
+ }
+}
+
+```
+
+```java
+package com.heibaiying.controller;
+
+import com.heibaiying.dao.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class OracleController {
+
+ @Autowired
+ private OracleDao oracleDao;
+
+ @GetMapping("flow/{id}")
+ public String get(@PathVariable(name = "id") Long id) {
+ return oracleDao.queryById(id).get(0).toString();
+ }
+}
+
+```
+
+10、druid 监控页面访问地址http://localhost:8080/druid/index.html
+
+
+
diff --git a/spring/spring-druid-mybatis-annotation/pom.xml b/spring/spring-druid-mybatis-annotation/pom.xml
new file mode 100644
index 0000000..1d4f41b
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/pom.xml
@@ -0,0 +1,101 @@
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+ com.alibaba
+ druid
+ 1.1.12
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Flow.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Flow.java
new file mode 100644
index 0000000..cdebadf
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Flow.java
@@ -0,0 +1,18 @@
+package com.heibaiying.bean;
+
+import lombok.Data;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Data
+public class Flow {
+
+ private long id;
+
+ private long flowId;
+
+ private long plugId;
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Relation.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Relation.java
new file mode 100644
index 0000000..74adb91
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/bean/Relation.java
@@ -0,0 +1,16 @@
+package com.heibaiying.bean;
+
+import lombok.Data;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+@Data
+public class Relation {
+
+ private String id;
+
+ private String name;
+
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DataSourceConfig.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DataSourceConfig.java
new file mode 100644
index 0000000..51dd508
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DataSourceConfig.java
@@ -0,0 +1,31 @@
+package com.heibaiying.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Configuration
+@PropertySource(value = "classpath:mysql.properties")
+@Data
+public class DataSourceConfig {
+
+ /**
+ * 感觉这种注入的方式并不够好
+ * 没有spring-boot中使用@ConfigurationProperties(prefix = "config")指定前缀注入的方式优雅
+ */
+ @Value("${mysql.driverClassName}")
+ private String driverClassName;
+ @Value("${mysql.url}")
+ private String url;
+ @Value("${mysql.username}")
+ private String username;
+ @Value("${mysql.password}")
+ private String password;
+
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DispatcherServletInitializer.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DispatcherServletInitializer.java
new file mode 100644
index 0000000..fb2f8b7
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/DispatcherServletInitializer.java
@@ -0,0 +1,23 @@
+package com.heibaiying.config;
+
+import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
+
+/**
+ * @author : heibaiying
+ */
+
+public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ protected Class>[] getRootConfigClasses() {
+ return new Class[0];
+ }
+
+ protected Class>[] getServletConfigClasses() {
+ return new Class[]{ServletConfig.class};
+ }
+
+ protected String[] getServletMappings() {
+ return new String[]{"/"};
+ }
+
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/ServletConfig.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/ServletConfig.java
new file mode 100644
index 0000000..39ad5fa
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/ServletConfig.java
@@ -0,0 +1,119 @@
+package com.heibaiying.config;
+
+import com.alibaba.druid.pool.DruidDataSource;
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.io.IOException;
+import java.sql.SQLException;
+
+;
+
+
+/**
+ * @author : heibaiying
+ */
+@Configuration
+@EnableTransactionManagement // 开启声明式事务处理 等价于xml中
+@EnableWebMvc
+@ComponentScan(basePackages = {"com.heibaiying.*"})
+public class ServletConfig implements WebMvcConfigurer {
+
+ /**
+ * 配置静态资源处理器
+ */
+ public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
+ configurer.enable();
+ }
+
+ /**
+ * 配置druid 数据源
+ */
+ @Bean
+ public DruidDataSource dataSource(DataSourceConfig sourceConfig) throws SQLException {
+ DruidDataSource dataSource = new DruidDataSource();
+ dataSource.setUrl(sourceConfig.getUrl());
+ dataSource.setUsername(sourceConfig.getUsername());
+ dataSource.setPassword(sourceConfig.getPassword());
+
+ // 配置获取连接等待超时的时间
+ dataSource.setMaxWait(60000);
+
+ // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+ dataSource.setTimeBetweenEvictionRunsMillis(2000);
+
+ // 配置一个连接在池中最小生存的时间,单位是毫秒
+ dataSource.setMinEvictableIdleTimeMillis(600000);
+ dataSource.setMaxEvictableIdleTimeMillis(900000);
+
+ /* validationQuery 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。
+ * 但是在 oracle 数据库下需要写成 select 'x' from dual 不然实例化数据源的时候就会失败,
+ * 这是由于oracle 和 mysql 语法间的差异造成的
+ */
+ dataSource.setValidationQuery("select 'x'");
+
+ // 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
+ dataSource.setTestWhileIdle(true);
+ // 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
+ dataSource.setTestOnBorrow(false);
+ // 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
+ dataSource.setTestOnReturn(false);
+
+ // 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
+ dataSource.setPhyMaxUseCount(100000);
+
+ /*配置监控统计拦截的filters Druid连接池的监控信息主要是通过StatFilter 采集的,
+ 采集的信息非常全面,包括SQL执行、并发、慢查、执行时间区间分布等*/
+ dataSource.setFilters("stat");
+
+ return dataSource;
+ }
+
+
+ /**
+ * 配置mybatis 会话工厂
+ *
+ * @param dataSource 这个参数的名称需要保持和上面方法名一致 才能自动注入,因为
+ * 采用@Bean注解生成的bean 默认采用方法名为名称,当然也可以在使用@Bean时指定name属性
+ */
+ @Bean
+ public SqlSessionFactoryBean sessionFactoryBean(DruidDataSource dataSource) throws IOException {
+ SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+ sessionFactoryBean.setDataSource(dataSource);
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ sessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mappers/**/*.xml"));
+ sessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatisConfig.xml"));
+ return sessionFactoryBean;
+ }
+
+ /**
+ * 配置mybatis 会话工厂
+ */
+ @Bean
+ public MapperScannerConfigurer MapperScannerConfigurer() {
+ MapperScannerConfigurer configurer = new MapperScannerConfigurer();
+ configurer.setSqlSessionFactoryBeanName("sessionFactoryBean");
+ configurer.setBasePackage("com.heibaiying.dao");
+ return configurer;
+ }
+
+ /**
+ * 定义事务管理器
+ */
+ @Bean
+ public DataSourceTransactionManager transactionManager(DruidDataSource dataSource) {
+ DataSourceTransactionManager manager = new DataSourceTransactionManager();
+ manager.setDataSource(dataSource);
+ return manager;
+ }
+
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatFilter.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatFilter.java
new file mode 100644
index 0000000..146440e
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatFilter.java
@@ -0,0 +1,19 @@
+package com.heibaiying.config.druid;
+
+import com.alibaba.druid.support.http.WebStatFilter;
+
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebInitParam;
+
+/**
+ * @author : heibaiying
+ * @description : WebStatFilter用于采集web-jdbc关联监控的数据
+ */
+@WebFilter(filterName="druidWebStatFilter",urlPatterns="/*",
+ initParams={
+ @WebInitParam(name="exclusions",value="*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源
+ }
+)
+public class DruidStatFilter extends WebStatFilter {
+
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatViewServlet.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatViewServlet.java
new file mode 100644
index 0000000..27d9451
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/config/druid/DruidStatViewServlet.java
@@ -0,0 +1,19 @@
+package com.heibaiying.config.druid;
+
+import com.alibaba.druid.support.http.StatViewServlet;
+
+import javax.servlet.annotation.WebInitParam;
+import javax.servlet.annotation.WebServlet;
+
+/**
+ * @author : heibaiying
+ * @description : 配置监控页面用户名密码
+ */
+@WebServlet(urlPatterns = "/druid/*",
+ initParams={
+ @WebInitParam(name="resetEnable",value="true"),
+ @WebInitParam(name="loginUsername",value="druid"),
+ @WebInitParam(name="loginPassword",value="druid")
+ })
+public class DruidStatViewServlet extends StatViewServlet {
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/MysqlController.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/MysqlController.java
new file mode 100644
index 0000000..079664d
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/MysqlController.java
@@ -0,0 +1,24 @@
+package com.heibaiying.controller;
+
+import com.heibaiying.dao.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class MysqlController {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @GetMapping("relation/{id}")
+ public String get(@PathVariable(name = "id") String id) {
+ return mysqlDao.queryById(id).get(0).toString();
+ }
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/OracleController.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/OracleController.java
new file mode 100644
index 0000000..f3df7b7
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/controller/OracleController.java
@@ -0,0 +1,24 @@
+package com.heibaiying.controller;
+
+import com.heibaiying.dao.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class OracleController {
+
+ @Autowired
+ private OracleDao oracleDao;
+
+ @GetMapping("flow/{id}")
+ public String get(@PathVariable(name = "id") Long id) {
+ return oracleDao.queryById(id).get(0).toString();
+ }
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java
new file mode 100644
index 0000000..c89e188
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java
@@ -0,0 +1,17 @@
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Mapper
+public interface MysqlDao {
+
+ List queryById(String id);
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java
new file mode 100644
index 0000000..62cbff2
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java
@@ -0,0 +1,16 @@
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+@Mapper
+public interface OracleDao {
+
+ List queryById(long id);
+}
diff --git a/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Flow.xml b/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Flow.xml
new file mode 100644
index 0000000..b2f83a2
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Flow.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Relation.xml b/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Relation.xml
new file mode 100644
index 0000000..e882900
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/resources/mappers/Relation.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis-annotation/src/main/resources/mybatisConfig.xml b/spring/spring-druid-mybatis-annotation/src/main/resources/mybatisConfig.xml
new file mode 100644
index 0000000..d60965c
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/resources/mybatisConfig.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring/spring-druid-mybatis-annotation/src/main/resources/mysql.properties b/spring/spring-druid-mybatis-annotation/src/main/resources/mysql.properties
new file mode 100644
index 0000000..e860927
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/resources/mysql.properties
@@ -0,0 +1,4 @@
+# mysql ݿ
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
diff --git a/spring/spring-druid-mybatis-annotation/src/main/resources/oracle.properties b/spring/spring-druid-mybatis-annotation/src/main/resources/oracle.properties
new file mode 100644
index 0000000..f51ea9f
--- /dev/null
+++ b/spring/spring-druid-mybatis-annotation/src/main/resources/oracle.properties
@@ -0,0 +1,4 @@
+# oracle ݿ
+oracle.url=jdbc:oracle:thin:@//IPַ:˿ں/ݿʵ
+oracle.username=û
+oracle.password=
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/README.md b/spring/spring-druid-mybatis/README.md
new file mode 100644
index 0000000..8b4acaf
--- /dev/null
+++ b/spring/spring-druid-mybatis/README.md
@@ -0,0 +1,438 @@
+# spring +druid+ mybatis(xml配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+ com.alibaba
+ druid
+ 1.1.12
+
+
+
+
+```
+
+2、在web.xml 进行如下配置
+
+```xml
+
+
+
+
+
+ springMvc
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ classpath:springApplication.xml
+
+ 1
+
+
+
+ springMvc
+ /
+
+
+
+
+ DruidStatView
+ com.alibaba.druid.support.http.StatViewServlet
+
+
+ resetEnable
+ true
+
+
+
+ loginUsername
+ druid
+
+
+
+ loginPassword
+ druid
+
+
+
+ DruidStatView
+ /druid/*
+
+
+
+
+ DruidWebStatFilter
+ com.alibaba.druid.support.http.WebStatFilter
+
+ exclusions
+ *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
+
+
+
+ DruidWebStatFilter
+ /*
+
+
+
+
+```
+
+3、在resources文件夹下新建数据库配置文件jdbc.properties
+
+```properties
+# mysql 数据库配置
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+
+# oracle 数据库配置
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+4、在resources文件夹下创建springApplication.xml 配置文件和druid.xml配置文件
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+5、新建mybtais 配置文件 更多settings配置项可以参考[官方文档](http://www.mybatis.org/mybatis-3/zh/configuration.html)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+6、新建查询接口及其对应的mapper文件
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+```mysql
+public interface OracleDao {
+
+ List queryById(long id);
+}
+
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+7.新建测试controller进行测试
+
+```java
+package com.heibaiying.controller;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class MysqlController {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @GetMapping("relation/{id}")
+ public String get(@PathVariable(name = "id") String id) {
+ return mysqlDao.queryById(id).get(0).toString();
+ }
+}
+
+```
+
+```java
+package com.heibaiying.controller;
+
+import com.heibaiying.dao.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class OracleController {
+
+ @Autowired
+ private OracleDao oracleDao;
+
+ @GetMapping("flow/{id}")
+ public String get(@PathVariable(name = "id") Long id) {
+ return oracleDao.queryById(id).get(0).toString();
+ }
+}
+
+```
+
+8、druid 监控页面访问地址http://localhost:8080/druid/index.html
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/pom.xml b/spring/spring-druid-mybatis/pom.xml
new file mode 100644
index 0000000..1d4f41b
--- /dev/null
+++ b/spring/spring-druid-mybatis/pom.xml
@@ -0,0 +1,101 @@
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+ com.alibaba
+ druid
+ 1.1.12
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Flow.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Flow.java
new file mode 100644
index 0000000..cdebadf
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Flow.java
@@ -0,0 +1,18 @@
+package com.heibaiying.bean;
+
+import lombok.Data;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Data
+public class Flow {
+
+ private long id;
+
+ private long flowId;
+
+ private long plugId;
+}
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Relation.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Relation.java
new file mode 100644
index 0000000..74adb91
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/bean/Relation.java
@@ -0,0 +1,16 @@
+package com.heibaiying.bean;
+
+import lombok.Data;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+@Data
+public class Relation {
+
+ private String id;
+
+ private String name;
+
+}
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/MysqlController.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/MysqlController.java
new file mode 100644
index 0000000..a107a07
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/MysqlController.java
@@ -0,0 +1,27 @@
+package com.heibaiying.controller;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class MysqlController {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @GetMapping("relation/{id}")
+ public String get(@PathVariable(name = "id") String id) {
+ return mysqlDao.queryById(id).get(0).toString();
+ }
+}
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/OracleController.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/OracleController.java
new file mode 100644
index 0000000..f3df7b7
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/controller/OracleController.java
@@ -0,0 +1,24 @@
+package com.heibaiying.controller;
+
+import com.heibaiying.dao.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RestController
+public class OracleController {
+
+ @Autowired
+ private OracleDao oracleDao;
+
+ @GetMapping("flow/{id}")
+ public String get(@PathVariable(name = "id") Long id) {
+ return oracleDao.queryById(id).get(0).toString();
+ }
+}
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java
new file mode 100644
index 0000000..cba54bc
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java
@@ -0,0 +1,14 @@
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+public interface MysqlDao {
+
+ List queryById(String id);
+}
diff --git a/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java
new file mode 100644
index 0000000..c3b0d0b
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java
@@ -0,0 +1,14 @@
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+public interface OracleDao {
+
+ List queryById(long id);
+}
diff --git a/spring/spring-druid-mybatis/src/main/resources/druid.xml b/spring/spring-druid-mybatis/src/main/resources/druid.xml
new file mode 100644
index 0000000..dd136ee
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/druid.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/resources/jdbc.properties b/spring/spring-druid-mybatis/src/main/resources/jdbc.properties
new file mode 100644
index 0000000..e633488
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/jdbc.properties
@@ -0,0 +1,9 @@
+# mysql ݿ
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+
+# oracle ݿ
+oracle.url=jdbc:oracle:thin:@//IPַ:˿ں/ݿʵ
+oracle.username=û
+oracle.password=
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/resources/mappers/Flow.xml b/spring/spring-druid-mybatis/src/main/resources/mappers/Flow.xml
new file mode 100644
index 0000000..b2f83a2
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/mappers/Flow.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/resources/mappers/Relation.xml b/spring/spring-druid-mybatis/src/main/resources/mappers/Relation.xml
new file mode 100644
index 0000000..e882900
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/mappers/Relation.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/resources/mybatisConfig.xml b/spring/spring-druid-mybatis/src/main/resources/mybatisConfig.xml
new file mode 100644
index 0000000..d60965c
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/mybatisConfig.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring/spring-druid-mybatis/src/main/resources/springApplication.xml b/spring/spring-druid-mybatis/src/main/resources/springApplication.xml
new file mode 100644
index 0000000..ef93af8
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/resources/springApplication.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/webapp/WEB-INF/web.xml b/spring/spring-druid-mybatis/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..1b0fa72
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+ springMvc
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ classpath:springApplication.xml
+
+ 1
+
+
+
+ springMvc
+ /
+
+
+
+
+ DruidStatView
+ com.alibaba.druid.support.http.StatViewServlet
+
+
+ resetEnable
+ true
+
+
+
+ loginUsername
+ druid
+
+
+
+ loginPassword
+ druid
+
+
+
+ DruidStatView
+ /druid/*
+
+
+
+
+ DruidWebStatFilter
+ com.alibaba.druid.support.http.WebStatFilter
+
+ exclusions
+ *.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*
+
+
+
+ DruidWebStatFilter
+ /*
+
+
+
+
\ No newline at end of file
diff --git a/spring/spring-druid-mybatis/src/main/webapp/index.jsp b/spring/spring-druid-mybatis/src/main/webapp/index.jsp
new file mode 100644
index 0000000..47961e3
--- /dev/null
+++ b/spring/spring-druid-mybatis/src/main/webapp/index.jsp
@@ -0,0 +1,9 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ index
+
+
+ hello Spring !
+
+
\ No newline at end of file
diff --git a/spring/spring-jdbc-annotation/README.md b/spring/spring-jdbc-annotation/README.md
new file mode 100644
index 0000000..e13afda
--- /dev/null
+++ b/spring/spring-jdbc-annotation/README.md
@@ -0,0 +1,425 @@
+# spring 整合 jdbc template(注解配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+
+```
+
+2、新建 DispatcherServletInitializer.java继承自AbstractAnnotationConfigDispatcherServletInitializer,等价于我们在web.xml中配置的前端控制器
+
+```java
+public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ protected Class>[] getRootConfigClasses() {
+ return new Class[0];
+ }
+
+ protected Class>[] getServletConfigClasses() {
+ return new Class[]{ServletConfig.class};
+ }
+
+ protected String[] getServletMappings() {
+ return new String[]{"/"};
+ }
+}
+```
+
+3、在resources文件夹下新建数据库配置文件mysql.properties、oracle.properties
+
+```properties
+# mysql 数据库配置
+mysql.driverClassName=com.mysql.jdbc.Driver
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+```
+
+```properties
+# oracle 数据库配置
+oracle.driverClassName=oracle.jdbc.driver.OracleDriver
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+4、在新建数据库配置映射类DataSourceConfig.java
+
+```java
+package com.heibaiying.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Configuration
+@PropertySource(value = "classpath:mysql.properties")
+@Data
+public class DataSourceConfig {
+
+ @Value("${mysql.driverClassName}")
+ private String driverClassName;
+ @Value("${mysql.url}")
+ private String url;
+ @Value("${mysql.username}")
+ private String username;
+ @Value("${mysql.password}")
+ private String password;
+
+}
+
+```
+
+5、新建ServletConfig.java,进行数据库相关配置
+
+```java
+package com.heibaiying.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @author : heibaiying
+ */
+@Configuration
+@EnableTransactionManagement // 开启声明式事务处理 等价于xml中
+@ComponentScan(basePackages = {"com.heibaiying.*"})
+public class ServletConfig implements WebMvcConfigurer {
+
+ /**
+ * 配置数据源
+ */
+ @Bean
+ public DriverManagerDataSource dataSource(DataSourceConfig sourceConfig) {
+ DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setDriverClassName(sourceConfig.getDriverClassName());
+ dataSource.setUrl(sourceConfig.getUrl());
+ dataSource.setUsername(sourceConfig.getUsername());
+ dataSource.setPassword(sourceConfig.getPassword());
+ return dataSource;
+ }
+
+ /**
+ * 配置jdbcTemplate
+ * @param dataSource 这个参数的名称需要保持和上面方法名一致 才能自动注入,因为
+ * 采用@Bean注解生成的bean 默认采用方法名为名称,当然也可以在使用@Bean时指定name属性
+ */
+ @Bean
+ public JdbcTemplate jdbcTemplate(DriverManagerDataSource dataSource) {
+ JdbcTemplate jdbcTemplate = new JdbcTemplate();
+ jdbcTemplate.setDataSource(dataSource);
+ return jdbcTemplate;
+ }
+
+ /**
+ * 定义事务管理器
+ */
+ @Bean
+ public DataSourceTransactionManager transactionManager(DriverManagerDataSource dataSource) {
+ DataSourceTransactionManager manager = new DataSourceTransactionManager();
+ manager.setDataSource(dataSource);
+ return manager;
+ }
+
+}
+```
+
+6、新建查询接口及其实现类,这里我查询的表是mysql和oracle中的字典表
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.impl.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Repository
+public class MysqlDaoImpl implements MysqlDao {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ /**
+ * 更多JDBC 的使用可以参考官方文档
+ * @see JdbcTemplate
+ */
+ public List get() {
+ List relations = jdbcTemplate.query("select * from help_keyword where help_keyword_id = ? ", new Object[]{691},
+ new RowMapper() {
+ public Relation mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Relation relation = new Relation();
+ relation.setId(rs.getString("help_keyword_id"));
+ relation.setName(rs.getString("name"));
+ return relation;
+ }
+
+ });
+ return relations;
+ }
+}
+
+```
+
+```mysql
+package com.heibaiying.dao.impl;
+
+import com.heibaiying.bean.Flow;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+public interface OracleDao {
+
+ List get();
+}
+
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.dao.impl.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Repository
+public class OracleDaoImpl implements OracleDao {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ /**
+ * 更多JDBC 的使用可以参考官方文档
+ * @see JdbcTemplate
+ */
+ public List get() {
+ List flows = jdbcTemplate.query("select * from APEX_030200.WWV_FLOW_CALS where ID = ? ", new Object[]{217584603977429772L},
+ new RowMapper() {
+ public Flow mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Flow flow = new Flow();
+ flow.setId(rs.getLong("ID"));
+ flow.setFlowId(rs.getLong("FLOW_ID"));
+ flow.setPlugId(rs.getLong("PLUG_ID"));
+ return flow;
+ }
+
+ });
+ return flows;
+ }
+}
+
+```
+
+7、新建测试类进行测试
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.config.DispatcherServletInitializer;
+import com.heibaiying.config.ServletConfig;
+import com.heibaiying.dao.impl.MysqlDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {DispatcherServletInitializer.class, ServletConfig.class})
+public class MysqlDaoTest {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @Test
+ public void get() {
+ List relations = mysqlDao.get();
+ if (relations != null) {
+ for (Relation relation : relations) {
+ System.out.println(relation.getId() + " " + relation.getName());
+ }
+ }
+ }
+}
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.config.DispatcherServletInitializer;
+import com.heibaiying.config.ServletConfig;
+import com.heibaiying.dao.impl.OracleDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {DispatcherServletInitializer.class, ServletConfig.class})
+public class OracleDaoTest {
+
+ /*注入接口时: 如果接口有多个实现类 可以用这个指定具体的实现类*/
+ @Qualifier("oracleDaoImpl")
+ @Autowired
+ private OracleDao oracleDao;
+
+ @Test
+ public void get() {
+ List flows = oracleDao.get();
+ if (flows != null) {
+ for (Flow flow : flows) {
+ System.out.println(flow.getId() + " " + flow.getPlugId());
+ }
+ }
+ }
+}
+
+
+```
+
diff --git a/spring/spring-jdbc-annotation/src/main/java/com/heibaiying/config/ServletConfig.java b/spring/spring-jdbc-annotation/src/main/java/com/heibaiying/config/ServletConfig.java
index 549574d..43face4 100644
--- a/spring/spring-jdbc-annotation/src/main/java/com/heibaiying/config/ServletConfig.java
+++ b/spring/spring-jdbc-annotation/src/main/java/com/heibaiying/config/ServletConfig.java
@@ -1,16 +1,14 @@
package com.heibaiying.config;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
-import org.springframework.context.annotation.Configuration;;
+import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
/**
* @author : heibaiying
*/
diff --git a/spring/spring-jdbc/README.md b/spring/spring-jdbc/README.md
new file mode 100644
index 0000000..9d92447
--- /dev/null
+++ b/spring/spring-jdbc/README.md
@@ -0,0 +1,384 @@
+# spring 整合 jdbc template(xml配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+
+```
+
+2、在web.xml 进行如下配置
+
+```xml
+
+
+
+
+
+ springMvc
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ classpath:springApplication.xml
+
+ 1
+
+
+
+ springMvc
+ /
+
+
+
+```
+
+3、在resources文件夹下新建数据库配置文件jdbc.properties
+
+```properties
+# mysql 数据库配置
+mysql.driverClassName=com.mysql.jdbc.Driver
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+
+# oracle 数据库配置
+oracle.driverClassName=oracle.jdbc.driver.OracleDriver
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+4、在resources文件夹下创建springApplication.xml 配置文件
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+5、新建查询接口及其实现类,这里我查询的表是mysql和oracle中的字典表
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.impl.MysqlDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Repository
+public class MysqlDaoImpl implements MysqlDao {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ /**
+ * 更多JDBC 的使用可以参考官方文档
+ * @see JdbcTemplate
+ */
+ public List get() {
+ List relations = jdbcTemplate.query("select * from help_keyword where help_keyword_id = ? ", new Object[]{691},
+ new RowMapper() {
+ public Relation mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Relation relation = new Relation();
+ relation.setId(rs.getString("help_keyword_id"));
+ relation.setName(rs.getString("name"));
+ return relation;
+ }
+
+ });
+ return relations;
+ }
+}
+
+```
+
+```mysql
+package com.heibaiying.dao.impl;
+
+import com.heibaiying.bean.Flow;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+public interface OracleDao {
+
+ List get();
+}
+
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.dao.impl.OracleDao;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.stereotype.Repository;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Repository
+public class OracleDaoImpl implements OracleDao {
+
+ @Autowired
+ private JdbcTemplate jdbcTemplate;
+
+ /**
+ * 更多JDBC 的使用可以参考官方文档
+ * @see JdbcTemplate
+ */
+ public List get() {
+ List flows = jdbcTemplate.query("select * from APEX_030200.WWV_FLOW_CALS where ID = ? ", new Object[]{217584603977429772L},
+ new RowMapper() {
+ public Flow mapRow(ResultSet rs, int rowNum) throws SQLException {
+ Flow flow = new Flow();
+ flow.setId(rs.getLong("ID"));
+ flow.setFlowId(rs.getLong("FLOW_ID"));
+ flow.setPlugId(rs.getLong("PLUG_ID"));
+ return flow;
+ }
+
+ });
+ return flows;
+ }
+}
+
+```
+
+6.新建测试类进行测试
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.impl.MysqlDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration({"classpath:springApplication.xml"})
+public class MysqlDaoTest {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @Test
+ public void get() {
+ List relations = mysqlDao.get();
+ if (relations != null) {
+ for (Relation relation : relations) {
+ System.out.println(relation.getId() + " " + relation.getName());
+ }
+ }
+ }
+}
+
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.dao.impl.OracleDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration({"classpath:springApplication.xml"})
+public class OracleDaoTest {
+
+ /*注入接口时: 如果接口有多个实现类 可以用这个注解指定具体的实现类*/
+ @Qualifier("oracleDaoImpl")
+ @Autowired
+ private OracleDao oracleDao;
+
+ @Test
+ public void get() {
+ List flows = oracleDao.get();
+ if (flows != null) {
+ for (Flow flow : flows) {
+ System.out.println(flow.getId() + " " + flow.getPlugId());
+ }
+ }
+ }
+}
+
+```
+
diff --git a/spring/spring-jdbc/src/main/resources/springApplication.xml b/spring/spring-jdbc/src/main/resources/springApplication.xml
index 0042bd7..c430a1f 100644
--- a/spring/spring-jdbc/src/main/resources/springApplication.xml
+++ b/spring/spring-jdbc/src/main/resources/springApplication.xml
@@ -14,15 +14,15 @@
-
+
-
+
diff --git a/spring/spring-mybatis-annotation/README.md b/spring/spring-mybatis-annotation/README.md
new file mode 100644
index 0000000..af6d0fc
--- /dev/null
+++ b/spring/spring-mybatis-annotation/README.md
@@ -0,0 +1,410 @@
+# spring 整合 mybatis(注解配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+
+```
+
+2、新建 DispatcherServletInitializer.java继承自AbstractAnnotationConfigDispatcherServletInitializer,等价于我们在web.xml中配置的前端控制器
+
+```java
+public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
+
+ protected Class>[] getRootConfigClasses() {
+ return new Class[0];
+ }
+
+ protected Class>[] getServletConfigClasses() {
+ return new Class[]{ServletConfig.class};
+ }
+
+ protected String[] getServletMappings() {
+ return new String[]{"/"};
+ }
+}
+```
+
+3、在resources文件夹下新建数据库配置文件mysql.properties、oracle.properties
+
+```properties
+# mysql 数据库配置
+mysql.driverClassName=com.mysql.jdbc.Driver
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+```
+
+```properties
+# oracle 数据库配置
+oracle.driverClassName=oracle.jdbc.driver.OracleDriver
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+4、在新建数据库配置映射类DataSourceConfig.java
+
+```java
+package com.heibaiying.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@Configuration
+@PropertySource(value = "classpath:mysql.properties")
+@Data
+public class DataSourceConfig {
+
+ @Value("${mysql.driverClassName}")
+ private String driverClassName;
+ @Value("${mysql.url}")
+ private String url;
+ @Value("${mysql.username}")
+ private String username;
+ @Value("${mysql.password}")
+ private String password;
+
+}
+
+```
+
+5、新建ServletConfig.java,进行数据库相关配置
+
+```java
+package com.heibaiying.config;
+
+import org.mybatis.spring.SqlSessionFactoryBean;
+import org.mybatis.spring.mapper.MapperScannerConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+import java.io.IOException;
+
+
+/**
+ * @author : heibaiying
+ */
+@Configuration
+@EnableTransactionManagement // 开启声明式事务处理 等价于xml中
+@ComponentScan(basePackages = {"com.heibaiying.*"})
+public class ServletConfig implements WebMvcConfigurer {
+
+ /* @Autowired
+ * private DataSourceConfig sourceConfig;
+ * 不要采用这种方式注入DataSourceConfig,由于类的加载顺序影响会报空指针异常
+ * 最好的方式是在DriverManagerDataSource构造中采用参数注入
+ */
+
+ /**
+ * 配置数据源
+ */
+ @Bean
+ public DriverManagerDataSource dataSource(DataSourceConfig sourceConfig) {
+ DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setDriverClassName(sourceConfig.getDriverClassName());
+ dataSource.setUrl(sourceConfig.getUrl());
+ dataSource.setUsername(sourceConfig.getUsername());
+ dataSource.setPassword(sourceConfig.getPassword());
+ return dataSource;
+ }
+
+
+ /**
+ * 配置mybatis 会话工厂
+ *
+ * @param dataSource 这个参数的名称需要保持和上面方法名一致 才能自动注入,因为
+ * 采用@Bean注解生成的bean 默认采用方法名为名称,当然也可以在使用@Bean时指定name属性
+ */
+ @Bean
+ public SqlSessionFactoryBean sessionFactoryBean(DriverManagerDataSource dataSource) throws IOException {
+ SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
+ sessionFactoryBean.setDataSource(dataSource);
+ PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+ sessionFactoryBean.setMapperLocations(resolver.getResources("classpath*:/mappers/**/*.xml"));
+ sessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatisConfig.xml"));
+ return sessionFactoryBean;
+ }
+
+ /**
+ * 配置mybatis 会话工厂
+ */
+ @Bean
+ public MapperScannerConfigurer MapperScannerConfigurer() {
+ MapperScannerConfigurer configurer = new MapperScannerConfigurer();
+ configurer.setSqlSessionFactoryBeanName("sessionFactoryBean");
+ configurer.setBasePackage("com.heibaiying.dao");
+ return configurer;
+ }
+
+ /**
+ * 定义事务管理器
+ */
+ @Bean
+ public DataSourceTransactionManager transactionManager(DriverManagerDataSource dataSource) {
+ DataSourceTransactionManager manager = new DataSourceTransactionManager();
+ manager.setDataSource(dataSource);
+ return manager;
+ }
+
+}
+
+```
+
+5、新建mybtais 配置文件 更多settings配置项可以参考[官方文档](http://www.mybatis.org/mybatis-3/zh/configuration.html)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+5、新建查询接口及其对应的mapper文件
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+```mysql
+public interface OracleDao {
+
+ List queryById(long id);
+}
+
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+6.新建测试类进行测试
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.config.DataSourceConfig;
+import com.heibaiying.config.DispatcherServletInitializer;
+import com.heibaiying.config.ServletConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {DispatcherServletInitializer.class, ServletConfig.class})
+public class MysqlDaoTest {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @Test
+ public void get() {
+ List relations = mysqlDao.queryById("691");
+ if (relations != null) {
+ for (Relation relation : relations) {
+ System.out.println(relation.getId() + " " + relation.getName());
+ }
+ }
+ }
+}
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.config.DataSourceConfig;
+import com.heibaiying.config.DispatcherServletInitializer;
+import com.heibaiying.config.ServletConfig;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {DispatcherServletInitializer.class, ServletConfig.class})
+public class OracleDaoTest {
+
+ @Autowired
+ private OracleDao oracleDao;
+
+ @Test
+ public void get() {
+ List flows = oracleDao.queryById(217584603977429772L);
+ if (flows != null) {
+ for (Flow flow : flows) {
+ System.out.println(flow.getId() + " " + flow.getPlugId());
+ }
+ }
+ }
+}
+```
+
diff --git a/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java b/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java
index c89e188..a3050fd 100644
--- a/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java
+++ b/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/MysqlDao.java
@@ -10,7 +10,7 @@ import java.util.List;
* @description :
*/
-@Mapper
+
public interface MysqlDao {
List queryById(String id);
diff --git a/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java b/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java
index 62cbff2..7dfc8da 100644
--- a/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java
+++ b/spring/spring-mybatis-annotation/src/main/java/com/heibaiying/dao/OracleDao.java
@@ -9,7 +9,7 @@ import java.util.List;
* @author : heibaiying
* @description :
*/
-@Mapper
+
public interface OracleDao {
List queryById(long id);
diff --git a/spring/spring-mybatis/README.md b/spring/spring-mybatis/README.md
new file mode 100644
index 0000000..492f2f2
--- /dev/null
+++ b/spring/spring-mybatis/README.md
@@ -0,0 +1,358 @@
+# spring 整合 mybatis(xml配置方式)
+
+1、创建标准web maven工程,导入依赖
+
+```xml
+
+
+ 4.0.0
+
+ com.heibaiying
+ spring-jdbc
+ 1.0-SNAPSHOT
+
+ 5.1.3.RELEASE
+
+
+
+
+
+ org.springframework
+ spring-context
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-beans
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-core
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-web
+ ${spring-base-version}
+
+
+ org.springframework
+ spring-webmvc
+ ${spring-base-version}
+
+
+ javax.servlet
+ javax.servlet-api
+ 4.0.1
+ provided
+
+
+ org.projectlombok
+ lombok
+ 1.18.4
+ provided
+
+
+
+ org.springframework
+ spring-jdbc
+ ${spring-base-version}
+
+
+ mysql
+ mysql-connector-java
+ 8.0.13
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ org.springframework
+ spring-test
+ ${spring-base-version}
+ test
+
+
+ com.oracle
+ ojdbc6
+ 11.2.0.3.0
+
+
+
+ org.mybatis
+ mybatis-spring
+ 1.3.2
+
+
+ org.mybatis
+ mybatis
+ 3.4.6
+
+
+
+
+```
+
+2、在web.xml 进行如下配置
+
+```xml
+
+
+
+
+
+ springMvc
+ org.springframework.web.servlet.DispatcherServlet
+
+ contextConfigLocation
+ classpath:springApplication.xml
+
+ 1
+
+
+
+ springMvc
+ /
+
+
+
+```
+
+3、在resources文件夹下新建数据库配置文件jdbc.properties
+
+```properties
+# mysql 数据库配置
+mysql.driverClassName=com.mysql.jdbc.Driver
+mysql.url=jdbc:mysql://localhost:3306/mysql
+mysql.username=root
+mysql.password=root
+
+# oracle 数据库配置
+oracle.driverClassName=oracle.jdbc.driver.OracleDriver
+oracle.url=jdbc:oracle:thin:@//IP地址:端口号/数据库实例名
+oracle.username=用户名
+oracle.password=密码
+```
+
+4、在resources文件夹下创建springApplication.xml 配置文件
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+5、新建mybtais 配置文件 更多settings配置项可以参考[官方文档](http://www.mybatis.org/mybatis-3/zh/configuration.html)
+
+```xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+5、新建查询接口及其对应的mapper文件
+
+```java
+public interface MysqlDao {
+
+ List get();
+}
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+```mysql
+public interface OracleDao {
+
+ List queryById(long id);
+}
+
+```
+
+```xml
+
+
+
+
+
+
+
+```
+
+6.新建测试类进行测试
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Relation;
+import com.heibaiying.dao.impl.MysqlDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration({"classpath:springApplication.xml"})
+public class MysqlDaoTest {
+
+ @Autowired
+ private MysqlDao mysqlDao;
+
+ @Test
+ public void get() {
+ List relations = mysqlDao.get();
+ if (relations != null) {
+ for (Relation relation : relations) {
+ System.out.println(relation.getId() + " " + relation.getName());
+ }
+ }
+ }
+}
+
+```
+
+```java
+package com.heibaiying.dao;
+
+import com.heibaiying.bean.Flow;
+import com.heibaiying.dao.impl.OracleDao;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.List;
+
+/**
+ * @author : heibaiying
+ * @description :
+ */
+
+@RunWith(SpringRunner.class)
+@ContextConfiguration({"classpath:springApplication.xml"})
+public class OracleDaoTest {
+
+ /*注入接口时: 如果接口有多个实现类 可以用这个注解指定具体的实现类*/
+ @Qualifier("oracleDaoImpl")
+ @Autowired
+ private OracleDao oracleDao;
+
+ @Test
+ public void get() {
+ List flows = oracleDao.get();
+ if (flows != null) {
+ for (Flow flow : flows) {
+ System.out.println(flow.getId() + " " + flow.getPlugId());
+ }
+ }
+ }
+}
+
+```
+
diff --git a/spring/spring-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java b/spring/spring-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java
index f32534e..5a2bb4a 100644
--- a/spring/spring-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java
+++ b/spring/spring-mybatis/src/main/java/com/heibaiying/dao/MysqlDao.java
@@ -1,8 +1,6 @@
package com.heibaiying.dao;
import com.heibaiying.bean.Relation;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Repository;
import java.util.List;
@@ -11,7 +9,7 @@ import java.util.List;
* @description :
*/
-@Mapper
+
public interface MysqlDao {
List queryById(String id);
diff --git a/spring/spring-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java b/spring/spring-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java
index 2409955..c8413f9 100644
--- a/spring/spring-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java
+++ b/spring/spring-mybatis/src/main/java/com/heibaiying/dao/OracleDao.java
@@ -1,8 +1,6 @@
package com.heibaiying.dao;
import com.heibaiying.bean.Flow;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Repository;
import java.util.List;
@@ -10,7 +8,7 @@ import java.util.List;
* @author : heibaiying
* @description :
*/
-@Mapper
+
public interface OracleDao {
List queryById(long id);
diff --git a/spring/spring-mybatis/src/main/resources/springApplication.xml b/spring/spring-mybatis/src/main/resources/springApplication.xml
index a9088a4..ea5b5db 100644
--- a/spring/spring-mybatis/src/main/resources/springApplication.xml
+++ b/spring/spring-mybatis/src/main/resources/springApplication.xml
@@ -28,6 +28,7 @@
+