SpringBoot整合

约定不等于承诺〃 2022-04-25 06:10 495阅读 0赞

开发环境
开发工具:IntelliJ IDEA
框架:springboot、Maven、Mybatis(也可以用JPA)
JDK:1.8
一、首先你要知道什么是SpringBoot
在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心内容在于控制反转(IOC)和依赖注入(DI),所谓控制反转并非是一种技术,而是一种思想,在操作方面是指在spring配置文件中创建,依赖注入即为由spring容器为应用程序的某个对象提供资源,比如 引用对象、常量数据等。
SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,所谓简化是指简化了Spring众多框架中所需的大量且繁琐的配置文件,所以 SpringBoot是一个服务于框架的框架,服务范围是简化配置文件。
SpringBoot最明显的特点是,让文件配置变的相当简单、让应用部署变的简单(SpringBoot内置服务器,并装备启动类代码),可以快速开启一个Web容器进行开发。

二、IDEA 创建SpringBoot项目
1、打开idea→File→New→Project
在这里插入图片描述
2、Spring Initializr→选择Project SDK→Next
在这里插入图片描述
3、填写好内容后点击Next
在这里插入图片描述
4、点击Web→勾选Web→Next
在这里插入图片描述
5、点击Finish
在这里插入图片描述
6、首先我们需要依赖SpringBoot的父工程,这是每个项目都要有的

  1. <!-- SpringBoot父依赖 -->
  2. <parent>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-parent</artifactId>
  5. <version>2.1.3.RELEASE</version>
  6. <relativePath/>
  7. </parent>
  8. <!-- JAVA版本与编码 -->
  9. <properties>
  10. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  11. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  12. <java.version>1.8</java.version>
  13. </properties>

②启动WEB模块要引入WEB模块的依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>

③然后需要创建SpringBoot的启动类

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.context.annotation.ComponentScan;
  4. @SpringBootApplication
  5. @ComponentScan("com.quotation")
  6. public class QuotationApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(QuotationApplication.class, args);
  9. }

@SpringBootApplication是一个复合注解,包括@ComponentScan,和@SpringBootConfiguration,@EnableAutoConfiguration。

  1. @SpringBootConfiguration继承自@Configuration,二者功能也一致,标注当前类是配置类,并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
  2. @EnableAutoConfiguration的作用启动自动的配置,@EnableAutoConfiguration注解的意思就是Springboot根据你添加的jar包来配置你项目的默认配置,比如根据spring-boot-starter-web ,来判断你的项目是否需要添加了webmvc和tomcat,就会自动的帮你配置web项目中所需要的默认配置。在下面博客会具体分析这个注解,快速入门的demo实际没有用到该注解。
  3. @ComponentScan,扫描当前包及其子包下被@Component,@Controller,@Service,@Repository注解标记的类并纳入到spring容器中进行管理。是以前的context:component-scan(以前使用在xml中使用的标签,用来扫描包配置的平行支持)。所以本demo中的User为何会被spring容器管理。

然后需要配置application.yml(或者application.properties)

  1. #设置端口号和context path
  2. server:
  3. port: 8088
  4. servlet:
  5. context-path: /quotation
  6. #使用thymeleaf
  7. spring:
  8. thymeleaf:
  9. cache: false
  10. suffix: .html
  11. prefix: classpath:/templates/

(注意:使用thymeleaf,需要引入thymeleaf依赖,你也可以用Spring Boot支持的其他模板技术,具体请自行查找资料)

④创建Controller

  1. @RestController
  2. @RequestMapping("hello")
  3. public class HelloController {
  4. @RequestMapping("helloworld")
  5. public String say(){
  6. return "hello world";
  7. }
  8. @RequestMapping("/test")
  9. public ModelAndView test(){
  10. return new ModelAndView("index");
  11. }
  12. }

