tkMapper插件的详细讲解[通俗易懂]

tkMapper插件的详细讲解[通俗易懂]tkMapper插件的详细讲解一、tkMapper简介tkMapper就是一个MyBatis插件,是在MyBatis的基础上提供的开发工具,可以让开发变得简单,提高开发效率。作用:1、提供了针对单表通用的数据库操作方法2、逆向工程(根据数据表生成实体类、dao接口、映射文件)二、tkMapper整合1、基于SpringBoot完成MyBatis的整合2、整合tkMapper2.1、添加tkMapper的依赖2.2、修改启动类的@MapperScan注解的包为***tk.mybatis.spring.anno

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用


一、tkMapper简介

tkMapper就是一个MyBatis插件,是在MyBatis的基础上提供的开发工具,可以让开发变得简单,提高开发效率。

作用:

1、提供了针对单表通用的数据库操作方法

2、逆向工程(根据数据表生成实体类、dao接口、映射文件)


二、tkMapper整合

1、基于SpringBoot完成MyBatis的整合

2、整合tkMapper

2.1、添加tkMapper的依赖

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

2.2、修改启动类的@MapperScan注解的包为tk.mybatis.spring.annotation.MapperScan

package com.qfedu.tkmapperdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.qfedu.tkmapperdemo.dao")
public class TkmapperDemoApplication { 
   

    public static void main(String[] args) { 
   
        SpringApplication.run(TkmapperDemoApplication.class, args);
    }

}

三、tkMapper的使用

1、创建数据表

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `user_id` int(64) NOT NULL AUTO_INCREMENT COMMENT '主键id;用户id',
  `username` varchar(255) NOT NULL COMMENT '用户名;用户名',
  `password` varchar(64) NOT NULL COMMENT '密码;密码',
  `nickname` varchar(255) DEFAULT NULL COMMENT '昵称;昵称',
  `realname` varchar(90) DEFAULT NULL COMMENT '真实姓名;真实姓名',
  `user_img` varchar(1024) NOT NULL COMMENT '头像;头像',
  `user_mobile` varchar(255) DEFAULT NULL COMMENT '手机号;手机号',
  `user_email` varchar(255) DEFAULT NULL COMMENT '邮箱地址;邮箱地址',
  `user_sex` varchar(1) DEFAULT NULL COMMENT '性别;M(男) or F(女)',
  `user_birth` datetime DEFAULT NULL COMMENT '生日;生日',
  `user_regtime` datetime NOT NULL COMMENT '注册时间;创建时间',
  `user_modtime` datetime NOT NULL COMMENT '更新时间;更新时间',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='用户';

2、创建实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User { 
   

    private int userId;
    private String username;
    private String password;
    private String nickname;
    private String realname;
    private String userImg;
    private String userMobile;
    private String userEmail;
    private String userSex;
    private Date userBirth;
    private Date userRegtime;
    private Date userModtime;
}

3、创建DAO接口

tkMapper已经完成了对单表的通用操作的封装,封装在Mapper接口和MySqlMapper接口;因此如果我们要完成对单表的操作,只需自定义DAO接口继承Mapper接口和MySqlMapper接口。

public interface UserDao extends Mapper<User>, MySqlMapper<User> { 
   
}

4、测试

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TkmapperDemoApplication.class)
public class UserDaoTest { 
   

    @Autowired
    private UserDao userDao;

    @Test
    public void test(){ 
   
        User user = new User();
        user.setUsername("aaaa");
        user.setPassword("1111");
        user.setUserImg("img/default.png");
        user.setUserRegtime(new Date());
        user.setUserModtime(new Date());
        int i = userDao.insert(user);
        System.out.println(i);
    }

}

四、tkMapper提供的常用方法

@RunWith(SpringRunner.class)
@SpringBootTest(classes = TkmapperDemoApplication.class)
public class CategoryDAOTest { 
   
    @Autowired
    private CategoryDAO categoryDAO;

    @Test
    public void testInsert() { 
   
        Category category = new Category(0, "测试类别2", 1, 0, "0.2png", "haha", "aaa.jpg", "black");
        //int i = categoryDAO.insert(category);
        int i = categoryDAO.insertUseGeneratedKeys(category);
        System.out.println(category.getCategoryId());
        assertEquals(1, i);
    }


