- springboot整合springmvc、jdbc
- 前言
- Springboot的特点?
- 一、准备环节
- 1. 添加父工程坐标
- 2. 添加web启动器
- 3. 添加测试依赖
- 二、SpringBoot整合SpringMVC
- 1. 修改端口
- 2. 访问静态资源
- 3. 添加拦截器
- 三、SpringBoot整合jdbc
- 1. 引入依赖
- 2. 配置连接池
- 3. 创建实体类
- 4. 创建dao
- 5. 测试
- 四、SpringBoot整合mybatis
- 1. 引入依赖
- 2. 配置
- 3. 实体类
- 4. mapper接口
- 5. xml映射文件
- 6. 加载mapper接口代理对象
- 1)使用@Mapper注解
- 2)启动类上设置@MapperScan
- 7. 测试
- 四、SpringBoot整合tk.mybatis
- 1. 引入依赖
- 2. 实体类
- 3. mapper接口
- 4. mapper的扫描
前言
springboot是spring快速开发脚手架,通过约定大于配置的方式,快速构建和启动spring项目
Springboot的特点?- Spring Boot是快速开发spring应用的框架,基于注解的零配置思想
- 内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
- 简化maven配置,parent这种方式,一站式引入需要的各种依赖
- 和各种流行框架,spring web mvc,mybatis,spring cloud无缝整合
一、准备环节 1. 添加父工程坐标
SpringBoot提供了一个名为spring-boot-starter-parent的构件,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!
2. 添加web启动器org.springframework.boot spring-boot-starter-parent2.0.0.RELEASE
为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为 启动器 。因为我们是web项目,这里我们引入web启动器:
org.springframework.boot spring-boot-starter-web
需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。下面所有提到的依赖导入也是同理。
3. 添加测试依赖二、SpringBoot整合SpringMVC 1. 修改端口org.springframework.boot spring-boot-starter-test
配置文件如果是在resources文件夹下创建application.properties:
# 映射端口 server.port=80
配置文件如果是在resources文件夹下创建application.yml:
server: port: 80802. 访问静态资源
ResourceProperties的类,里面就定义了静态资源的默认查找路径::
所以默认的静态资源路径为:
- classpath:/meta-INF/resources/
- classpath:/resources/
- classpath:/static/
- classpath:/public
只要静态资源放在这些目录中任何一个,SpringMVC都会帮我们处理。
3. 添加拦截器首先我们定义一个拦截器:
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
System.out.println("处理器执行前执行!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
System.out.println("处理器执行后执行!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
System.out.println("跳转后执行!");
}
}
通过实现 WebMvcConfigurer 并添加 @Configuration 注解来实现自定义部分SpringMvc配置:
import com.scx.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Bean
public LoginInterceptor loginInterceptor(){
return new LoginInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
}
}
add path路径匹配通配符:
- ‘?’ 匹配任何单字符
- ‘*’ 匹配0或者任意数量的字符
- ‘/**’ 匹配0或者更多的目录
这是我的文件结构可以参考一下
org.springframework.boot spring-boot-starter-jdbcorg.springframework.boot spring-boot-starter-test
当然,不要忘了数据库驱动,SpringBoot并不知道我们用的什么数据库,这里我们选择MySQL:
2. 配置连接池mysql mysql-connector-java5.1.46
其实,在刚才引入jdbc启动器的时候,SpringBoot已经自动帮我们引入了一个连接池:
HikariCP应该是目前速度最快的连接池了,我们看看它与c3p0的对比:
因此,我们只需要指定连接池参数即可:
application.properties文件的写法
# 连接四大参数 spring.datasource.url=jdbc:mysql://localhost:3306/springboot spring.datasource.username=root spring.datasource.password=123 # driverClassName可省略,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=103. 创建实体类
public class User{
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private Date created;
private Date updated;
private String note;
}
再加上get和set方法。。。
4. 创建dao
意思意思,就写一个方法
@Repository
public class JdbcDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public List findAll(){
//BeanPropertyMapper: 可以把同名字段赋值给属性
return jdbcTemplate.query("select * from tb_user", new BeanPropertyRowMapper<>(User.class));
}
}
5. 测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class JdbcDaoTest {
@Autowired
private JdbcDao jdbcDao;
@Test
public void testFindAll(){
List all = jdbcDao.findAll();
all.forEach(user -> System.out.println(user));
}
}
基本应该是没什么问题
四、SpringBoot整合mybatis 1. 引入依赖SpringBoot官方并没有提供Mybatis的启动器,不过Mybatis官网自己实现了:
2. 配置org.mybatis.spring.boot mybatis-spring-boot-starter1.3.2
application.properties里加入
# mybatis 别名扫描 mybatis.type-aliases-package=com.lxs.domain # mapper.xml文件位置,如果没有映射文件,请注释掉 mybatis.mapper-locations=classpath:mappers/*.xml3. 实体类
直接使用jdbc用到的实体类
4. mapper接口还是意思意思
public interface UserMapper {
public List findAll();
}
5. xml映射文件
6. 加载mapper接口代理对象 1)使用@Mapper注解select * from tb_user
个人不推荐,因为我们需要给每一个Mapper接口添加 @Mapper 注解,才能被识别。
@Mapper
public interface UserMapper {
}
2)启动类上设置@MapperScan
@MapperScan(“mapper所在的包”),自动搜索包中的接口,产生mapper的代理对象
@SpringBootApplication
@MapperScan("com.scx.mapper") //扫描所有mapper接口包
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
7. 测试
测试代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testFindAll() {
List list = userMapper.findAll();
}
}
四、SpringBoot整合tk.mybatis
tk.mybatis的功能十分强大
1. 引入依赖2. 实体类tk.mybatis mapper-spring-boot-starter2.0.2
tk mybatis 实体类使用的注解是jpa注解
注意事项:
- 默认表名=类名,字段名=属性名
- 表名可以使用 @Table(name = “tableName”) 进行指定
- @Column(name = “fieldName”) 指定
- 使用 @Transient 注解表示跟字段不进行映射
@Table(name = "tb_user")
public class User{
@Id //主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //主键策略是自增
private Long id;
// 用户名
// 自动转换下换线到驼峰命名user_name -> userName
@Column(name = "user_name")//可以不写
private String userName;
// 密码
@Column(name = "password")//可以不写
private String password;
// 姓名
private String name;
// 年龄
private Integer age;
// 性别,1男性,2女性
private Integer sex;
// 出生日期
private Date birthday;
// 创建时间
private Date created;
// 更新时间
private Date updated;
// 备注
private String note;
...
不需要做任何配置就可以使用了
3. mapper接口继承tk.mybatis.mapper.common.Mapper
一旦继承了Mapper,继承的Mapper就拥有了Mapper所有的通用方法,直接原地起飞
@Mapper public interface UserMapper extends tk.mybatis.mapper.common.Mapper{ }
大概是有这么些
注意要把MapperScan类改成tk-mybatis构件的类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@MapperScan("com.scx.dao")//扫描所有mapper接口包
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}



