springboot2.5.5配置mybatis(代码片段)

PacosonSWJTU PacosonSWJTU     2023-01-14     789

关键词:

【README】

1.本文记录了 springboot2.5.5 配置 mybatis的步骤;

2.配置mybatis 分为注解和配置两种方式

3.引入mybatis,包括了

  1. 创建springbt项目;
  2. druid数据源配置;
  3. 数据库表与javabean;
  4. mybatis配置与sql映射;
  5. 用户请求controller处理;

【1】springboot使用@注解引入mybatis

【1.1】创建springboot项目

步骤1, 新建springboot项目;

步骤2,选择依赖,包括springweb,mysql驱动,mybatis;(当然也可以手动录入 maven 依赖)

因为  mybatis-spring-boot-starter 引入了 jdbc starter,所需这里无需引入;

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cmc</groupId>
    <artifactId>springbt-06-data-mybatis2</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbt-06-data-mybatis2</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- 引入druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!-- 需要引入log4j,因为druid使用了log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

【1.2】druid数据源配置

步骤1,引入 druid 依赖;

<!-- 引入druid数据源 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.8</version>
        </dependency>
        <!-- 需要引入log4j,因为druid使用了log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

步骤3, 数据源druid配置; application.yml

# 配置springboot数据源
spring:
  datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.163.204:3306/mybatis
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource  # 启用druid数据源
    #   数据源其他配置
    initialSize: 6
    minIdle: 6
    maxActive: 26
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true
    #   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

druid 监控servlet配置;

// 导入druid数据源
@Configuration
public class DruidConfig 

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druid() 
        return new DruidDataSource();
    

    // 配置druid监控
    // 1 配置一个管理后台的servlet
    @Bean
    public ServletRegistrationBean statViewServlet() 
        ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");
        // 配置相关参数
        Map<String, String> params = new HashMap<>();
        params.put("loginUsername", "admin");
        params.put("loginPassword", "admin");
        params.put("allow", "localhost"); // 默认允许所有访问
        params.put("deny", "192.168.163.204"); // 默认允许所有访问
        bean.setInitParameters(params);
        return bean;
    

    // 2 配置一个监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter() 
        FilterRegistrationBean bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        // 配置相关参数
        Map<String, String> params = new HashMap<>();
        params.put("exclusions", "*.js,*.css,/druid/*");
        bean.setInitParameters(params);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return bean;
    

【1.3】数据库表与javabean

步骤1,数据库表

