准备系列-Mybatis(一) mybatis 入门

138 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

1. 什么是Mybatis?

Mybatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

2. Mybatis怎么用

2.1 项目中添加依赖

通过在已有的spring项目中的pom.xml文件中引入以下依赖

<!-- 添加 MyBatis 框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<!-- 添加 MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.2 配置文件中加入 配置

在application.properties中配置以下内容

mybatis.url=jdbc:mysql://xxxx/xxx?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&tinyInt1isBit=false
mybatis.name=username-xxx
mybatis.password=password-xxx
datasource.driverClassName=com.mysql.jdbc.Driver
targetModelPackage=com.jzj.bean.po
targetMapperPackage=sqlmap.kpi
targetClientPackage=com.jzj.repository.mapper;
targetJavaProject=src/main/java
targetResources=src/main/resources
## mybatis扫描 路径配置
spring.datasource.mybatis.master.mapper-location=classpath*:sqlmapper/**/*.xml,

2.3 配置插件生成器 generator

在 pom的 文件中 中 添加配置

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.3.2.RELEASE</version>
        <configuration>
            <finalName>${project.artifactId}</finalName>
            <classifier>boot</classifier>
        </configuration>
    </plugin>
    <plugin>
        <groupId>org.mybatis.generator</groupId>
        <artifactId>mybatis-generator-maven-plugin</artifactId>
        <version>1.3.7</version>
        <configuration>
            <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
            <overwrite>true</overwrite>
            <verbose>true</verbose>
        </configuration>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.46</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-generator</artifactId>
                <version>1.0.5</version>
            </dependency>
        </dependencies>
    </plugin>
</plugins>

在 resources 下 新建generatorConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>

    <properties resource="application-local.properties"/>
    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!-- TKmybatis配置 -->
        <property name="javaFileEncoding" value="UTF-8"/>
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.jzj.tkmybatis.BaseMapper"/>
        </plugin>

        <commentGenerator>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="false"/>
            <property name="suppressDate" value="true"/>

        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="${datasource.driverClassName}"
                        connectionURL="${mybatis.url}" userId="${mybatis.name}"
                        password="${mybatis.password}"/>

        <!--    tinyInt转换为Integer    -->
        <javaTypeResolver type="com.jzj.mybatis.MyJavaTypeResovler"/>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="${targetModelPackage}" targetProject="${targetJavaProject}"/>
        <!-- 生成的映射文件包名和位置 -->
        <sqlMapGenerator targetPackage="${targetMapperPackage}" targetProject="${targetResources}"/>
        <!-- 生成service的包名和位置 -->
        <javaClientGenerator targetPackage="${targetClientPackage}" targetProject="${targetJavaProject}"
                             type="XMLMAPPER"/>

        <table tableName="xxxx" domainObjectName="xxxxPO"
               mapperName="xxxxMapper">
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>
    </context>
</generatorConfiguration>
2.4 配置包扫描

项目代码中配置包扫描

package com.jzj.mybatis;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import java.util.Properties;

/**
 * MyBatis扫描接口,使用的tk.mybatis.spring.mapper.MapperScannerConfigurer
 * 
 */
@Configuration
@AutoConfigureAfter(value = {DataSourceSqlSessionFactoryConfig.class})
public class TkMyBatisMapperScannerConfig {

    @Bean
    public MapperScannerConfigurer masterMapperScannerConfigurer() {

        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("masterSqlSessionFactory");
        mapperScannerConfigurer.setBasePackage("com.jzj.**.repository.mapper");
        Properties properties = new Properties();
        properties.setProperty("mappers", "com.jzj.tkmybatis.BaseMapper");
        properties.setProperty("notEmpty", "false");
        properties.setProperty("IDENTITY", "MYSQL");
        mapperScannerConfigurer.setProperties(properties);
        return mapperScannerConfigurer;
    }

}
2.5 BaseMapper 配置

项目中要配置 baseMapper

public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

3.如何在SpringBoot项目中使用

配置完成后, 可以直接在 generatorConfig中修改 表信息 ,直接修改 tableName , 生成 Mapper, PO, Xml文件

生成了这些文件后, 我们就可以进行简单的增删改查

3.1 如何进行增删改查

假设我们现在有个UserMapper

insert插入员工信息

public void addUsers(List<UserPO> poList) {
    for (UserPO user : poList) {
        groupPO.setAddtime(xxx);
        groupPO.setModtime(xxx);
    }
    //批量插入
    mapper.insertList(poList);
    //单个插入
    mapper.insert(new UserPO("1","2"))
}

query查询员工信息

public List<UserPO> listUsers(String companyId, List<String> employeeIds) {
    Example example = new Example(UserPO.class);

    Example.Criteria criteria = example.createCriteria();
    //userPO 中有 companyId字段
    criteria.andEqualTo("companyId", companyId);
    //UserPO 中有 employeeId字段
    criteria.andIn("employeeId", employeeIds);
    
    return mapper.selectByExample(example);
}

删除员工信息

public void addUsers(List<UserPO> poList) {
    //单个插入
    mapper.delete(new UserPO("1","2"))
}