在这里插入图片描述
三、集成Mybatis
接下来我会集成logback(日志)和Druid(阿里开源的数据库连接池)
1、首先要引入jar包(数据库使用的是Oracle,若不用Oracle引入其它对应的依赖即可)

  1. <!--jdbc-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-starter-jdbc</artifactId>
  5. </dependency>
  6. <!--SpringBoot MyBatis启动器-->
  7. <dependency>
  8. <groupId>org.mybatis.spring.boot</groupId>
  9. <artifactId>mybatis-spring-boot-starter</artifactId>
  10. <version>1.2.2</version>
  11. </dependency>
  12. <!--oracle-->
  13. <dependency>
  14. <groupId>ojdbc</groupId>
  15. <artifactId>ojdbc6</artifactId>
  16. <version>11.2.0.3</version>
  17. </dependency>
  18. <!-- 数据库连接池 -->
  19. <!-- <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>-->
  20. <dependency>
  21. <groupId>com.alibaba</groupId>
  22. <artifactId>druid-spring-boot-starter</artifactId>
  23. <version>1.1.10</version>
  24. </dependency>

2、使用logback日志
直接在resources目录下创建logback.xml文件。(也可以在application.yml中做普通的配置,关于日志文件的命名格式,可以百度下springboot所支持的日志命名格。)
logback.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
  3. <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
  4. <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
  5. <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
  6. <configuration>
  7. <contextName>logback</contextName>
  8. <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
  9. <property name="log.path" value="../customlogs" />
  10. <!--输出到控制台-->
  11. <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  12. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  13. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  14. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  15. </encoder>
  16. </appender>
  17. <!--输出到文件-->
  18. <!-- 时间滚动输出 level为 DEBUG 日志 -->
  19. <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  20. <!-- 正在记录的日志文件的路径及文件名 -->
  21. <file>${log.path}/log_debug.log</file>
  22. <!--日志文件输出格式-->
  23. <encoder>
  24. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  25. <charset>UTF-8</charset> <!-- 设置字符集 -->
  26. </encoder>
  27. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  28. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  29. <!-- 日志归档 -->
  30. <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  31. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  32. <maxFileSize>100MB</maxFileSize>
  33. </timeBasedFileNamingAndTriggeringPolicy>
  34. <!--日志文件保留天数-->
  35. <maxHistory>15</maxHistory>
  36. </rollingPolicy>
  37. <!-- 此日志文件只记录debug级别的 -->
  38. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  39. <level>debug</level>
  40. <onMatch>ACCEPT</onMatch>
  41. <onMismatch>DENY</onMismatch>
  42. </filter>
  43. </appender>
  44. <!-- 时间滚动输出 level为 INFO 日志 -->
  45. <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  46. <!-- 正在记录的日志文件的路径及文件名 -->
  47. <file>${log.path}/log_info.log</file>
  48. <!--日志文件输出格式-->
  49. <encoder>
  50. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  51. <charset>UTF-8</charset>
  52. </encoder>
  53. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  54. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  55. <!-- 每天日志归档路径以及格式 -->
  56. <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  57. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  58. <maxFileSize>100MB</maxFileSize>
  59. </timeBasedFileNamingAndTriggeringPolicy>
  60. <!--日志文件保留天数-->
  61. <maxHistory>15</maxHistory>
  62. </rollingPolicy>
  63. <!-- 此日志文件只记录info级别的 -->
  64. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  65. <level>info</level>
  66. <onMatch>ACCEPT</onMatch>
  67. <onMismatch>DENY</onMismatch>
  68. </filter>
  69. </appender>
  70. <!-- 时间滚动输出 level为 WARN 日志 -->
  71. <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  72. <!-- 正在记录的日志文件的路径及文件名 -->
  73. <file>${log.path}/log_warn.log</file>
  74. <!--日志文件输出格式-->
  75. <encoder>
  76. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  77. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  78. </encoder>
  79. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  80. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  81. <fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  82. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  83. <maxFileSize>100MB</maxFileSize>
  84. </timeBasedFileNamingAndTriggeringPolicy>
  85. <!--日志文件保留天数-->
  86. <maxHistory>15</maxHistory>
  87. </rollingPolicy>
  88. <!-- 此日志文件只记录warn级别的 -->
  89. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  90. <level>warn</level>
  91. <onMatch>ACCEPT</onMatch>
  92. <onMismatch>DENY</onMismatch>
  93. </filter>
  94. </appender>
  95. <!-- 时间滚动输出 level为 ERROR 日志 -->
  96. <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  97. <!-- 正在记录的日志文件的路径及文件名 -->
  98. <file>${log.path}/log_error.log</file>
  99. <!--日志文件输出格式-->
  100. <encoder>
  101. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  102. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  103. </encoder>
  104. <!-- 日志记录器的滚动策略,按日期,按大小记录 -->
  105. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  106. <fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  107. <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  108. <maxFileSize>100MB</maxFileSize>
  109. </timeBasedFileNamingAndTriggeringPolicy>
  110. <!--日志文件保留天数-->
  111. <maxHistory>15</maxHistory>
  112. </rollingPolicy>
  113. <!-- 此日志文件只记录ERROR级别的 -->
  114. <filter class="ch.qos.logback.classic.filter.LevelFilter">
  115. <level>ERROR</level>
  116. <onMatch>ACCEPT</onMatch>
  117. <onMismatch>DENY</onMismatch>
  118. </filter>
  119. </appender>
  120. <!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、 以及指定<appender>。<logger>仅有一个name属性, 一个可选的level和一个可选的addtivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 还有一个特俗值INHERITED或者同义词NULL,代表强制执行上级的级别。 如果未设置此属性,那么当前logger将会继承上级的级别。 addtivity:是否向上级logger传递打印信息。默认是true。 -->
  121. <!--<logger name="org.springframework.web" level="info"/>-->
  122. <!--<logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>-->
  123. <!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="info">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给dao下目录配置debug模式,代码如下,这样配置sql语句会打印,其他还是正常info级别: -->
  124. <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 不能设置为INHERITED或者同义词NULL。默认是DEBUG 可以包含零个或多个元素,标识这个appender将会添加到这个logger。 -->
  125. <root level="info">
  126. <appender-ref ref="CONSOLE" />
  127. <appender-ref ref="DEBUG_FILE" />
  128. <appender-ref ref="INFO_FILE" />
  129. <appender-ref ref="WARN_FILE" />
  130. <appender-ref ref="ERROR_FILE" />
  131. </root>
  132. </configuration>

