tkmybatis的使用

tkmybatis又叫做mybatis通用mapper,是一个很方便的数据库使用插件。可以替代寻常mybatis的使用。

第一步 导入

使用的是springboot环境,导入如下依赖,这个时候就不要导入mybatis的依赖了,不然可能会起冲突。

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

第二步 建立实体类与接口

tkmybatis叫mybatis通用mapper的原因正是它已经写好了mabatis自动生成的那些接口与sql,因此,对于单表的操作,我们是无需再进行xml文件的编写。
先用以下的实体类:

@Table(name = "t_user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String nickname;

    private Integer sex;

    private Integer age;

    private String password;

    private Integer status;

    private String name;

    private String identity;

    private String position;

    private Long roleid;

    private Long profession;

此时的我们使用注解@table将User类与数据库的t_user表进行关联。
如果编写的实体类属性与数据库属性命名有差异,需要使用@Column注解进行绑定,没有直接这样就可以了。
这个时候添加接口。

@Repository
public interface UserMapper extends Mapper<User> {
}

可以看到,接口中没有任何方法,这是因为我们继承的Mapper类中已经实现了我们常用对数据库的增删改查,也就是mybatis自动生成时的那些借口方法。
tkmybatis的使用_第1张图片这个时候我们可以直接执行这个已经封装好的方法。
测试一个selectAll(),
tkmybatis的使用_第2张图片可以看到,测试通过,查出了内容。

第三歩 导入需要的Mapper

tkmybatis的作用当然不仅在于Mapper类里的关于主键的增删改查,就像mybatis还有example类的运用一样。
它的统用mapper类不止一个Mapper,还有MySqlMapper,IdsMapper,ConditionMapper,ExampleMapper。ExampleMapper一眼看去就可以看出,他就是mybatis的example类的封装,用法类似,ConditionMapper与ExampleMapper的用法也是类似的。
至于IdsMapper与MySqlMapper这两个则是很有意思的两个类

  • IdsMapper 里有批量删除和批量查询的方法,但是奇特的是,他们接受的参数不是List,而是String。而且是带有,的String,因此我们如果传入String,需要使用类似如下,当然,最好是使用StringBuilder
 public int deleteSomeUsers(List<Long> sysTestList) throws  BusinessException{
        String ids = "";
        for (int i = 0; i < sysTestList.size(); i++) {
            if (i == sysTestList.size() - 1) {
                ids = ids + sysTestList.get(i);
            } else {
                ids = ids + sysTestList.get(i) + ",";
            }
        }
        try {
            return userMapper.deleteByIds(ids);
        }catch (Exception ex){
            throw new BusinessException("1005","批量删除失败",ex);
        }
    }

先将list转成String使用。

  • MySqlMapper里的方法是批量插入和单插方法,需要注意的是,它们插入的对象的id必须是自增的,不能手动添加,否则插入时会出现异常。

第四步 关于多表查询

这个其实也不全是tkmybatis的内容,mybatis也是一样的,当两张表出现关联时,比如说前端查询某个user时中要求包含role对象,此时,我们可以由两种做法

  1. 先查询用户,按照roleid查询到role,两者放进一个新的对象传给前端
  2. 建立xml文件,利用collection建立resultmap,编写sql语句,使用表连接来查询到一个对象传给前端。
    为了偷懒和对xml等不熟可能喜欢使用第一种情况,但其实这个非常不好的,因为这样子数据库需要进行多次查询,会对数据库产生很大的负担,并且,还需要加入事务进行控制。这是不合适的。

附:tkmybatis自动生成

这个其实不用也可以,但是有时候偷懒用用也无妨
导入依赖如下:

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <!--自动生成-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.5</version>
                    <configuration>
                        <!--配置文件的路径-->
                        <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
                        <overwrite>true</overwrite>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>8.0.19</version>
                        </dependency>
                        <dependency>
                            <groupId>tk.mybatis</groupId>
                            <artifactId>mapper-spring-boot-starter</artifactId>
                            <version>2.1.0</version>
                        </dependency>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.5</version>
                        </dependency>
                        <dependency>
                            <groupId>tk.mybatis</groupId>
                            <artifactId>mapper</artifactId>
                            <version>3.4.3</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

配置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.properties"/>

    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <!--处理sql中的`符号-->
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>

        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
            <!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
            <property name="caseSensitive" value="true"/>
        </plugin>

        <!--数据源配置-->
        <jdbcConnection driverClass="${spring.datasource.driver-class-name}"
                        connectionURL="${spring.datasource.url}"
                        userId="${spring.datasource.username}"
                        password="${spring.datasource.password}">
            <property name="nullCatalogMeansCurrent" value="true"/>
        </jdbcConnection>

        <!--model包路径-->
        <javaModelGenerator targetPackage="com.lichangduo.magazine.pojo.entity" targetProject="src/main/java"/>
        <!--mapper.xml包路径-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
        <!--mapper包路径-->
        <javaClientGenerator targetPackage="com.lichangduo.magazine.mapper" targetProject="src/main/java"
                             type="XMLMAPPER"/>
        <!--表配置,tableName支持%,表示全部生成-->
        <table tableName="t_profession" domainObjectName="Profession">
            <!--mysql 配置-->
            <generatedKey column="id" sqlStatement="Mysql" identity="true"/>
        </table>

    </context>
</generatorConfiguration>

配置aplication.properties

spring.datasource.url=jdbc:mysql://localhost:3306/db_magazine?serverTimezone=UTC&useUnicode=true&charaterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=666666
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

再使用maven运行就ok了。
不过有一个问题就是在application.yml自动生成的话它读取yml信息会出错,但是明明修改了properties resource,这个问题暂时没弄清楚。

你可能感兴趣的:(数据库,spring,boot)