tk.mybatis的使用说明

😂 这篇文章最后更新于1286天前,您需要注意相关的内容是否还可用。
目录导航
  • 依赖
  • 实体类与Mapper改造
  • 报错解决
  • tk.mybatis的使用用法说明

    依赖

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

            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>1.0</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper</artifactId>
                <version>3.4.2</version>
            </dependency>

    前者包含了mybatis一些依赖,若ssm项目搭建好了,用后者就行。

    实体类与Mapper改造

    若属性与数据库字段对应不上需要用@Column注解对于,表名不一样同理用@Table,一样的无需添加,主键上需加@Id注解。

    @Data
    @Table(name = "t_order")
    public class Order {
        /**
         * 
        CREATE TABLE orders(
            order_id INT PRIMARY KEY AUTO_INCREMENT,
            order_no VARCHAR(20), 
            price FLOAT
        );
         */
    
        //Order实体类中属性名和orders表中的字段名是不一样的
        @GeneratedValue(generator = "JDBC") // 自增的主键映射
        @Id
        @Column(name = "order_id")
        private int id;                //id===>order_id
        @Column(name = "order_no")
        private String orderNo;
        //若跟数据库字段一致可不写注解
        private Double price;
        }

    Mapper接口需继承tk的Mapper<T>

    import ssm.entity.Person;
    import tk.mybatis.mapper.common.Mapper;
    
    public interface PersonMapper extends Mapper<Person> {
    }

    xml可以内容为空,但最好加上结果集设置好与数据库字段对应关系(如果实体类属性与数据库字段不一致的话)

    <?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="ssm.dao.PersonMapper">
        <resultMap id="BaseResultMap" type="ssm.entity.Person">
            <id column="id" jdbcType="INTEGER" property="id" />
            <result column="name" jdbcType="VARCHAR" property="name" />
            <result column="description" jdbcType="VARCHAR" property="description" />
            <result column="creater" jdbcType="VARCHAR" property="creater" />
            <result column="create_time" jdbcType="DATE" property="createTime" />
            <result column="updater" jdbcType="VARCHAR" property="updater" />
            <result column="update_time" jdbcType="DATE" property="updateTime" />
        </resultMap>
    </mapper>

    报错解决

    报错:java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.base.BaseSelectProvider怎么办?

    这种情况是MapperScan包的问题,mybatis与tk.mybatis都有这个,在此我们导包请导tk的这个包。

    对于SpringBoot项目在Appliction启动类上使用MapperScan注解的,更改导包路径为。

    import tk.mybatis.spring.annotation.MapperScan;

    对于传统SSM项目,将mybatis的扫描配置器改成tk的即可

        <!-- DAO接口所在包名,Spring会自动查找其下的类 ,自动扫描了所有的XxxxMapper.xml对应的mapper接口文件,只要Mapper接口类和Mapper映射文件对应起来就可以了 -->
    <!--    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">-->
        <bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="ssm.dao" />
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
        </bean>