在application.yml中添加以下代码可以打印SQL语句

  1. #打印SQL,把level下的路径换成你对应mapper包路径
  2. logging:
  3. level:
  4. com:
  5. vtech:
  6. quotation:
  7. mapper: debug

控制台输出
(PS:解析一下为什么不需要引入jar包。因为springboot本身就内置了日志功能,springboot的pom文件都会引一个parent,里面就包含了日志包。)

3、使用Druid连接池
①application.yml加入以下配置

  1. spring:
  2. datasource:
  3. type: com.alibaba.druid.pool.DruidDataSource
  4. # 配置Druid的其他参数,以下配置必须增加一个配置文件才能有效
  5. # 初始化大小,最小,最大
  6. druid:
  7. url: jdbc:oracle:thin:#你oracle数据库系统的地址
  8. username: #数据库登录名
  9. password: #密码
  10. driver-class-name: oracle.jdbc.OracleDriver
  11. # 连接池配置
  12. initial-size: 1
  13. max-active: 20
  14. min-idle: 1
  15. max-wait: 10000
  16. pool-prepared-statements: true
  17. max-open-prepared-statements: 20
  18. validation-query: SELECT 1 FROM DUAL
  19. validation-query-timeout: 5000
  20. test-on-borrow: false
  21. test-on-return: false
  22. test-while-idle: true
  23. time-between-eviction-runs-millis: 60000
  24. min-evictable-idle-time-millis: 30000
  25. max-evictable-idle-time-millis: 60000
  26. removeAbandoned: true
  27. removeAbandonedTimeout: 1800
  28. connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
  29. max-pool-prepared-statement-per-connection-size: 20
  30. filters: stat,wall #filters: #配置多个英文逗号分隔(统计,sql注入,log4j过滤)

