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

Love The Way You Lie 2022-04-25 05:36 296阅读 0赞

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

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

为什么要用 Tk ??

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

Tk_MyBatis 和 JPA 的区别 ??

  1. 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

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2NTM3NTQ2_size_16_color_FFFFFF_t_70

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

  1. package com.cs.dao;
  2. import com.cs.common.BaseMapper;
  3. import com.cs.pojo.User;
  4. import org.apache.ibatis.annotations.Select;
  5. import java.util.List;
  6. /**
  7. * @param: User 实现类接口
  8. * @return: 这个地方因为我们用的 TK_MyBatis 除了特别复杂的 SQL 需要手写之外
  9. * 其余的基本都可以交给 TK_MyBatis 来解决
  10. * 后面会给大家来介绍 TK_MyBatis 的使用方式
  11. * 差点忘了。。这里我们继承的是 BaseMapper<T> 这是一个封装的泛型
  12. * @auther: linluochen
  13. * @date: 2019/4/1 11:43
  14. */
  15. public interface UserMapper extends BaseMapper<User> { // 泛型就写我们要查询的这个对象
  16. /**
  17. * @title: 例如查询多表联合查询
  18. * @auther: linluochen
  19. * @date: 2019/5/6 9:55
  20. */
  21. @Select("select * from xxx left join xxx on xx") // 这个地方仅限于查询哈
  22. List<User> selectUserList();
  23. }

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

  1. package com.cs.service;
  2. import com.cs.pojo.User;
  3. import java.util.List;
  4. /**
  5. * @param: UserService 逻辑层接口
  6. * @return: 就是写业务逻辑的地方......没啥可说的...
  7. * @auther: linluochen
  8. * @date: 2019/4/1 11:49
  9. */
  10. public interface UserService {
  11. /**
  12. * @param: 查询全部
  13. * @return: selectAll()
  14. * @auther: linluochen
  15. * @date: 2019/4/1 15:39
  16. */
  17. List<User> selectAll();
  18. /**
  19. * @title: 根据条件查询对象
  20. * @auther: linluochen
  21. * @date: 2019/5/6 11:18
  22. */
  23. User selectOne(Integer id);
  24. /**
  25. * @title: 根据条件查询集合
  26. * @auther: linluochen
  27. * @date: 2019/5/6 11:18
  28. */
  29. List<User> selectByExample(Integer id);
  30. /**
  31. * @param: 查询 User ID
  32. * @return: ID : User ID
  33. * 个人建议使用 Integer 来接收 values 减少报 bug 的概率
  34. * 个人理解:Integer 容纳 null 不会报错...提高容错率
  35. * @auther: linluochen
  36. * @date: 2019/4/1 11:51
  37. */
  38. User selectByPrimaryKey(Integer id);
  39. }

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

  1. package com.cs.service.impl;
  2. import com.alibaba.dubbo.config.annotation.Service;
  3. import com.cs.dao.UserMapper;
  4. import com.cs.pojo.User;
  5. import com.cs.service.UserService;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import tk.mybatis.mapper.entity.Example;
  8. import java.util.List;
  9. /**
  10. * @ClassName UserServiceImpl
  11. * @Param
  12. * @Author linluochen
  13. * @Date 2019/4/4 18:06
  14. * @Version 1.0
  15. **/
  16. //@Service(version = "${demo.service.version}") // 获取自定义版本号
  17. @Service // 声明这个是一个 Service
  18. public class UserServiceImpl implements UserService { // 实现我们的 UserService 定义的接口
  19. @Autowired
  20. UserMapper UserMapper; // 调用我们的 User
  21. @Override
  22. public List<User> selectAll() {
  23. return UserMapper.selectAll();
  24. }
  25. @Override
  26. public User selectOne(Integer id) {
  27. User user = new User();
  28. user.setId(id);
  29. return UserMapper.selectOne(user);
  30. }
  31. @Override
  32. public List<User> selectByExample(Integer id) {
  33. Example example = new Example(User.class);
  34. Example.Criteria criteria = example.createCriteria();
  35. if (id != null && id != 0){
  36. criteria.andEqualTo("id",id);
  37. }
  38. return UserMapper.selectByExample(example);
  39. }
  40. @Override
  41. public User selectByPrimaryKey(Integer id) {
  42. return UserMapper.selectByPrimaryKey(id);
  43. }
  44. }

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

发表评论

表情:
评论列表 (有 0 条评论,296人围观)

还没有评论,来说两句吧...

相关阅读