diff --git a/README.md b/README.md
index 965a7fe..336389d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Spring-All-In-One
+# Spring-Samples-For-All
该仓库提供spring、spring-boot、spirng-cloud 的常用samples。每个用例都提供详细的注释和搭建说明(详见每个sample项目根目录README.md),旨在总结自己工作和学习的结果,也为广大的Java学习和爱好者提供参考。另外因为samples 并不能涵盖该知识点的所有内容,所以每个sample我都会附上本部分内容官方文档的链接作为参考。
@@ -27,19 +27,19 @@ spring-cloud:Finchley.SR2
| samples | 描述 | 官方文档 |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
-| [springmvc-base](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/springmvc-base)
[springmvc-base-annotation](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/springmvc-base-annotation) | springmvc基础、参数绑定、参数转换、数据校验、
全局异常处理、 文件上传下载、jsp视图 | [spring mvc ](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/web.html#mvc) |
-| [spring-jdbc](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/spring-jdbc)
[spring-jdbc-annotation](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/spring-jdbc-annotation) | spring jdbc-template 的使用 | [Using JdbcTemplat](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/data-access.html#jdbc-JdbcTemplate) |
-| [spring-mybatis](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/spring-mybatis)
[spring-mybatis-annotation](https://github.com/heibaiying/Spring-All-In-One/tree/master/spring/mybatis-annotation) | spring 整合 mybatis | [mybatis-spring中文文档](http://www.mybatis.org/spring/zh/index.html) |
-| spring-druid-mybtais
spring-druid-mybtais-annotation | spring 整合druid、mybatis | |
-| spring-druid-redis
spring-druid-redis-annotation | spring 整合 redis | |
-| spring-druid-mongodb
spring-druid-mongodb-annotation | spring 整合 mongodb | |
-| spring-druid-memcached
spring-druid-memcached-annotation | spring 整合 memcached | |
-| spring-druid-rabbitmq
spring-druid-rabbitmq-annotation | spring 整合 rabbitmq | |
-| spring-druid-kafka
spring-druid-kafka-annotation | spring 整合 kafka | |
-| spring-druid-dubbo
spring-druid-dubbo-annotation | spring 整合 dubbo | |
-| spring-druid-websocket
spring-druid-websocket-annotation | spring 整合 websocket | |
-| spring-druid-netty
spring-druid-netty-annotation | spring 整合 netty | |
-| spring-druid-scheduled
spring-druid-scheduled-annotation | spring 定时任务 | |
+| [springmvc-base](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/springmvc-base)
[springmvc-base-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/springmvc-base-annotation) | springmvc基础、参数绑定、参数转换、数据校验、
全局异常处理、 文件上传下载、jsp视图 | [spring mvc ](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/web.html#mvc) |
+| [spring-jdbc](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc)
[spring-jdbc-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-jdbc-annotation) | spring jdbc-template 的使用 | [Using JdbcTemplat](https://docs.spring.io/spring/docs/5.1.3.RELEASE/spring-framework-reference/data-access.html#jdbc-JdbcTemplate) |
+| [spring-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-mybatis)
[spring-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/mybatis-annotation) | spring 整合 mybatis | [mybatis-spring中文文档](http://www.mybatis.org/spring/zh/index.html) |
+| [spring-druid-mybatis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis)
[spring-druid-mybatis-annotation](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring/spring-druid-mybatis-annotation) | spring 整合druid、mybatis | [alibaba druid](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) |
+| spring-redis
spring-redis-annotation | spring 整合 redis | |
+| spring-mongodb
spring-mongodb-annotation | spring 整合 mongodb | |
+| spring-memcached
spring-memcached-annotation | spring 整合 memcached | |
+| spring-rabbitmq
spring-rabbitmq-annotation | spring 整合 rabbitmq | |
+| spring-kafka
spring-kafka-annotation | spring 整合 kafka | |
+| spring-dubbo
spring-dubbo-annotation | spring 整合 dubbo | |
+| spring-websocket
spring-websocket-annotation | spring 整合 websocket | |
+| spring-netty
spring-netty-annotation | spring 整合 netty | |
+| spring-scheduled
spring-scheduled-annotation | spring 定时任务 | |
diff --git a/pictures/druid控制台.png b/pictures/druid控制台.png
new file mode 100644
index 0000000..5f0a7e4
Binary files /dev/null and b/pictures/druid控制台.png differ
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 @@
+