    @Test
    public void testUpdate() { 
   
        Category category = new Category(47, "测试类别3", 1, 0, "0.3png", "haha3", "aaa.jpg", "black");
        int i = categoryDAO.updateByPrimaryKey(category);
        //根据自定义条件修改,Example example就是封装条件的
        //categoryDAO.updateByExample(Example example);
        assertEquals(1, i);
    }


    @Test
    public void testDelete(){ 
   
        int i = categoryDAO.deleteByPrimaryKey(47);
        //根据条件删除
        //categoryDAO.deleteByExample(Example example);
        assertEquals(1,i);
    }


    @Test
    public void testSelect1(){ 
   
        //查询所有
        List<Category> categories = categoryDAO.selectAll();
        for(Category category : categories){ 
   
            System.out.println(category);
        }
    }


    @Test
    public void testSelect2(){ 
   
        //根据主键查询
        Category category = categoryDAO.selectByPrimaryKey(46);
        System.out.println(category);
    }


    @Test
    public void testSelect3(){ 
   
        //条件查询
        //1.创建一个Example封装 类别Category查询条件
        Example example = new Example(Category.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("categoryLevel",1);
        criteria.orLike("categoryName","%干%");

        List<Category> categories = categoryDAO.selectByExample(example);
        for (Category category : categories){ 
   
            System.out.println(category);
        }
    }


    @Test
    public void testSelect4(){ 
   
        //分页查询
        int pageNum = 2;
        int pageSize = 10;
        int start = (pageNum-1)*pageSize;

        RowBounds rowBounds = new RowBounds(start, pageSize);
        List<Category> categories = categoryDAO.selectByRowBounds(new Category(), rowBounds);
        for (Category category : categories){ 
   
            System.out.println(category);
        }

        //查询总记录数
        int i = categoryDAO.selectCount(new Category());
        System.out.println(i);
    }


    @Test
    public void testSelect5(){ 
   
        //带条件分页查询
        //条件
        Example example = new Example(Category.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("categoryLevel",1);
        //分页
        int pageNum = 2;
        int pageSize = 6;
        int start = (pageNum-1)*pageSize;
        RowBounds rowBounds = new RowBounds(start, pageSize);

        List<Category> categories = categoryDAO.selectByExampleAndRowBounds(example, rowBounds);
        for (Category category:categories){ 
   
            System.out.println(category);
        }

        //查询满足条件的总记录数
        int i = categoryDAO.selectCountByExample(example);
        System.out.println(i);

    }
}

五、如何使用tkMapper进行关联查询

所有的关联查询都可以通过多个单表操作实现

    @Test
    public void testSelect(){ 
   
        //查询用户的同时查询订单
        Example example = new Example(User.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("username","zhangsan");
        //根据用户名查询用户
        //1.先根据用户名查询用户信息
        List<User> users = userDao.selectByExample(example);
        User user = users.get(0);
        //2.再根据用户id到订单表查询订单
        Example example1 = new Example(Orders.class);
        Example.Criteria criteria1 = example1.createCriteria();
        criteria1.andEqualTo("userId",user.getUserId());
        List<Orders> ordersList = orderDAO.selectByExample(example1);
        //3.将查询到订单集合设置到user
        user.setOrdersList(ordersList);
        System.out.println(user);
    }

也可自定义连接查询,在DAO接口中自定义方法,创建Mapper文件

六、逆向工程

逆向工程,根据创建好的数据表,生成实体类、DAO、映射文件

1、添加逆向工程依赖

此依赖是一个mybatis的maven插件

            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>

                <dependencies>
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>5.1.47</version>
                    </dependency>
                    <dependency>
                        <groupId>tk.mybatis</groupId>
                        <artifactId>mapper</artifactId>
                        <version>3.4.4</version>
                    </dependency>
                </dependencies>
            </plugin>

2、逆向工程配置

  • 在resources/generator目录下创建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>

    <!--引入数据库连接配置-->


    <context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
        <property name="beginningDelimiter" value="`"/>
        <property name="endingDelimiter" value="`"/>
        <property name="javaFileEncoding" value="UTF-8"/>

        <!--配置 GeneralDAO-->
        <plugin type="tk.mybatis.mapper.generator.MapperPlugin">
            <property name="mappers" value="com.qfedu.tkmapperdemo.general.GeneralDAO"/>
        </plugin>

        <!--配置数据库连接-->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/fmmall"
                userId="root"
                password="mysql">
        </jdbcConnection>

        <!--配置实体类存放路径-->
        <javaModelGenerator targetPackage="com.qfedu.tkmapperdemo.beans" targetProject="src/main/java"/>

        <!--配置 XML 存放路径-->
        <sqlMapGenerator targetPackage="/" targetProject="src/main/resources/mappers"/>

        <!--配置 DAO 存放路径-->
        <javaClientGenerator targetPackage="com.qfedu.tkmapperdemo.dao" targetProject="src/main/java" type="XMLMAPPER"/>

        <table tableName="%">
            <!--mysql 配置-->
            <!--<generatedKey column="id" sqlStatement="Mysql" identity="true"/>-->
            <!--oracle 配置-->
            <!--<generatedKey column="id" sqlStatement="select SEQ_{1}.nextval from dual" identity="false" type="pre"/>-->
        </table>
    </context>
</generatorConfiguration>

3、将配置文件设置到逆向工程的maven插件

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/185003.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 因果推断学习笔记三——Uplift模型「建议收藏」

    因果推断学习笔记三——Uplift模型「建议收藏」一、Uplift模型因果推断在互联网界应用主要是基于Upliftmodel来预测额外收益提升ROI。Uplift模型帮助商家计算人群营销敏感度,驱动收益模拟预算和投放策略制定,促成营销推广效率的最大化。同时如何衡量和预测营销干预带来的“增量提升”,而不是把营销预算浪费在“本来就会转化”的那部分人身上,成为智能营销算法最重要的挑战。举个例子????:对用户A和用户B都投放广告,投放广告后用户A的CVR(转化量/点击量)为5%,用户B的CVR为4%,那么是否就给用户A投广告呢?仅从投放广告后的结果来看是这

    2025年5月23日
    4
  • 传感器尺寸对比图

    传感器尺寸对比图

    2022年6月14日
    80
  • (数据库)数据库分类

    (数据库)数据库分类1.面向操作的关系型数据库典型性应用领域:ERP,CRM,信用卡交易,中小型电商数据储存方法:表格流行厂商:OracleDatabase,MicrosoftSQLServer,IBMDB2,EnterpriseDB(PostgreSQL),MySQL优点:完善的生态环境保护,事务保证/数据一致性缺点:严苛的数据模型界定,数据库拓展限制,和非结构型的结合应用较难。2.面向数据分析的关系型数据库典型性应用领域:数据仓库,商务智能,数据科学研究数据储存方法:表格流行厂商:OracleE

    2022年6月24日
    34
  • GiD学习笔记「建议收藏」

    GiD学习笔记「建议收藏」GiD软件初步使用时,与一般传统的三维软件,思维方式很难一下子转变过来。它的最基本结构是几何结构,创建模型从点到线,线到面,面到体的顺序。网格面与几何体有截然不同的意义,所以在使用初期,需要先搞清楚一些基本概念。

    2025年6月8日
    2
  • void及void指针含义的深刻解析

    void及void指针含义的深刻解析

    2021年12月8日
    34
  • win10安装JDK1.8及配置java环境变量详解

    win10安装JDK1.8及配置java环境变量详解首先下载一个jdk,可以通过这个链接下载:https://pan.baidu.com/s/1aP6SdL8UQK_C2GvALLb6Wg接下来就是安装,非常的简单,如下图所示:双击下载的文件,出现该界面,点击下一步。安装路径我们选择默认的,当然,我们也可也修改安装路径,但一定要记得安装路径,这里我们选择默认的。点击下一步。这里我们还是默认的安装路径。点击下一步。到此,安装就完成了…

    2022年7月23日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号