②创建DruidConfig.java
(其中@Slf4j是使用了lombok插件,详情请看lombok安装,使用了该注解输出日志直接log. 即可,替代了private static final Logger logger = LoggerFactory.getLogger(DruidConfig.class);)

  1. import com.alibaba.druid.pool.DruidDataSource;
  2. import com.alibaba.druid.support.http.StatViewServlet;
  3. import com.alibaba.druid.support.http.WebStatFilter;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  7. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.Primary;
  11. import javax.sql.DataSource;
  12. import java.util.HashMap;
  13. import java.util.Map;
  14. @Configuration
  15. @Slf4j
  16. public class DruidConfig {
  17. @Value("${spring.datasource.druid.url}")
  18. private String dbUrl;
  19. @Value("${spring.datasource.druid.username}")
  20. private String username;
  21. @Value("${spring.datasource.druid.password}")
  22. private String password;
  23. @Value("${spring.datasource.druid.driver-class-name}")
  24. private String driverClassName;
  25. @Value("${spring.datasource.druid.initial-size}")
  26. private int initialSize;
  27. @Value("${spring.datasource.druid.min-idle}")
  28. private int minIdle;
  29. @Value("${spring.datasource.druid.max-active}")
  30. private int maxActive;
  31. @Value("${spring.datasource.druid.max-wait}")
  32. private int maxWait;
  33. @Value("${spring.datasource.druid.time-between-eviction-runs-millis}")
  34. private int timeBetweenEvictionRunsMillis;
  35. @Value("${spring.datasource.druid.min-evictable-idle-time-millis}")
  36. private int minEvictableIdleTimeMillis;
  37. @Value("${spring.datasource.druid.validation-query}")
  38. private String validationQuery;
  39. @Value("${spring.datasource.druid.test-while-idle}")
  40. private boolean testWhileIdle;
  41. @Value("${spring.datasource.druid.test-on-borrow}")
  42. private boolean testOnBorrow;
  43. @Value("${spring.datasource.druid.test-on-return}")
  44. private boolean testOnReturn;
  45. @Value("${spring.datasource.druid.pool-prepared-statements}")
  46. private boolean poolPreparedStatements;
  47. @Value("${spring.datasource.druid.max-pool-prepared-statement-per-connection-size}")
  48. private int maxPoolPreparedStatementPerConnectionSize;
  49. @Value("${spring.datasource.druid.filters}")
  50. private String filters;
  51. @Value("{spring.datasource.druid.connection-properties}")
  52. private String connectionProperties;
  53. @Bean //声明其为Bean实例
  54. @Primary //在同样的DataSource中,首先使用被标注的DataSource
  55. public DataSource dataSource() {
  56. DruidDataSource datasource = new DruidDataSource();
  57. datasource.setUrl(dbUrl);
  58. datasource.setUsername(username);
  59. datasource.setPassword(password);
  60. datasource.setDriverClassName(driverClassName);
  61. //configuration
  62. datasource.setInitialSize(initialSize);
  63. datasource.setMinIdle(minIdle);
  64. datasource.setMaxActive(maxActive);
  65. datasource.setMaxWait(maxWait);
  66. datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
  67. datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
  68. datasource.setValidationQuery(validationQuery);
  69. datasource.setTestWhileIdle(testWhileIdle);
  70. datasource.setTestOnBorrow(testOnBorrow);
  71. datasource.setTestOnReturn(testOnReturn);
  72. datasource.setPoolPreparedStatements(poolPreparedStatements);
  73. datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
  74. try {
  75. datasource.setFilters(filters);
  76. } catch (Exception e) {
  77. log.error("druid configuration initialization filter", e);
  78. }
  79. datasource.setConnectionProperties(connectionProperties);
  80. return datasource;
  81. }
  82. @Bean
  83. public ServletRegistrationBean druidServlet() {
  84. //logger.info("init Druid Servlet Configuration ");
  85. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
  86. servletRegistrationBean.setServlet(new StatViewServlet());
  87. servletRegistrationBean.addUrlMappings("/druid/*");
  88. Map<String, String> initParameters = new HashMap<>();
  89. initParameters.put("loginUsername", "admin");// 用户名
  90. initParameters.put("loginPassword", "admin");// 密码
  91. //initParameters.put("resetEnable", "");// 禁用HTML页面上的“Reset All”功能
  92. initParameters.put("allow", ""); // IP白名单 (没有配置或者为空,则允许所有访问)
  93. //initParameters.put("deny", "192.168.20.38");// IP黑名单 (存在共同时,deny优先于allow)
  94. servletRegistrationBean.setInitParameters(initParameters);
  95. return servletRegistrationBean;
  96. }
  97. @Bean
  98. public FilterRegistrationBean druidWebStatViewFilter() {
  99. FilterRegistrationBean registrationBean = new FilterRegistrationBean(new WebStatFilter());
  100. registrationBean.addInitParameter("urlPatterns", "/*");
  101. registrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");
  102. return registrationBean;
  103. }
  104. }

