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自动生成时的那些借口方法。
在这里插入图片描述这个时候我们可以直接执行这个已经封装好的方法。
测试一个selectAll(),
在这里插入图片描述可以看到,测试通过,查出了内容。

第三歩 导入需要的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,这个问题暂时没弄清楚。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值