From 5d41bacf9a5172af0f7c33f22af55af564b70da4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Thu, 3 Jan 2019 11:37:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20spring-boot=20+=20druid=20?= =?UTF-8?q?+=20mybatis=20=E6=95=B4=E5=90=88=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 34 ++++----- spring-boot/spring-boot-druid-mybatis/pom.xml | 66 +++++++++++++++++ .../SpringBootDruidMybatisApplication.java | 14 ++++ .../springboot/bean/Programmer.java | 38 ++++++++++ .../controller/DruidStatController.java | 21 ++++++ .../controller/ProgrammerController.java | 26 +++++++ .../springboot/dao/ProgrammerDao.java | 29 ++++++++ .../src/main/resources/application.yml | 71 +++++++++++++++++++ .../src/main/resources/sql/programmer.sql | 8 +++ ...pringBootDruidMybatisApplicationTests.java | 26 +++++++ 10 files changed, 316 insertions(+), 17 deletions(-) create mode 100644 spring-boot/spring-boot-druid-mybatis/pom.xml create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/SpringBootDruidMybatisApplication.java create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/bean/Programmer.java create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/DruidStatController.java create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/ProgrammerController.java create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/dao/ProgrammerDao.java create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/resources/application.yml create mode 100644 spring-boot/spring-boot-druid-mybatis/src/main/resources/sql/programmer.sql create mode 100644 spring-boot/spring-boot-druid-mybatis/src/test/java/com/heibaiying/springboot/SpringBootDruidMybatisApplicationTests.java diff --git a/README.md b/README.md index 1cbe667..3cdcd8e 100644 --- a/README.md +++ b/README.md @@ -46,23 +46,23 @@ spring-cloud:Finchley.SR2 ## 2. spring-boot samples -| samples | 描述 | 官方文档 | -| ------------------------------------------------------------ | ---------------------------------- | ------------------------------------------------------------ | -| [spring-boot-base](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-base) | spring-boot 基础 | [spring boot 官方文档](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/)
[spring boot 中文官方文档](https://www.breakyizhan.com/springboot/3028.html) | -| [spring-boot-yml-profile](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-yml-profile) | yml 语法和多配置切换 | [Using YAML Instead of Properties](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-external-config-yaml) | -| [spring-boot-servlet](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-servlet) | 整合servlet 3.0 | [Embedded Servlet Container Support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-embedded-container) | -| [spring-boot-tomcat](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-tomcat) | spring-boot 整合外部容器(tomcat) | [Use Another Web Server](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-use-another-web-server) | -| [spring-boot-jsp](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-jsp) | spring-boot 整合 jsp | [JSP Limitations](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-jsp-limitations) | -| spring-boot-jpa | spring-boot jpa 的使用 | [Spring Data JPA](https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/) | -| spring-boot-mybatis | spring-boot 整合 mybatis | [Mybatis-Spring](http://www.mybatis.org/spring/zh/index.html)
[Mybatis-Spring-Boot-Autoconfigure](http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/) | -| spring-boot-druid-mybtais | spring-boot 整合druid、mybatis | [Alibaba druid](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) | -| [spring-boot-redis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-redis) | spring-boot 整合 redis | [Working with NoSQL Technologies](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-nosql) | -| [spring-boot-mongodb](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-mongodb) | spring-boot 整合 mongodb | [Working with NoSQL Technologies](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-nosql) | -| [spring-boot-memcached](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-memcached) | spring-boot 整合 memcached | [Xmemcached](https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97) | -| [spring-boot-rabbitmq](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-rabbitmq) | spring-boot 整合 rabbitmq | [RabbitMQ support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-rabbitmq) | -| [spring-boot-dubbo](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-dubbo) | spring-boot 整合 dubbo | [Dubbo ](http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) | -| [spring-boot-websocket](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-websocket) | spring-boot 整合 websocket | [Using @ServerEndpoint](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-create-websocket-endpoints-using-serverendpoint) | -| spring-boot-kafka | spring-boot 整合 kafka | [Apache Kafka Support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-kafka) | +| samples | 描述 | 官方文档 | +| ------------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | +| [spring-boot-base](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-base) | spring-boot 基础 | [spring boot 官方文档](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/)
[spring boot 中文官方文档](https://www.breakyizhan.com/springboot/3028.html) | +| [spring-boot-yml-profile](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-yml-profile) | yml 语法和多配置切换 | [Using YAML Instead of Properties](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-external-config-yaml) | +| [spring-boot-servlet](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-servlet) | 整合servlet 3.0 | [Embedded Servlet Container Support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-embedded-container) | +| [spring-boot-tomcat](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-tomcat) | spring-boot 整合外部容器(tomcat) | [Use Another Web Server](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-use-another-web-server) | +| [spring-boot-jsp](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-jsp) | spring-boot 整合 jsp | [JSP Limitations](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-jsp-limitations) | +| spring-boot-jpa | spring-boot jpa 的使用 | [Spring Data JPA](https://docs.spring.io/spring-data/jpa/docs/2.1.3.RELEASE/reference/html/) | +| spring-boot-mybatis | spring-boot 整合 mybatis
HikariDataSources数据源的配置 | [Mybatis-Spring](http://www.mybatis.org/spring/zh/index.html)
[Mybatis-Spring-Boot-Autoconfigure](http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/) | +| spring-boot-druid-mybtais | spring-boot 整合druid、mybatis | [Alibaba druid](https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98) | +| [spring-boot-redis](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-redis) | spring-boot 整合 redis | [Working with NoSQL Technologies](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-nosql) | +| [spring-boot-mongodb](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-mongodb) | spring-boot 整合 mongodb | [Working with NoSQL Technologies](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-nosql) | +| [spring-boot-memcached](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-memcached) | spring-boot 整合 memcached | [Xmemcached](https://github.com/killme2008/xmemcached/wiki/Xmemcached%20%E4%B8%AD%E6%96%87%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97) | +| [spring-boot-rabbitmq](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-rabbitmq) | spring-boot 整合 rabbitmq | [RabbitMQ support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-rabbitmq) | +| [spring-boot-dubbo](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-dubbo) | spring-boot 整合 dubbo | [Dubbo ](http://dubbo.apache.org/zh-cn/docs/user/quick-start.html) | +| [spring-boot-websocket](https://github.com/heibaiying/spring-samples-for-all/tree/master/spring-boot/spring-boot-websocket) | spring-boot 整合 websocket | [Using @ServerEndpoint](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#howto-create-websocket-endpoints-using-serverendpoint) | +| spring-boot-kafka | spring-boot 整合 kafka | [Apache Kafka Support](https://docs.spring.io/spring-boot/docs/2.1.1.RELEASE/reference/htmlsingle/#boot-features-kafka) | 更多的场景和用例可参阅 [spring-boot 官方samples ](https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples) diff --git a/spring-boot/spring-boot-druid-mybatis/pom.xml b/spring-boot/spring-boot-druid-mybatis/pom.xml new file mode 100644 index 0000000..1e06963 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/pom.xml @@ -0,0 +1,66 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.1.RELEASE + + + com.heibaiying + spring-boot-druid-mybatis + 0.0.1-SNAPSHOT + spring-boot-druid-mybatis + druid-mybatis project for Spring Boot + + + 1.8 + + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 1.3.2 + + + + mysql + mysql-connector-java + 8.0.13 + + + + com.alibaba + druid-spring-boot-starter + 1.1.10 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/SpringBootDruidMybatisApplication.java b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/SpringBootDruidMybatisApplication.java new file mode 100644 index 0000000..8029484 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/SpringBootDruidMybatisApplication.java @@ -0,0 +1,14 @@ +package com.heibaiying.springboot; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringBootDruidMybatisApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringBootDruidMybatisApplication.class, args); + } + +} + diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/bean/Programmer.java b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/bean/Programmer.java new file mode 100644 index 0000000..fbb468b --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/bean/Programmer.java @@ -0,0 +1,38 @@ +package com.heibaiying.springboot.bean; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.util.Date; + +/** + * @author : heibaiying + * @description : 实体类 + */ + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class Programmer { + + private int id; + + private String name; + + private int age; + + private float salary; + + private Date birthday; + + public Programmer(String name, int age, float salary, Date birthday) { + this.name = name; + this.age = age; + this.salary = salary; + this.birthday = birthday; + } + +} diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/DruidStatController.java b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/DruidStatController.java new file mode 100644 index 0000000..d27485c --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/DruidStatController.java @@ -0,0 +1,21 @@ +package com.heibaiying.springboot.controller; + +import com.alibaba.druid.stat.DruidStatManagerFacade; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author : heibaiying + * @description :在 Spring Boot 中可以通过 HTTP 接口将 Druid 监控数据以JSON 的形式暴露出去, + * 实际使用中你可以根据你的需要自由地对监控数据、暴露方式进行扩展。 + */ + +@RestController +public class DruidStatController { + + @GetMapping("/stat") + public Object druidStat() { + // DruidStatManagerFacade#getDataSourceStatDataList 该方法可以获取所有数据源的监控数据 + return DruidStatManagerFacade.getInstance().getDataSourceStatDataList(); + } +} diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/ProgrammerController.java b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/ProgrammerController.java new file mode 100644 index 0000000..67179d8 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/controller/ProgrammerController.java @@ -0,0 +1,26 @@ +package com.heibaiying.springboot.controller; + +import com.alibaba.druid.stat.DruidStatManagerFacade; +import com.heibaiying.springboot.bean.Programmer; +import com.heibaiying.springboot.dao.ProgrammerDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @author : heibaiying + */ + +@RestController +public class ProgrammerController { + + @Autowired + private ProgrammerDao programmerDao; + + @GetMapping("/programmers") + public List get() { + return programmerDao.selectAll(); + } +} diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/dao/ProgrammerDao.java b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/dao/ProgrammerDao.java new file mode 100644 index 0000000..d839f59 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/java/com/heibaiying/springboot/dao/ProgrammerDao.java @@ -0,0 +1,29 @@ +package com.heibaiying.springboot.dao; + +import com.heibaiying.springboot.bean.Programmer; +import org.apache.ibatis.annotations.*; + +import java.util.List; + +/** + * @author : heibaiying + */ +@Mapper +public interface ProgrammerDao { + + + @Select("select * from programmer") + List selectAll(); + + @Insert("insert into programmer (name, age, salary, birthday) VALUES (#{name}, #{age}, #{salary}, #{birthday})") + void save(Programmer programmer); + + @Select("select * from programmer where name = #{id}") + Programmer selectById(int id); + + @Update("update programmer set name=#{name},age=#{age},salary=#{salary},birthday=#{birthday} where id=#{id}") + int modify(Programmer programmer); + + @Delete(" delete from programmer where id = #{id}") + void delete(int id); +} diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/resources/application.yml b/spring-boot/spring-boot-druid-mybatis/src/main/resources/application.yml new file mode 100644 index 0000000..47d3129 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/resources/application.yml @@ -0,0 +1,71 @@ +spring: + datasource: + url: jdbc:mysql://127.0.0.1:3306/mysql?useUnicode=true&characterEncoding=utf-8 + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + + # ʹ druid Ϊӳ õ˵Բμ druid starter ĵ https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter + type: com.alibaba.druid.pool.DruidDataSource + druid: + # ʼʱӵĸʼʾinitߵһgetConnectionʱ + initialSize: 5 + # Сӳ + minIdle: 5 + # ӳ + maxActive: 10 + # ȡʱȴʱ䣬λ롣maxWait֮ȱʡùƽЧʻ½ҪͨuseUnfairLockΪtrueʹ÷ǹƽ + maxWait: 60000 + # Destroy̻߳ӵļʱ䣬ӿʱڵminEvictableIdleTimeMillisرӡ + timeBetweenEvictionRunsMillis: 60000 + # ӱֿжСʱ + minEvictableIdleTimeMillis: 300000 + # ǷЧsql ݿⷽԶ, oracle Ӧд SELECT 1 FROM DUAL + validationQuery: SELECT 1 + # ΪtrueӰܣұ֤ȫԡӵʱ⣬ʱtimeBetweenEvictionRunsMillisִvalidationQueryǷЧ + testWhileIdle: true + # ʱִvalidationQueryǷЧûήܡ + testOnBorrow: false + # 黹ʱִvalidationQueryǷЧûήܡ + testOnReturn: false + # ǷԶճʱ + removeAbandoned: true + # ʱʱ(Ϊλ) + remove-abandoned-timeout: 180 + + # druid ص ʹ druid ļعܵĻ þͲDZ + # Ŀ̨ʵַ: http://localhost:8080/druid/login.html + + # WebStatFilterڲɼweb-jdbcصݡ + # ÿɲμ: https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_%E9%85%8D%E7%BD%AEWebStatFilter + web-stat-filter: + # Ƿ WebStatFilter Ĭtrue + enabled: true + # Ҫصurl + url-pattern: /* + # ų̬Դ + exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*" + + # DruidṩһStatViewServletչʾDruidͳϢ + # ÿɲμ:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE_StatViewServlet%E9%85%8D%E7%BD%AE + stat-view-servlet: + #ǷStatViewServlet Ĭֵtrue + enabled: true + # Ҫصurl + url-pattern: /druid/* + # ͳ + reset-enable: true + login-username: druid + login-password: druid + + + +# mybatis +mybatis: + configuration: + # ûΪṩض JDBC ʱΪֵָ JDBC ͡ + # oracleݿ⽨ΪJdbcType.NULL, ĬOther + jdbc-type-for-null: 'null' + # Ƿӡsql ԵʱԿ + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + diff --git a/spring-boot/spring-boot-druid-mybatis/src/main/resources/sql/programmer.sql b/spring-boot/spring-boot-druid-mybatis/src/main/resources/sql/programmer.sql new file mode 100644 index 0000000..71840fe --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/main/resources/sql/programmer.sql @@ -0,0 +1,8 @@ +-- 建表语句 +create table if not exists programmer ( + id int primary key auto_increment, + name varchar(20), + age tinyint, + salary float, + birthday datetime +) \ No newline at end of file diff --git a/spring-boot/spring-boot-druid-mybatis/src/test/java/com/heibaiying/springboot/SpringBootDruidMybatisApplicationTests.java b/spring-boot/spring-boot-druid-mybatis/src/test/java/com/heibaiying/springboot/SpringBootDruidMybatisApplicationTests.java new file mode 100644 index 0000000..33baac3 --- /dev/null +++ b/spring-boot/spring-boot-druid-mybatis/src/test/java/com/heibaiying/springboot/SpringBootDruidMybatisApplicationTests.java @@ -0,0 +1,26 @@ +package com.heibaiying.springboot; + +import com.heibaiying.springboot.bean.Programmer; +import com.heibaiying.springboot.dao.ProgrammerDao; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.List; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringBootDruidMybatisApplicationTests { + + @Autowired + private ProgrammerDao programmerDao; + + @Test + public void contextLoads() { + List programmers = programmerDao.selectAll(); + programmers.forEach(System.out::println); + } +} +