1、SpringBoot 整合连接池
Java为数据库连接池提供了公共的接口:javax.sql.DataSource
SpringBoot工程默认推荐使用HiKariCP连接池
在springboot中,DataSource默认是HikariDataSource,通过一个getConnection()的方法来获取连接,其中这会先检查是否存在HikariPool,如果存在,则通过getConnection()的方法获取连接;如果不存在,则会先创建HikariPool池子,创建池子用到了synchronized,volatile,以及双重判断是否为空来控制线程安全的创建,然后通过Driver的conncet()的方法来获取连接,最后存放一份到池子,再返回给用户调用。
可以采用断点的形式来跟踪执行的流程:
2、Spring Boot 整合MyBatis框架
Mybatis框架通常会由spring框架进行资源整合,作为数据层技术实现数据交互操作。
1、需要添加mybatis的依赖
参考官网:mybatis.org/spring
2、我们添加了mybatis依赖以后,spring框架启动时会对mybatis进行自动配置。例如SqlSessionFactory工厂对象的创建。假如需要对mybatis框架进行简易配置,可以打开application.properties文件,采用XML配置文件方式:需要在application.properties配置如下的简单配置:
表示在源文件的mapper文件夹下的所有文件夹里的所有xml文件
3、一般使用@Mapper注解来标识该接口有mybatis框架创建其实现类的对象,最后交由Spring的容器管理
/**
* @Mapper 注解由Mapper框架提供,此注解描述的接口由mybatis框架创建其实现类,
* 并交给spring容器管理,对象的名字默认为接口名,然后首字母小写。
*/
@Mapper
public interface XxxDao {
/**基于商品id删除信息
* MyBatis框架中定义SQL映射方式有两种:
* 1)注解 (简单sql)
* 2)xml (复杂sql)
* */
@Delete("delete from tb where id=#{id}")
int deleteById(Integer id) ;
}
4、在MyBatis框架中定义SQL映射的方式有两种:一种是将SQL映射定义在我们的xml映射文件中,一种方式是借助注解将其声明在接口方法上。我们在实际项目中对于简单的SQL映射可以直接以注解方式进行声明即可,复杂SQL还是要写到xml中,充分利用动态SQL进行设计会更好一些。
4.1、以下时借助注解的方式进行声明SQL语句:
@Mapper
public interface XxxDao {
/**基于商品id删除信息
* MyBatis框架中定义SQL映射方式有两种:
* 1)注解 (简单sql)
* 2)xml (复杂sql)
* */
@Delete("delete from tb where id=#{id}")
int deleteById(Integer id) ;
}
4.2、以下是将SQL语句写在xml文件中:
—这就要在application.properties配置好文件路径(见上述2、的配置)
3、Spring Boot整合SpringMVC应用
MVC(Model–view–controller)是软件工程中的一种软件架构模式,基于此模式把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
其中:
View—我们可以理解为前端的技术,UI设计人员进行图形界面设计,负责实现与用户交互。
Controller—负责获取请求,处理请求,响应结果。
Model—可以理解为业务层(Service),以及数据持久层(Dao)的结合。
以下为一次简单的请求处理的流程图:
Spring MVC 是Spring 框架中基于MVC设计思想实现的一个用于处理Web请求的模块。其简易架构分析,如下:
其中:
DispatcherServlet—为前端的的控制器,处理请求的入口,起到分发的作用
HandlerMapping—映射器对象, 用于管理url与对应controller的映射关系。
Interceptors Chain—拦截器,实现请求响应的共性处理。
Controller—Handler—后台的控制器,负责处理请求的控制逻辑,并分发到不同的业务层去。
ViewResolver—视图解析器,解析对应的视图关系(前缀+viewname+后缀),相当于将后台处理后的数据与相关页面进行整合解析,再返回给到DispatcherServlet,然后做出响应。
1、编辑pom.xml文件,添加web依赖,Thymeleaf依赖
在pom.xml文件中配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
其中: Spring Web Starter 提供Spring MVC 依赖支持,并会自动添加一个tomcat依赖,作为嵌入式web服务器使用.thymeleaf是一个html模板引擎,提供了与Spring MVC进行整合的API,可作为MVC架构中Web应用的View层。
2、配置Spring MVC 核心对象
在application.properties文件中添加视图解析器配置(假如没有配置也会默认配置,在默认配置中prefix默认值为classpath:/templates/,后缀默认为.html)。
4、SpringMVC的简单创建
1、controller层的实现
通过@Controller注解来告诉spring这是一个控制层,并将该类交给spring去管理
@RequestMapping(“/xxx/”)可以用在类上以及方法上:
a、当用在类上时,相当于开辟了一个空间,要访问该controller下的方法时,必须在URL带上这个字段,在拼接需要访问的方法功能的URL字段
b、如果在类上加有相应的RequestMapping注解,则在转发时,return “forward:xxa”,这里的ccc点不能带/,因为加上/后就表示是绝对路径,相当于直接在“http://localhost:8080/xxa”的路径,会访问不到该方法,所以在转发时不能带/,不带时表示的是相对路径,也就是在“http://localhost:8080/xxx/xxa”,表示在转发前的方法的空间内找xxa的方法功能。
/**
* Spring MVC中的后端处理器(Handler)
* @author Lee
*/
//http://localhost/xxx/xxa
@Controller
@RequestMapping("/xxx")
public class XxxController {
@RequestMapping("/xxa")
public String doGoodsUI(Model model) {//Model为springmvc中存储数据的一个对象
//获取信息
List<Xxx> list = xxxService.findXxx();
//将商品信息存储到请求作用域
model.addAttribute("xxxlist", list);
return "xxx";//viewname
}
//1)此view会返回给DispatcherServlet对象
//2)DispatcherServlet对象将view传递给视图解析器ViewResolver
//3)ViewResolver会对view的名字进行解析(例如添加前缀,后缀,..)
//4)ViewResolver会将结果返回给DispatcherServlet对象。
//5)DispatcherServlet将结果响应到客户端。
}
2、service层的实现
@Serice的注解表示将该注解的接口或者实现类的实例对象交由spring去创建管理,其中当后面跟有@Scope(“prototype”)表示该对象为多例,spring只会创建以及初始化,不会对其进行储存管理,它是放在堆里面的,@Scope()默认是单例模式,不加@Scope()也是默认是单例模式,可以参考—SpringBoot的学习笔记 — 入门的3、2)。
3、dao层与上述的mybatis的dao层相同的方式,可参考上述。
有一个疑问,bean什么时候被创建?是在第一次使用的时候,Spring对其进行实例化 ,然后将其放在spring容器中,然后在项目关闭,spring容器销毁前执行bean的销毁方法destroy()来对bean进行销毁????
初学者的简单整理,欢迎各位大佬不吝指教