CREATE TABLE `employee` (
  `id` int NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `gender` int DEFAULT NULL,
  `d_id` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3
;

CREATE TABLE `department` (
  `id` int NOT NULL AUTO_INCREMENT,
  `department_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3
;

步骤2,编写db表映射的javabean;


public class Department 
    private Integer id;
    private String departmentName;

    public Department()
    public Integer getId() 
        return id;
    

    public void setId(Integer id) 
        this.id = id;

        MybatisAutoConfiguration conf = null;
    

    public String getDepartmentName() 
        return departmentName;
    

    public void setDepartmentName(String departmentName) 
        this.departmentName = departmentName;
    

    @Override
    public String toString() 
        return "Department" +
                "id=" + id +
                ", departmentName='" + departmentName + '\\'' +
                '';
    



public class Employee 
    private Integer id;
    private String lastName;
    private Integer gender;
    private String email ;
    private Integer dId;

    public Employee()
    .............

【1.4】mybatis全局配置与sql映射

步骤1,mybatic全局配置类(也可以通过 mybatis-config.xml 来实现);

@MapperScan 注解用于扫描 传入包下的所有Mapper类;

@org.springframework.context.annotation.Configuration
@MapperScan("com.cmc.springbt.mapper")
public class MyBatisConfig 

    @Bean
    public ConfigurationCustomizer configurationCustomizer() 
        return new ConfigurationCustomizer() 
            @Override
            public void customize(Configuration configuration) 
                configuration.setMapUnderscoreToCamelCase(true); // 开启驼峰
            
        ;
    

步骤2,编写 mybatis maper,sql操作接口;

MybatisConfig 中的注解 MapperScan 已经可以扫描到 DepartmentMapper, 这里无需 添加@Mapper 注解; 两者取1 即可;

// 指定这是一个操作数据库的mapper
//@Mapper
public interface DepartmentMapper 
    @Select("select * from department where id=#id ")
    public Department getDeptByID(int id);

    @Delete("delete from department where id=#id")
    public int deleteDeptById(int id) ;

    @Insert("insert into department(department_name) values(#departmentName)")
    @Options(useGeneratedKeys = true,keyProperty = "id")
    public int insertDept(Department dept);

    @Update("update department set department_name=#departmentName where id=#id")
    public int updateDept(Department dept);

【1.5】用户请求controller处理,使用 DepartmentMapper

步骤1,请求controller处理

@@RestController
public class DeptController 
    @Autowired
    DepartmentMapper departmentMapper;

    @GetMapping("dept/id")
    public Department getDepartment(@PathVariable("id") Integer id) 
        return departmentMapper.getDeptByID(id);
    
    @GetMapping("dept")
    public Department insertDept(Department dept) 
        departmentMapper.insertDept(dept);
        return dept;
    

注意,这是 @RestController, 而不是 @Controller;因为我是写数据到servlet,而不是到某个具体视图;

步骤2,修改springboot web项目配置(或有)

application.properties  

# 服务器配置
server.port=8085
server.servlet.context-path=/springbt-mybatis2

小结,整体项目结构


【1.6】访问效果

http://localhost:8085/springbt-mybatis2/dept?departmentName=zhangsan01
http://localhost:8085/springbt-mybatis2/dept/13 http://localhost:8085/springbt-mybatis2/dept/13

 


 【2】springboot使用配置引入mybatis

【2.1】 编写mybatis全局配置与sql文件

mybatis-config.xml 全局配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

【2.2】sql接口与sql映射文件

EmployeeMapper.java

// @Mapper 或  @MapperScan 把接口扫描装配到容器中
public interface EmployeeMapper 
    public Employee getEmpById(Integer id);

    public void insertEmp(Employee empt);
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmc.springbt.mapper.EmployeeMapper">
    <!--  通过id查询emp -->
    <select id="getEmpById" resultType="com.cmc.springbt.bean.Employee">
        SELECT id, last_name, email, gender, d_id
          FROM employee
         where id = #id
    </select>
    <!-- 插入emp -->
    <insert id="insertEmp">
        INSERT INTO employee
            (last_name, email, gender, d_id)
        VALUES(#lastName, #email, #gender, #dID)
    </insert>

</mapper>

【2.3】在 application.yml 中指定 mybatis配置

# 配置mybatis 全局配置文件和mapper路径
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml

【2.4】编写 EmpController处理 employee请求

@RestController
public class EmpController 
    @Autowired
    EmployeeMapper employeeMapper;

    @GetMapping("/emp/id")
    public Employee getEmp(@PathVariable("id") Integer id) 
        return employeeMapper.getEmpById(id);
    

小结, mybatis配置后的整体目录结构;


 【2.5】访问效果

http://localhost:8085/springbt-mybatis2/emp/1

基于springboot2.5.5自建启动器starter制品库(代码片段)

【README】本文po出了自建springboot启动器步骤;【1】新建2个starter相关组件根据 mybatis-spring-boot-starter,我们看到自建starter需要两个组件,分别是xxx-spring-boot-starter,xxx-spring-boot-starter-autoconfigure; 查看详情

springboot2.5.5发布,2.6.0也要来了!(代码片段)

距离SpringBoot2.5.4发布一个月不到,SpringBoot2.5.5又来了!本次更新同步发布的版本还有SpringBoot2.4.11:这两个版本分别修复了41、32个bug,以及文档优化、依赖升级。又是两个bug优化版本,没什么好说的了,通... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

一、发布说明9月23日官方发布了SpringBoot2.5.5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

一、发布说明9月23日官方发布了SpringBoot2.5.5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

一、发布说明9月23日官方发布了SpringBoot2.5.5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化... 查看详情

springboot2.5.5正式版发布,matecloud同步完成版本升级

一、发布说明9月23日官方发布了SpringBoot2.5.5版本,此版本包括41个错误修复、文档改进和依赖项升级。二、更新内容2.1bug修复修复执行器端点默认情况下不会清理SPRING_APPLICATION_JSON#28081使用Flyway和SpringIntegration的DataSource初始化... 查看详情

快报!springboot2.5.6发布~我真跟不上了。。。(代码片段)

点击关注公众号,Java干货及时送达上一篇:SpringBoot2.5.5发布,2.6.0也要来了!是的,没过多少天,SpringBoot2.5.6 又来了:本次更新同步发布的版本还有SpringBoot2.4.12:这两个版本分别修复了43、36个bug&... 查看详情

使用 spring boot 2.5.5 和 Spring Cloud 2.0.4 创建 pubsubInputChannel 时出错

】使用springboot2.5.5和SpringCloud2.0.4创建pubsubInputChannel时出错【英文标题】:ErrorCreatepubsubInputChannelwithspringboot2.5.5andSpringCloud2.0.4【发布时间】:2021-12-0606:01:32【问题描述】:我使用的是SpringBoot2.3.3.Release,我们决定将版本更新到2.5.5... 查看详情

mybatis-03-简单配置mybatis

四、配置MyBatis4.1核心配置文件——mybatis-config.xmlMyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。配置文档的顶层结构如下:configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类... 查看详情

mybatis复习mybatis配置mybatis项目结构

项目结构:我在applicationContext.xml中有两个跟mybatis有关的内容:<importresource="mybatis-config.xml"/>  这里面配置了mybatis自身的配置信息<importresource="persistence-config.xml"/>  这里面配置了数据源信息applic 查看详情

深入浅出mybatis:mybatis的所有配置

上一篇介绍了JDBC的相关概念、MyBatis的特性与Hibernate的区别、MyBatis的基本组件与生命周期,基本可以使用MyBatis了。这一篇详细介绍MyBatis的配置,首先看下配置XML文件的层次结构,然后详细介绍每个配置项,说明每项的作用,值... 查看详情

mybatis源码:mybatis配置解析(代码片段)

  Mybatis有两个核心配置,全局配置会影响Mybatis的执行;Mapper配置定义了查询的SQL,下面我们来看看Mybatis是如何加载配置文件的。  本文基于Mybatis源码(一):源码编译准备中案例进行分析,主要示例代码如下:publicstaticvoidma... 查看详情

mybatis配置文件——相关标签详解(代码片段)

目录一、Mybatis配置文件—properties标签二、Mybatis配置文件—settings标签三、Mybatis配置文件—plugins标签四、Mybatis配置文件—typeAliases标签五、Mybatis配置文件—environments标签六、Mybatis配置文件—mappers标签一、Mybatis配置文件—propert... 查看详情

mybatis的配置

<!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3.dtd">***Mapper.xml前面的配置文件 查看详情

mybatis核心配置解析

配置解析核心配置文件mybatis-config.xml系统核心配置文件MyBatis的配置文件包含了会深深影响MyBatis行为的设置和属性信息。能配置的内容如下:configuration(配置)properties(属性)settings(设置)typeAliases(类型别名)typeHandlers(类... 查看详情

聊聊手写mybatis注解配置方式

导航:  聊聊、Mybatis API  聊聊、Mybatis XML 聊聊、Mybatis集成SpringXML方式聊聊、Mybatis集成Spring注解方式聊聊、手写MybatisXML配置方式 在《聊聊、手写MybatisXML配置方式》中聊了通过XML配置方式来实现Mybati... 查看详情

mybatis配置文件

传送门:mybatis XML映射配置文件官方文档  配置文件中的标签顺序不能颠倒,否则会报错。<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config 查看详情

配置mybatis

<properties><mybatis.version>3.2.8</mybatis.version><mybatis.spring.version>1.2.2</mybatis.spring.version><mybatis.paginator.version>1.2.15</mybatis.paginator.ve 查看详情