Spring Boot称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注于业务而非配置。我们可以使用SpringBoot创建java应用,并使用java –jar 启动它,就能得到一个生产级别的web工程
java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功能写好了,究其原因主要是两点:
复杂的配置
项目各种配置其实是开发时的损耗, 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。
混乱的依赖管理
项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这也是件棘手的问题。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。
创建独立的spring应用程序
直接内嵌tomcat、jetty和undertow(不需要打包成war包部署)
提供了固定化的“starter”配置,以简化构建配置
尽可能的自动配置spring和第三方库
提供产品级的功能,如:安全指标、运行状况监测和外部化配置等
绝对不会生成代码,并且不需要XML配置
1.创建工程,在pom.xml中引入依赖
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
org.springframework.boot
spring-boot-starter-web
com.github.drtrang
druid-spring-boot2-starter
1.1.10
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
tk.mybatis
mapper-spring-boot-starter
1.1.7
org.mybatis
mybatis
3.5.4
org.springframework.boot
spring-boot-starter-thymeleaf
2.添加全局配置文件:application.properties
server.port=8888
#logging.level.org.springframework=debug
# 连接四大参数
spring.datasource.url=jdbc:mysql://localhost:3306/heima
spring.datasource.username=root
spring.datasource.password=root
# 可省略,SpringBoot自动推断
#spring.datasource.driverClassName=com.mysql.jdbc.Driver
# mybatis 别名扫描
mybatis.type-aliases-package=cn.itcast.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
#mybatis.mapper-locations=classpath:mappers/*.xml
3.添加引导类
@SpringBootApplication //自动配置+组件扫描+SpringBootConfiguration
//@EnableAutoConfiguration 自动配置
//@ComponentScan 组件扫描
//@SpringBootConfiguration 声明当前类是SpringBoot应用的配置类
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
}
}
@Configuration
:声明一个类作为配置类,代替xml文件
@Bean
:声明在方法上,将方法的返回值加入Bean容器,代替
标签
@Value
:属性注入
@PropertySource
:指定外部属性文件。
4.编写Controller
@Controller
@RequestMapping("user")
public class UserController {
private UserService userService;
@GetMapping("{id}")
@ResponseBody
public User queryById(@PathVariable("id")Long id){
return this.userService.queryUserById(id);
}
@GetMapping("all")
public String toUsers(Model model){
List users = this.userService.queryUserAll();
model.addAttribute("users",users);
return "users";
}
@GetMapping("test")
@ResponseBody
public String test(){
return "hello user!";
}
}
5.添加拦截器,定义配置类,注册拦截器
//拦截器
@Component
public class MyInterceptor implements HandlerInterceptor{
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("前置方法正在执行");
return true;
}
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("后置方法正在执行");
}
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("完成方法正在执行");
}
}
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer{
@Autowired
private MyInterceptor myInterceptor;
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
6.编写service
@Service
public class UserService {
@Autowired
public UserMapper userMapper;
public User queryUserById(Long id){
return this.userMapper.selectByPrimaryKey(id);
}
@Transactional
public void deleteUserById(Long id){
this.userMapper.deleteByPrimaryKey(id);
}
public List queryUserAll() {
return this.userMapper.selectAll();
}
}
其实,我们引入jdbc或者web的启动器,就已经引入事务相关的依赖及默认配置了 ,至于事务,SpringBoot中通过注解来控制。就是我们熟知的@Transactional
7.引入通用mapper
tk.mybatis
mapper-spring-boot-starter
2.0.2
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper{
}
8.启动引导类,测试项目