Springboot进阶-JDBC、Druid、Mybatis、Swagger、SpringMVC、Mail

简介: Springboot进阶-JDBC、Druid、Mybatis、Swagger、SpringMVC、Mail

1.Springboot-JDBC

  1. Springboot整合JDBC后,引入spring-boot-starter-jdbc,通过JdbcTemplate来操作数据库。
  2. 导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  1. 通过JdbcTemplate来操作数据库,进行增删改查
@RestController
public class UserController {
    @Resource
    private JdbcTemplate jdbcTemplate;
    //from fhadmin.cn
    @GetMapping("/delete")
    public String delete() {
        String sql = "delete from tb_user where id = 9";
        jdbcTemplate.update(sql);
        return "delete ok";
    }
    @GetMapping("/update")
    public String update() {
        String sql = "update tb_user set name= 'tom9' where id = 9";
        jdbcTemplate.update(sql);
        return "update ok";
    }
    @GetMapping("/insert")
    public String insert() {
        String sql = "insert into tb_user (id,name,age) values (10,'tom10',10)";
        jdbcTemplate.update(sql);
        return "insert ok";
    }
    @GetMapping("/get")
    public List<Map<String, Object>> getList() {
        String sql = "select * from tb_user";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
}

回到顶部

2.Springboot-Druid

  1. 导入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>
<!-- druid 需要输出日志 from fhadmin.cn -->
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>
  1. application.yaml配置Druid连接池
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=UTF8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource
    #Spring Boot 默认是不注入这些属性值的,需要通过DruidDataSource绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
  1. yaml中Druid连接池配置和DruidDataSource绑定
@Configuration
public class DruidConfiguration {
    /**
     * yaml中druid其他配置默认是不会导入的,需要创建DruidDataSource时加载
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}
  1. 配置访问Druid的Servler
@Configuration
public class DruidConfiguration {
    /**
     * 配置Druid访问的Serlvet
     * Springboot项目没有web.xml配置,servlet和filter可以通过
     * ServletRegistrationBean和FilterRegistrationBean加入到容器中。
     * @return
     */
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
        // 将StatViewServlet加入
        registrationBean.setServlet(new StatViewServlet());
        // 配置访问的路径,druid的后台访问路径
        registrationBean.setUrlMappings(Arrays.asList("/druid/*"));
        // 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
        // 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
        // druid访问登录密码
        Map<String, String> map = new HashMap<>();
        map.put("loginUsername", "root");
        map.put("loginPassword", "123456");
        // 只有本机可以访问
        // 当配置是localhost时会出错java.lang.IllegalArgumentException: Invalid IP Address [localhost]
        // 可以配置为map.put("allow", "127.1.0.0");
        // map.put("allow", "localhost");
        map.put("allow", "127.1.0.0");
        // allow="",谁都可以访问
        //map.put("allow", "");
        // 禁止访问
        map.put("tom", "192.168.133.125");
        registrationBean.setInitParameters(map);
        return registrationBean;
    }
}
  1. 配置Druid监控的Filter
@Configuration
public class DruidConfiguration {
    /**
     * 配置Druid监控的Filter
     * Springboot项目没有web.xml配置,servlet和filter可以通过
     * ServletRegistrationBean和FilterRegistrationBean加入到容器中。
     * @return
     */
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new WebStatFilter());
        /*
        <filter>
            <filter-name>DruidWebStatFilter</filter-name>
            <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
            <init-param>
            <param-name>exclusions</param-name>
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
            </init-param>
       </filter>
        <filter-mapping>
            <filter-name>DruidWebStatFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
         */
        // 配置结果相等于web.xml中的如上配置
        Map<String, String> map = new HashMap<>();
        // 过滤的资源,过滤的资源,WebStatFilter不会对这些资源进行监控。
        map.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        // 过滤所有的请求。 WebStatFilter会监控这个请求。并且展示在druid的 web应用下。
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.setInitParameters(map);
        return registrationBean;
    }
}

回到顶部

3.Springboot-Mybatis

  1. 导入依赖
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
  1. mapper.xml存放位置
