SpringBoot入门到精通系列
- SpringBoot入门到精通-Spring的注解编程(一)
- SpringBoot入门到精通-SpringBoot入门(二)
- SpringBoot入门到精通-Spring的基本使用(三)
- SpringBoot入门到精通-SpringBoot集成SSM(四)
上一篇文章我们讲的是SpringBoot的基本用法,本篇文章我们来学习一下SpringBoot如何整合web,以及Mybatis以及事务。
五.SpringBoot集成SSM 1.WEB集成 1.1.集成Thymeleaf现在的项目基本上都采用前后端分离架构,也就是项目后台不需要处理页面,但是在一些小型的项目中还是把页面耦合在后台项目中,这就需要集成视图技术(模板技术)。常见的模板技术有 thymeleaf ;freemaker ;Velotity ; jsp 。
jsp相信大家都使用过,因为性能问题现在基本被淘汰,SpringBoot官方推荐使用thymeleaf 。
第一步:集成thymeleaf 需要导入依赖
org.springframework.boot
spring-boot-starter-thymeleaf
第二步:创建thymeleaf模板文件 , 在resources/templates中创建 index.html 文件,内容如下
Title
成功!
这是显示欢迎信息
文件中需要一个 msg 内容来填充, 注意:它不是一个静态资源html,而是thymeleaf的模板文件
第三步:编写实controller
@Controller
public class HelloController {
@RequestMapping("/index")
public String index(Model model){
model.addAttribute("msg","惊不惊喜,刺不刺激");
//返回视图名
return "index";
}
}
第四步:访问http://localhost:9999/index,效果如下
如果你需要对thymeleaf有些个性化 配置,可以在application.yml中配置如下
spring:
thymeleaf:
encoding: utf-8
prefix: classpath:/templates/ #默认去哪个路径找页面
cache: true #是否开启缓存
enabled: true #是否使用 thymeleaf 的开关
suffix: .html #页面的后缀,可以修改
到这里thymeleaf就集成成功了,剩下的就是thymeleaf的语法了,如果您公司有用到thymeleaf那你可以专门早点资料去学习一下,这里不是重点,不做过多描述。
1.2.webjarsWebJars能使Maven的依赖管理支持OSS的JavaScript库/CSS库,比如jQuery、Bootstrap等;WebJars是将Web前端Javascript和CSS等资源打包成Java的Jar包,这样在Java Web开发中我们可以借助Maven这些依赖库的管理,保证这些Web资源版本唯一性。可以在( http://www.webjars.org/)网站查找你需要的依赖。
这里以jQuery为例,第一步:导入jquery的jar
org.webjars
jquery
3.4.1
第二步:在页面导入jquery的js即可使用
1.3.注册拦截器
我们可以回顾一下在SpringMVC XML中是如何注册拦截器的,首先需要定义拦截器类,实现HandlerInterceptor或者继承HandlerInterceptorAdapter也行。然后需要在xml中注册拦截器
那么在SpringBoot中是如何注册拦截器的呢?第一个动作是一样的,都需要定义一个拦截器类,第二步注册拦截器在SpringBoot中提供了一个 WebMvcConfigurer
接口,专门用来对SpirngMVC做配置。步骤如下
第一步:创建拦截器类 和以前的创建方式一样
@Component
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle................:"+request.getRequestURI());
return super.preHandle(request, response, handler);
}
}
第二步:注册拦截器, 在配置类上实现WebMvcConfigurer,复写addInterceptors,该方法提供了一个InterceptorRegistry专门用来注册拦截器,如下:
@SpringBootApplication
public class ApplicationConfig implements WebMvcConfigurer {
@Autowired
private MyHandlerInterceptor myHandlerInterceptor;
/**
* 注册拦截器
* @param registry :拦截器的注册器
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
//指定要拦截器的请求/** 代表所有, excludePathPatterns代表要排除的请求
registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
}
1.4.添加视图控制器
ViewControllers被叫做视图控制器,当项目中涉及大量的页面跳转,我们可以使用addViewControllers方法实现无业务逻辑跳转,从而减少控制器代码的编写。WebMvcConfigurer的addViewControllers方法可以实现将一个请求直接映射为视图,不需要编写控制器来实现,从而简化了页面跳转。
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//当访问 /xx 路径 ,自动跳转到 templates/xx.html 页面
registry.addViewController("/xx").setViewName("xx.html");
}
当访问/xx 定位到 templates/xx.html
2.Mybatis集成SpringBoot集成Mybatis之前我们也回顾一下传统的Spring和Mybatis整合的步骤,重要是在Spring的xml配置中
其实是非常麻烦的,那么在SpringBoot中又是如何配置的呢?
2.1.集成DataSource集成Mybatis肯定是需要先集成DataSource,SpringBoot已经提供了自动装配DataSource功能。我们只需要在ymal中做简单配置即可。
第一步:导入依赖 , 我这里把连接池,驱动,mybatis全导入进来
com.alibaba
druid
1.1.20
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.1.1
第二步:配置DataSource
spring:
datasource:
username: root
password: admin
url: jdbc:mysql:///test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource #指定使用druid的连接池
这里我指定了type指向了DruidDataSource连接池,如果不指定,默认会使用HikariDataSource作为连接池
2.2.集成MyBatis集成mybatis就需要创建domain , mapper等组件了,还要准备数据库.
第一步:User实体类如下
//lombok,自动生成get,set
@Data
public class User {
private Long id;
private String username;
}
第二步:mapper/UserMapper接口如下
public interface UserMapper {
User selectAll();
}
第三步:resources/mapper/UserMapper.xml如下
SELECT id,username FROM t_user
第四步:数据库如下
第五步:配置mybatis , application.yml如下
mybatis:
type-aliases-package: "cn.whale.domain" #别名
mapper-locations: classpath:mapper/UserMapper.xml #扫描SQL映射文件
#config-location: mybatis-config.xml #mybatis配置文件
第六步:配置Mapper接口扫描
@SpringBootApplication
//mapper映射器自动扫描
@MapperScan("cn.whale.mapper")
public class ApplicationConfig {
...
}
@MapperScan的作用等同于传统Spring配置Mybatis时配置的 MapperScannerConfigurer ,可以实现mapper映射器的自动扫描。
2.3.集成Service第七步:编写service
public interface IUserService {
List selectAll();
}
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper ;
@Override
public List selectAll() {
return userMapper.selectAll();
}
}
2.4.集成WEB
第八步:编写Controller
@RestController
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/users")
public List userList(){
return userService.selectAll();
}
}
最后结构如下 第九步:启动测试,效果如下
在Spring中我们有两种配置事务的方式,一是在XML中使用的方式统一配置,这种方式比较麻烦新项目一般不用,二是使用注解@Transcationl注解的方式,这种方式需要开启
第三步:在配置类导入xml配置文件,让其生效
@SpringBootApplication
@MapperScan("cn.whale.mapper")
@ImportResource("classpath:applicationContext.xml")
public class ApplicationConfig{
...
}
4.PageHelper的集成
PageHelper是一个mybatis的分页插件,可以帮我们自动生成查询count的sql和分页limit。可以简化我们的代码,官网文档
4.1.集成pagehelper导入pagehelper基础依赖
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3
4.2.分页查询
select id,username from t_user
注意:用了pagehelper之后 ,查询总条数的sql不用写 , limit 不用写
分页查询,把查询的结果强转成Page对象,它是PageHelper提供的一个分页对象,其中包含总条数,列表,其本身继承了ArrayList.
@Override
public Page selectAll() {
//设置分页条件,1是查询第几页,5是查询条数,通常通过参数对象传入这个2个值
PageHelper.startPage(1,5 );
return (Page) userMapper.selectAll();
}
-
PageHelper.startPage(1,5 ):设置当前页和每页条数
-
Page :是pagehelper自己封装的页面对象,如同我们以前的PageList ,里面有总条数,列表,总页数等等
把Page对象转成我们自己的结果对象 , 编写PageResult
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult {
private Long total;
private List list;
}
编写controller逻辑
@RestController
public class UserController {
@Autowired
private IUserService userService;
@RequestMapping("/users")
public PageResult userList(){
Page page = userService.selectAll();
return new PageResult(page.getTotal(),page.getResult());
}
}
测试效果
上面的步骤已经就可以完成PageHelper的使用了,当然也可以对PageHelper做一些个性化配置,具体 见文档 ,比如:
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
- helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式
- reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNumpages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。
- supportMethodsArguments :支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
- params :为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero
在企业中,有些开发者认为SpringBoot内置的Tomcat并不是最优的选择,需要有一些自定义的配置,这个时候就需要把SpringBoot打成war
包然后部署到外置的Tomcat中。
产生一个可部署war包的第一步是提供一个 SpringBootServletInitializer
子 类,并覆盖它的 configure
方法,这充分利用了Spring框架对Servlet 3.0的支 持,并允许你在应用通过servlet容器启动时配置它。
第一步:启动类实现SpringBootServletInitializer接口
//SpringBootServletInitializer 实现了 WebApplicationInitializer,用来使用传统的 WAR 部署运行SpringApplication 。
// 它将Servlet 、 Filter和ServletContextInitializer bean 从应用程序上下文绑定到服务器
@SpringBootApplication
@MapperScan("cn.whale.mapper")
public class ApplicationConfig extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(ApplicationConfig.class,args);
}
//把当前配置类和
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ApplicationConfig.class);
}
}
5.2.修改依赖
第三步:修改依赖,排除掉SpringBoot内置的tomcat,额外提供一个tomcat,只不过scope需要指定为 provided ,因为我们有外置的Tomcat。
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-tomcat
provided
5.3.部署Tomcat
第四步:IDEA增加Tomcat, 点击 Edit Configurations 增加一个Tomcat Server
发布项目
配置Tomcat
注意:SpringBoot 2x以上请使用Tomcat 8 以上,否则回出错
点击启动按钮启动项目 浏览器访问:http://localhost:8080/users ,效果如下
文章就到这把,喜欢请给个好评,喜欢请给个好评,喜欢请给个好评