Spring Boot

Spring Boot

1.springboot概念

springboot是spring快速开发脚手架,通过约定大于配置的方式,快速构建和启动spring项目 。

spring的缺点:

  • 复杂的配置:项目各种配置是开发时的损耗, 写配置挤占了写应用程序逻辑的时间。
  • 混乱的依赖管理:项目的依赖管理非常的繁琐。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这是一个棘手的问题。并且,一旦选错了依赖的版本,随之而来的就是各种的不兼容的bug。

spring boot 可以解决上面2个问题.

Spring Boot 特点:

  • 快速开发spring应用的框架
  • 内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
  • 简化maven配置,parent这种方式,一站式引入需要的各种依赖
  • 基于注解的零配置思想
  • 和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合

2.全注解配置和属性注入

2.1.全注解配置

spring全注解配置主要靠java类和一些注解,比较常用的注解有:

  • @Configuration :声明一个类作为配置类,代替xml文件
  • @Bean :声明在方法上,将方法的返回值加入Bean容器,代替 标签
  • @value :属性注入
  • @PropertySource :指定外部属性文件

用java配置来尝试实现连接池配置:

首先引入Druid连接池依赖:

<dependency> 
   <groupId>com.alibaba</groupId> 
   <artifactId>druid</artifactId> 
   <version>1.1.10</version> 
</dependency>

创建一个jdbc.properties文件,编写jdbc属性:

jdbc.driverClassName=com.mysql.jdbc.Driver 
jdbc.url=jdbc:mysql://127.0.0.1:3306/test
jdbc.username=root 
jdbc.password=123456

然后编写代码:

@Configuration 
@PropertySource("classpath:jdbc.properties") 
public class JdbcConfig { 
    @Value("${jdbc.url}") 
    String url; 
    @Value("${jdbc.driverClassName}") 
    String driverClassName; 
    @Value("${jdbc.username}") 
    String username; 
    @Value("${jdbc.password}") 
    String password; 
    @Bean 
    public DataSource dataSource() { 
        DruidDataSource dataSource = new DruidDataSource(); 
        dataSource.setUrl(url); 
        dataSource.setDriverClassName(driverClassName); 
        dataSource.setUsername(username); 
        dataSource.setPassword(password); 
        return dataSource; 
    } 
} 

解读:

  • @Configuration :声明我们 JdbcConfig 是一个配置类
  • @PropertySource :指定属性文件的路径是: classpath:jdbc.properties
  • 通过 @Value 为属性注入值
  • 通过@Bean将 dataSource() 方法声明为一个注册Bean的方法,Spring会自动调用该方法,将方法的返回值加入Spring容器中。默认的对象名id=方法名,可以通过@Bean(“自定义名字”),来指定新的对象名

接下来就可以在任意位置通过 @Autowired 注入DataSource。

在 HelloController 中测试:

@RestController 
public class HelloController { 
    @Autowired 
    private DataSource dataSource; 
    @GetMapping("hello") 
    public String hello() { 
        return "hello, spring boot!" + dataSource; 
    } 
}
2.2.属性注入

1.新建一个类,用来进行属性注入:

@ConfigurationProperties(prefix = "jdbc") 
public class JdbcProperties { 
    private String url; 
    private String driverClassName; 
    private String username; 
    private String password; 
    // ... 略 
    // getters 和 setters 
} 
  • 在类上通过@ConfifigurationProperties注解声明当前类为属性读取类
  • prefix=“jdbc” 读取属性文件中,前缀为jdbc的值。
  • 在类上定义各个属性,名称必须与属性文件中 jdbc. 后面部分一致
  • 需要注意的是,这里我们并没有指定属性文件的地址,所以我们需要把jdbc.properties名称改为application.properties,这是SpringBoot默认读取的属性文件名:

在这里插入图片描述

2.在JdbcConfifig中使用这个属性:

@Configuration 
@EnableConfigurationProperties(JdbcProperties.class) 
public class JdbcConfig { 
    @Bean 
    public DataSource dataSource(JdbcProperties jdbc) { 
        DruidDataSource dataSource = new DruidDataSource(); 
        dataSource.setUrl(jdbc.getUrl()); 
        dataSource.setDriverClassName(jdbc.getDriverClassName()); 
        dataSource.setUsername(jdbc.getUsername()); 
        dataSource.setPassword(jdbc.getPassword()); 
        return dataSource; 
    } 
} 

通过 @EnableConfigurationProperties(JdbcProperties.class) 来声明要使用 JdbcProperties 这个类的对象。

可以通过以下方式注入JdbcProperties:

@Autowired注入 :

@Autowired 
private JdbcProperties prop;

构造函数注入:

private JdbcProperties prop; 
public JdbcConfig(Jdbcproperties prop){ 
    this.prop = prop; 
}

声明有@Bean的方法参数注入 :

@Bean 
public Datasource dataSource(JdbcProperties prop){ 
    // ...
}

3.整合SpringMVC

修改端口:# 映射端口:server.port=80

3.1.访问静态资源

默认的静态资源路径为:

  • classpath:/META-INF/resources/
  • classpath:/resources/
  • classpath:/static/
  • classpath:/public

