栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot整合springmvc、jdbc、mybatis、tk-mybatis

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot整合springmvc、jdbc、mybatis、tk-mybatis

springboot整合springmvc、jdbc

文章目录
  • 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的构件,里面已经对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就不用操心依赖的版本问题了,需要什么依赖,直接引入坐标即可!


    org.springframework.boot
    spring-boot-starter-parent
    2.0.0.RELEASE

2. 添加web启动器

为了让SpringBoot帮我们完成各种自动配置,我们必须引入SpringBoot提供的自动配置依赖,我们称为 启动器 。因为我们是web项目,这里我们引入web启动器:


    
        org.springframework.boot
        spring-boot-starter-web
    

需要注意的是,我们并没有在这里指定版本信息。因为SpringBoot的父工程已经对版本进行了管理了。下面所有提到的依赖导入也是同理。

3. 添加测试依赖

    org.springframework.boot
    spring-boot-starter-test

二、SpringBoot整合SpringMVC 1. 修改端口

配置文件如果是在resources文件夹下创建application.properties:

# 映射端口
server.port=80

配置文件如果是在resources文件夹下创建application.yml:

server:
  port: 8080
2. 访问静态资源

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或者更多的目录

这是我的文件结构可以参考一下

三、SpringBoot整合jdbc 1. 引入依赖

    org.springframework.boot
    spring-boot-starter-jdbc


    org.springframework.boot
    spring-boot-starter-test

当然,不要忘了数据库驱动,SpringBoot并不知道我们用的什么数据库,这里我们选择MySQL:


    mysql
    mysql-connector-java
    5.1.46

2. 配置连接池

其实,在刚才引入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=10
3. 创建实体类
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官网自己实现了:


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.2

2. 配置

application.properties里加入

# mybatis 别名扫描
mybatis.type-aliases-package=com.lxs.domain
# mapper.xml文件位置,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath:mappers/*.xml
3. 实体类

直接使用jdbc用到的实体类

4. mapper接口

还是意思意思

public interface UserMapper {
    public List findAll();
}
5. xml映射文件



    
        select * from tb_user
    

6. 加载mapper接口代理对象 1)使用@Mapper注解

个人不推荐,因为我们需要给每一个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. 引入依赖

    tk.mybatis
    mapper-spring-boot-starter
    2.0.2

2. 实体类

tk mybatis 实体类使用的注解是jpa注解

注意事项:

  1. 默认表名=类名,字段名=属性名
  2. 表名可以使用 @Table(name = “tableName”) 进行指定
  3. @Column(name = “fieldName”) 指定
  4. 使用 @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{
}

大概是有这么些

4. 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);
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351150.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号