003 SpringBoot整合SpringMVC、Mybatis 案例
1.不使用骨架创建一个maven工程
2.修改POM.xml文件
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>lucky</groupId> <artifactId>day24_springboot_yelou</artifactId> <version>1.0-SNAPSHOT</version> <!--所有的springBoot工程都必须继承spring-boot-starter-parent--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> </parent> <dependencies> <!--web工程的起步依赖,这个起步依赖已经帮我们整合SpringMVC了--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project>
3.编写引导类及控制器类
引导类:MySpringBootApplication.java
package lucky; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //声明该类是一个springboot引导类:springboot应用的入口 @SpringBootApplication public class MySpringBootApplication { public static void main(String[] args) { //run方法:运行SpringBoot的引导类,run参数就是springBoot引导类的字节码对象 SpringApplication.run(MySpringBootApplication.class); } }
控制器类:
package lucky.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(path = "/users") public class UsersController { @RequestMapping(path = "/query") @ResponseBody public String queryUsers(){ return "hello users"; } }
至此,springboot整合springmvc完成了。(注意:整合工作由spring-boot-starter-web这个起步依赖帮我们完成)
4.访问静态资源
查看源码,有一个叫做ResourceProperties的类,里面就定义了静态资源的默认查找路径:
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"}; private String[] staticLocations; private boolean addMappings; private final ResourceProperties.Chain chain; private final ResourceProperties.Cache cache;
默认的静态资源路径为:
- classpath:/META-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public/
我们习惯会把静态资源放在classpath:/static/
在浏览器中访问:http://localhost:8080/common.js
5.拦截器
拦截器也是我们经常需要使用的。
拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。
(1)定义一个拦截器
package lucky.interceptors; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @Component public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle method is running!"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle method is running!"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion method is running!"); } }
(2)定义配置类,注册拦截器
package lucky.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MvcConfiguration implements WebMvcConfigurer { @Autowired private HandlerInterceptor myInterceptor; /** * 重写接口中的addInterceptors方法,添加自定义拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor).addPathPatterns("/**"); } }
控制台输出:
6.
<!--jdbc的启动器,默认使用HikariCP连接池--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--不要忘记数据库驱动,因为springboot不知道我们使用的什么数据库,这里选择mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
SpringBoot已经自动帮我们引入了一个连接池:
HikariCP应该是目前速度最快的连接池了,我们看看它与c3p0的对比:
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=plj824
#spring集成Mybatis环境
#pojo别名扫描包
mybatis.type-aliases-package=lucky.domain
#加载Mybatis映射文件
#mybatis.mapper-locations=classpath:mapper/*Mapper.xml
# 设置org.springframework包的日志级别为debug
logging.level.org.springframework=debug
<!-- 通用mapper --> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>2.0.2</version> </dependency>
数据库表对应实体类:
注意:@Table、@Id等注解是通用Mapper提供的
参考文献:
package lucky.domain; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Table(name="users") public class Users { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 主 键 private String username; // 用户名 private String password; // 密 码 private String name; // 姓 名 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", name='" + name + '\'' + '}'; } }
UsersMapper.java
package lucky.mapper; import lucky.domain.Users; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UsersMapper extends tk.mybatis.mapper.common.Mapper<Users>{ }
7.控制器及service代码
UsersService.java
package lucky.service; import lucky.domain.Users; import lucky.mapper.UsersMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class UsersService { @Autowired private UsersMapper usersMapper; public Users queryUsersById(Integer id){ return this.usersMapper.selectByPrimaryKey(id); } @Transactional public void deleteUserById(Long id){ this.usersMapper.deleteByPrimaryKey(id); } }
UsersController.java
package lucky.controller; import lucky.domain.Users; import lucky.service.UsersService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(path = "/users") public class UsersController { @Autowired private UsersService usersService; @RequestMapping(path = "/query") @ResponseBody public String queryUsers(){ return "hello users"; } @RequestMapping(path = "/queryUsersById") @ResponseBody public Users queryUsersById(@RequestParam("id") Integer id){ return this.usersService.queryUsersById(id); } }
8.运行效果
分类:
乐优商城项目
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)