习惯会把静态资源放在 classpath:/static/ 目录下。

3.2.添加拦截器

1.首先我们定义一个拦截器:

public class LoginInterceptor implements HandlerInterceptor { 
    private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
    Object handler) {
        logger.debug("处理器执行前执行!"); 
        return true; 
    }
    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, 
    Object handler, ModelAndView modelAndView) { 
        logger.debug("处理器执行后执行!"); 
    }
    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
    Object handler, Exception ex) { 
        logger.debug("跳转后执行!"); 
    } 
}

2.通过实现 WebMvcConfigurer 并添加 @Configuration 注解来实现自定义部分SpringMvc配置:

@Configuration 
public class MvcConfig implements WebMvcConfigurer{ 
    /**
     * 通过@Bean注解,将我们定义的拦截器注册到Spring容器 
     * @return 
    */ 
    @Bean 
    public LoginInterceptor loginInterceptor(){ 
        return new LoginInterceptor(); 
    }
    /**
     * 重写接口中的addInterceptors方法,添加自定义拦截器 
     * @param registry 
    */ 
    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
        // 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径 
        registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**"); 
    } 
}

ant path路径匹配通配符 :

  • ‘?’ 匹配任何单字符
  • ‘*’ 匹配0或者任意数量的字符
  • ‘/**’ 匹配0或者更多的目录

结构如下:

在这里插入图片描述

接下来运行并查看日志:你会发现日志中什么都没有,因为我们记录的log级别是debug,默认是显示info以上,我们需要进行配置。

# 设置com.lxs包的日志级别为debug 
logging.level.com.lxs=debug

4.整合jdbc

引入依赖:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-jdbc</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-test</artifactId> 
</dependency> 
<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>5.1.46</version> 
</dependency> 

配置连接池:

# 连接四大参数 
spring.datasource.url=jdbc:mysql://localhost:3306/springboot 
spring.datasource.username=root 
spring.datasource.password=123456
# 可省略,SpringBoot自动推断 
spring.datasource.driverClassName=com.mysql.jdbc.Driver 
spring.datasource.hikari.idle-timeout=60000 
spring.datasource.hikari.maximum-pool-size=30 
spring.datasource.hikari.minimum-idle=10 

5.整合mybatis

<!--mybatis --> 
<dependency> 
    <groupId>org.mybatis.spring.boot</groupId> 
    <artifactId>mybatis-spring-boot-starter</artifactId> 
    <version>1.3.2</version> 
</dependency>
# mybatis 别名扫描 
mybatis.type-aliases-package=com.lxs.domain 
# mapper.xml文件位置,如果没有映射文件,请注释掉 
mybatis.mapper-locations=classpath:mappers/*.xml 

实体类,直接使用jdbc用到的实体类。

接口:

public interface UserDao { 
    public List<User> findAll(); 
}

映射文件:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper 
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="com.lxs.demo.dao.UserDao"> 
     <select id="findAll" resultType="user"> 
         select * from tb_user 
     </select> 
</mapper> 

Mapper的加载接口代理对象方式有2种

第一种:使用@Mapper注解(不推荐) 需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加 @Mapper 注解,才能被识别。

@Mapper 
public interface UserMapper { 
} 

第二种设置MapperScan,注解扫描的包(推荐),@MapperScan(“dao所在的包”),自动搜索包中的接口,产生dao的代理对象。

@SpringBootApplication 
@MapperScan("com.lxs.demo.dao") 
public class Application { 
    public static void main(String[] args) { 
        SpringApplication.run(Application.class, args); 
    } 
} 

6.Thymeleaf

Thymeleaf 是一个跟 FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下特点:

  • 动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,无网络显示静态内容,有网络用后台得到数据替换静态内容。
  • 与SpringBoot完美整合,springboot默认整合thymeleaf。

thymeleaf表达式:

1.变量表达式即OGNL表达式或Spring EL表达式(在Spring中用来获取model attribute的数据)。如下所示: ${session.user.name}

它们将以HTML标签的一个属性来表示:

<h5>表达式</h5> 
<span>${text}</span> 
<span th:text="${text}">你好 thymleaf</span>

2.选择表达式很像变量表达式,不过它们用一个预先选择的对象来代替上下文变量容器(map)来执行,如下:

  • {customer.name}

被指定的object由th:object属性定义:

<tr th:each="user : ${users}" th:object="${user}"> 
<td th:text="${user.id}">1</td> 
<td th:text="*{name}">张三</td> 
<td th:text="*{userName}">zhangsan</td> 
.... 

3.URL表达式指的是把一个有用的上下文或回话信息添加到URL,这个过程经常被叫做URL重写。 @{/order/list}

URL还可以设置参数: @{/order/details(id=${orderId}, name=*{name})} 相对路径:@{…/documents/report}

url表达式:
<a th:href="@{/delete(id=${user.id}, userName=*{userName})}">删除</a> 
文本替换:
<a th:href="|/update/${user.id}|">修改</a>
字符串拼接:
<a th:href="'/approve/' + ${user.id}">审核</a>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值