Tk_Batis 介绍和用法以及和Jpa 的区别

什么是 Tk_Batis ??(以下介绍仅代表个人看法

     Tk_Batis 是在 MyBatis 框架的基础上提供了很多工具,个人感觉就相当于一个通用的 Mapper 仅限单一实体类操作

为什么要用 Tk ??

     说实话,刚开始用 Tk 的时候我也吐槽过。。为啥要用 Tk 然后怎么怎么麻烦怎么怎么样的。。但是后来我发现,这个真的很提升效率问题,首先,如果你每个实体类都写一遍基础的增删改查操作,就算是你 1 分钟写完。。那三个就是 3 分钟,而使用 Tk 的话,你只需要在 Mapper 继承一下 Tk 就可以直接调用它里边的方法,仅限单表操作,enmmm。。搞的我跟推销似的。。用过JPA的朋友应该很容易上手这个东西,他实体类的方法,其实就是用的 Jap 的注解

Tk_MyBatis 和 JPA 的区别 ??

     JPA 是对象与对象之间的映射而 Tk_MyBatis 是对象与结果集的映射,可以把这两者的理解为 Hibernate 和 MyBatis 之间的区别,JPA 默认使用 Hibernate 作为 orm 实现,所以一般使用 Spring Data JPA 即会使用 Hibernate ,从框架角度来讲,其实这个的差距还是蛮大的因为 Hibernate 是全自动化框架,用的是面向对象的方式,操作关系型数据库的数据,而 MyBatis 是半自动化框架,他是一个能够灵活编写sql语句,并将sql的入参和查询结果映射成POJO,灵活性来说还是感觉选择 MyBatis 为好。。感觉跑偏了呢。。

官方详解建议查看:https://gitee.com/taska/Mapper2

其实呢 Tk_Batis 集成了很多的方法包括单表多条件查询,多条件修改等,说一下他的用法,这里我们自己封装了一个公用的 BaseMapper 然后继承 Tk_Batis 

Tk_Batis 介绍和用法以及和Jpa 的区别_第1张图片

首先是 Mapper 这个地方我们直接继承我们定义的 BaseMapper ,因为一般用不到我们的这个 Mapper 所以没写东西,但是考虑到,你们有多表操作。。还是写上吧。。这个地方写上仅限于示范多表操作,后边并没有用到

package com.cs.dao;

import com.cs.common.BaseMapper;
import com.cs.pojo.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @param: User 实现类接口
 * @return: 这个地方因为我们用的 TK_MyBatis 除了特别复杂的 SQL 需要手写之外
 *          其余的基本都可以交给 TK_MyBatis 来解决
 *          后面会给大家来介绍 TK_MyBatis 的使用方式
 *          差点忘了。。这里我们继承的是 BaseMapper 这是一个封装的泛型
 * @auther: linluochen
 * @date: 2019/4/1 11:43
 */
public interface UserMapper extends BaseMapper { // 泛型就写我们要查询的这个对象

    /**
     * @title: 例如查询多表联合查询
     * @auther: linluochen
     * @date: 2019/5/6 9:55
     */
    @Select("select * from xxx left join xxx on xx") // 这个地方仅限于查询哈
    List selectUserList();

}

这里的 Service 层还是照常写就 Ok 

package com.cs.service;

import com.cs.pojo.User;

import java.util.List;

/**
 * @param: UserService 逻辑层接口
 * @return: 就是写业务逻辑的地方......没啥可说的...
 * @auther: linluochen
 * @date: 2019/4/1 11:49
 */
public interface UserService {

    /**
     * @param: 查询全部
     * @return: selectAll()
     * @auther: linluochen
     * @date: 2019/4/1 15:39
     */
    List selectAll();

    /**
     * @title: 根据条件查询对象
     * @auther: linluochen
     * @date: 2019/5/6 11:18
     */
    User selectOne(Integer id);

    /**
     * @title: 根据条件查询集合
     * @auther: linluochen
     * @date: 2019/5/6 11:18
     */
    List selectByExample(Integer id);

    /**
     * @param: 查询 User ID
     * @return: ID : User ID
     *          个人建议使用 Integer 来接收 values 减少报 bug 的概率
     *          个人理解:Integer 容纳 null 不会报错...提高容错率
     * @auther: linluochen
     * @date: 2019/4/1 11:51
     */
    User selectByPrimaryKey(Integer id);

}

重点还是我们的业务实现层 ServiceImpl,详细用法可以查看 https://github.com/abel533/Mapper/wiki/6.example 

package com.cs.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.cs.dao.UserMapper;
import com.cs.pojo.User;
import com.cs.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import tk.mybatis.mapper.entity.Example;

import java.util.List;

/**
 * @ClassName UserServiceImpl
 * @Param
 * @Author linluochen
 * @Date 2019/4/4 18:06
 * @Version 1.0
 **/
//@Service(version = "${demo.service.version}") // 获取自定义版本号
@Service // 声明这个是一个 Service
public class UserServiceImpl implements UserService { // 实现我们的 UserService 定义的接口

    @Autowired
    UserMapper UserMapper; // 调用我们的 User

    @Override
    public List selectAll() {
        return UserMapper.selectAll();
    }

    @Override
    public User selectOne(Integer id) {
        User user = new User();
        user.setId(id);
        return UserMapper.selectOne(user);
    }

    @Override
    public List selectByExample(Integer id) {
        Example example = new Example(User.class);
        Example.Criteria criteria = example.createCriteria();
        if (id != null && id != 0){
            criteria.andEqualTo("id",id);
        }
        return UserMapper.selectByExample(example);
    }

    @Override
    public User selectByPrimaryKey(Integer id) {
        return UserMapper.selectByPrimaryKey(id);
    }
}

然后就是该咋调用就咋调用,只是实现层的写法不同

 

你可能感兴趣的:(Tk_Batis 介绍和用法以及和Jpa 的区别)