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 + +![druid控制台](D:\spring-samples-for-all\pictures\druid控制台.png) + 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 + +![druid控制台](D:\spring-samples-for-all\pictures\druid控制台.png) \ 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 @@ +