mybatis:
  # 别名包
  type-aliases-package: com.my.springboot.pojo
  # mapper.xml的位置
  mapper-locations: classpath:/mapper/*.xml
  1. 配置dao层接口的两种方式
  1. 使用@Mapper注解
@Mapper
@Repository
public interface UserDao {
    List<User> getList();
}
  1. 启动类上通过@MapperScans配置
@SpringBootApplication
@MapperScans({
        @MapperScan("com.my.springboot.dao")
})
public class Demo05Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo05Application.class, args);
    }
}

回到顶部

4.Springboot-Swagger

  1. 导入依赖
<!-- 3.0和springboot整合,直接导入starter -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>
  1. 配置
@Configuration
// 开启Swagger
//from fhadmin.cn
@EnableSwagger2
public class SwaggerConfig {
    /**
     * 构建Swagger配置
     * @param environment
     * @return
     */
    @Bean
    public Docket docket(Environment environment) {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                // 配置要扫描的包
                .apis(RequestHandlerSelectors.basePackage("com.my.springboot"))
                // 过滤请求 只扫描 /index 有关的请求
                //.paths(PathSelectors.ant("/index"))
                .build();
    }
    /**
     * 配置swagger页面显示
     * @return
     */
    private ApiInfo apiInfo() {
        Contact contact = new Contact("tom", "www.tom.com", "tom@163.com");
        return new ApiInfo(
                // title
                "swagger2练习",
                // description
                "swagger2整个Springboot练习",
                // version
                "1.0",
                // 网站访问路径
                "www.www.www",
                // 个人信息
                contact,
                // license
                "Apache 2.0",
                // licenseUrl
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}
  1. Swagger访问地址。http://localhost:8080/swagger-ui/index.html
  2. 配置只在swagger在dev和test环境可以访问
//from fhadmin.cn
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket docket(Environment environment) {
        Profiles profiles = Profiles.of("dev", "test");
        // dev和test环境 返回true,可以使用swagger
        // prod环境返回false,不适用swagger
        boolean flag = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                // 配置是否启用 swagger
                .enable(flag)
                .select()
                // 配置要扫描的包
                .apis(RequestHandlerSelectors.basePackage("com.my.springboot"))
                .build();
    }
}
  1. Swagger配置分组
//from fhadmin.cn
@Configuration
@EnableSwagger2
public class SwaggerConfig {
     /**
     * 配置多个分组,就创建多个Docket对象,设置不同的gruopName()。
     * @return
     */
    @Bean
    public Docket docker1() {
        return new Docket(DocumentationType.OAS_30).groupName("bob");
    }
    @Bean
    public Docket docker2() {
        return new Docket(DocumentationType.OAS_30).groupName("tom");
    }
}
  1. Swagger注解
// 实体类不会被扫描到,需要扫描到的接口,返回实体类对象,才能被Swagger配置 from fhadmin.cn
@Data
@ApiModel(value = "用户", description = "用户类")
public class User {
    @ApiModelProperty(value = "id")
    private Integer id;
    @ApiModelProperty(value = "name")
    private String name;
    @ApiModelProperty(value = "age")
    private Integer age;
}
@RestController
@Api(tags = {"控制用户url"}, produces = "application/json")
public class UserController {
    // 方法说明
    @ApiOperation("获取一个用户")
    // 参数说明
    @ApiImplicitParams({
            @ApiImplicitParam(name = "用户名", defaultValue = "tom", required = true)
    })
    @GetMapping("/user")
    public String user() {
        return "user";
    }
}

回到顶部

5.Springboot-SpringMVC

  1. 将web.xml中的Servlet和Filter配置到容器中。