4、集成mybatis
目录结构
①分别如图创建两个mapper文件夹,一个放interface(src/main/java),一个放xml(resources)

创建Users.java

  1. @Data
  2. public class Users {
  3. private BigDecimal userId;
  4. private String userName;
  5. private String password;
  6. }

创建UsersMapper.java
(@Repository 加上这个注解在使用@Autowired时就不会报错,@Mapper声明这是一个mapper)

  1. @Mapper
  2. @Repository
  3. public interface UsersMapper {
  4. List<Users> findAll();
  5. }

创建UsersMapper.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.vtech.quotation.mapper.UsersMapper">
  4. <resultMap id="BaseResultMap" type="com.vtech.quotation.pojo.Users">
  5. <id column="USER_ID" jdbcType="DECIMAL" property="userId"/>
  6. <result column="USER_NAME" jdbcType="VARCHAR" property="userName"/>
  7. <result column="PASSWORD" jdbcType="VARCHAR" property="password"/>
  8. </resultMap>
  9. <sql id="result_Internal_User">
  10. USER_ID, USER_NAME, FIRST_NAME, LAST_NAME, STATUS, EMAIL_ADDRESS, ISMANAGER,
  11. BU, CREATE_BY, CREATION_DATE, MODIFIED_BY,
  12. MODIFIED_DATE
  13. </sql>
  14. <select id="findAll" resultMap="BaseResultMap">
  15. select
  16. <include refid="result_Internal_User"/>
  17. from USERS
  18. </select>
  19. </mapper>

②application.yml添加mybatis配置

  1. mybatis:
  2. #config-location: classpath:mybatis-config.xml # mybatis配置文件所在路径
  3. mapper-locations: classpath:mapper/*.xml # 所有的mapper映射文件
  4. type-aliases-package: com.vtech.quotation.mapper # 定义所有操作类的别名所在包

③springboot启动类添加
@MapperScan(value = “com.vtech.quotation.mapper”)添加了这个注解就不用每个mapper类都添加@Mapper了
@ComponentScan(basePackages = “com.vtech”)

  1. @SpringBootApplication
  2. @MapperScan(value = "com.vtech.quotation.mapper")
  3. @ComponentScan(basePackages = "com.vtech")
  4. public class QuotationApplication {
  5. public static void main(String[] args) {
  6. SpringApplication.run(QuotationApplication.class, args);
  7. }
  8. }

④测试HelloController .java

  1. @RestController
  2. @RequestMapping("hello")
  3. @Slf4j
  4. public class HelloController {
  5. @Autowired
  6. UsersMapper usersMapper
  7. @RequestMapping("findAll")
  8. public JsonResult findall(){
  9. return new JsonResult(usersMapper.findAll());
  10. }
  11. }

在这里插入图片描述
⑤测试Druid
在浏览其中输入http://localhost:端口号/你的context-path/druid 即可访问
例如:http://localhost:8088/quotation/druid
在这里插入图片描述
输入你配置的druid账号密码登录,即可查看监控。

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,495人围观)

还没有评论,来说两句吧...

相关阅读