@Configuration
public class DruidConfiguration {
    /**from fhadmin.cn
     * 配置Druid访问的Serlvet
     * Springboot项目没有web.xml配置,servlet和filter可以通过
     * ServletRegistrationBean和FilterRegistrationBean加入到容器中。
     * @return
     */
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet() {
        ServletRegistrationBean<StatViewServlet> registrationBean = new ServletRegistrationBean<>();
        // 将StatViewServlet加入
        registrationBean.setServlet(new StatViewServlet());
        // 配置访问的路径,druid的后台访问路径
        registrationBean.setUrlMappings(Arrays.asList("/druid/*"));
        // 这些参数可以在 com.alibaba.druid.support.http.StatViewServlet
        // 的父类 com.alibaba.druid.support.http.ResourceServlet 中找到
        // druid访问登录密码
        Map<String, String> map = new HashMap<>();
        map.put("loginUsername", "root");
        map.put("loginPassword", "123456");
        // 只有本机可以访问
        // 当配置是localhost时会出错java.lang.IllegalArgumentException: Invalid IP Address [localhost]
        // 可以配置为map.put("allow", "127.1.0.0");
        // map.put("allow", "localhost");
        map.put("allow", "127.1.0.0");
        // allow="",谁都可以访问
        //map.put("allow", "");
        // 禁止访问
        map.put("tom", "192.168.133.125");
        registrationBean.setInitParameters(map);
        return registrationBean;
    }
    /**from fhadmin.cn
     * 配置Druid监控的Filter
     * Springboot项目没有web.xml配置,servlet和filter可以通过
     * ServletRegistrationBean和FilterRegistrationBean加入到容器中。
     * @return
     */
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter() {
        FilterRegistrationBean<WebStatFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new WebStatFilter());
        /*
        <filter>
            <filter-name>DruidWebStatFilter</filter-name>
            <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
            <init-param>
            <param-name>exclusions</param-name>
            <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
            </init-param>
       </filter>
        <filter-mapping>
            <filter-name>DruidWebStatFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
         */
        // 配置结果相等于web.xml中的如上配置
        Map<String, String> map = new HashMap<>();
        // 过滤的资源,过滤的资源,WebStatFilter不会对这些资源进行监控。
        map.put("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        // 过滤所有的请求。 WebStatFilter会监控这个请求。并且展示在druid的 web应用下。
        registrationBean.setUrlPatterns(Arrays.asList("/*"));
        registrationBean.setInitParameters(map);
        return registrationBean;
    }
}
  1. 配置视图解析器
  1. 方式一
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    /**from fhadmin.cn
     * 自定义视图解析器 方式一
     * @return
     */
    @Bean
    public ViewResolver viewResolver() {
        return new MyViewResolver();
    }
    public static class MyViewResolver implements ViewResolver {
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}
  1. 方式二
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    /**from fhadmin.cn
     * 自定义视图解析器 方法二
     * @param registry
     */
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.viewResolver(new MyViewResolver());
    }eturn new MyViewResolver();
    }
    public static class MyViewResolver implements ViewResolver {
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}
  1. 其他配置
@Configuration
//@EnableWebMvc // 让springboot自动配置失效 from fhadmin.cn
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 当URL访问/hello时,跳转到 templates/index.html
        registry.addViewController("/hello").setViewName("index");
    }
}
  1. 异常处理
@ControllerAdvice
@Slf4j
public class ControllerExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ModelAndView handlerException(HttpServletRequest request, Exception e) throws Exception {
        log.error("request url {}, error info {}", request.getRequestURL(), e);
        // 如果捕获到的异常上有ResponseStatus注解,说明是页面找不到的异常,这里直接抛出,
        // 交给springboot去处理,来返回error/404.html。
        if (AnnotationUtils.findAnnotation(e.getClass(), ResponseStatus.class) != null) {
            throw e;
        }
        ModelAndView mv = new ModelAndView();
        mv.addObject("url", request.getRequestURL());
        mv.addObject("exception", e);
        mv.setViewName("error/error.html");
        return mv;
    }
}
目录
相关文章
|
2月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
321 3
|
9月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
482 0
|
6月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1109 1
Spring boot 使用mybatis generator 自动生成代码插件
|
6月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
270 1
|
7月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
701 10
|
9月前
|
Java 数据库连接
【YashanDB知识库】Springboot启动找不到崖山jdbc驱动的问题处理
本文来自YashanDB官网,主要解决SpringBoot应用启动时出现“找不到崖山JDBC驱动”的问题,尽管lib目录下已有yashandb-jdbc-1.6.9.jar文件。错误信息显示`java.lang.ClassNotFoundException: com.yashandb.jdbc.Driver`。解决方案为:通过`which java`等命令定位Java安装路径,将驱动jar包复制到JRE的`lib/ext`目录下,最后重启应用即可。
|
9月前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
726 0
|
9月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1202 0
|
设计模式 前端开发 JavaScript
Spring MVC(一)【什么是Spring MVC】
Spring MVC(一)【什么是Spring MVC】