Mybatis系列-tkmybatis源码分析-01-mybatis、mybatis-spring和tkmybatis的关系

mybatis、mybatis-spring和tkmybatis的关系

  • 定义

        MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

        MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

        Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作(相比于Mybatis-Spring默认操作更加丰富),不需要写任何 sql 语句,这极大地提高了项目开发效率。

        看了后面,再回过头来看定义就更清晰了。

 

  • jar包依赖关系

如图所示,

mapper-spring-boot-starter(tkmybatis基于springboot的依赖包)依赖于mybatis和mybatis-spring

Mybatis系列-tkmybatis源码分析-01-mybatis、mybatis-spring和tkmybatis的关系_第1张图片

 

mybatis-spring-boot-starter(mybatis-spring基于springboot的依赖包)依赖于mybatis和mybatis-spring

 

Mybatis系列-tkmybatis源码分析-01-mybatis、mybatis-spring和tkmybatis的关系_第2张图片

  • 使用方式

mybatis:从调用上来看,mybatis需要手动指定xml配置文件的位置,显示创建SqlSessionFactory,再根据SqlSessionFactory创建SqlSession,由SqlSession创建对应接口Mapper的代理类,然后执行SQL操作。从配置上来看,mybatis需要在xml配置文件中配置好数据源和mapper文件的路径。mapper接口的实现在对应名称的xml文件中。

调用部分示例代码:

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);


SqlSession sqlSession = factory.openSession();


UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);

List list = mapper.selectAll();

list.forEach(item -> {log.info(item.toString());} );


sqlSession.close();

xm配置部分代码:



        

            

            

            

            

                

                

                

                

            

        

    

    

        

        

        



    

 

mybatis-spring:从调用上来看,mybatis-spring不再需要手动指定xml配置文件的位置,也不需要显示创建SqlSessionFactory这些。通过MapperScan注解指定mapper接口的包路径,即可自动扫描出对应的mapper接口并创建相应的代理类,该类由spring进行管理。代理类可以通过autowire注入到需要调用的位置。从配置上来看,mybatis-spring也不再需要xml配置文件,在application.properties进行配置。mapper接口的实现在对应名称的xml文件中或者是在接口上直接添加SQL注释(比如@select)。

调用部分示例代码:

@SpringBootApplication

@MapperScan({"com.example.demotkmybatis.selfDefineMappers", "com.example.demonativemybatisgenerator.mapper"})

public class DemoMybatisSpringApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoMybatisSpringApplication.class, args);

    }

}

注入方式调用mapper:

@Service

public class UserService implements IUserService {

    @Autowired

    private UsersMapper usersMapper;



    @Override

    public List findAll() {

        return usersMapper.selectAll();

    }

}

 

配置:

# datasource配置

spring.datasource.driver_class_name=com.mysql.jdbc.Driver

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/foodie-shop?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8

spring.datasource.username=root

spring.datasource.password=123456



## mapper映射文件,配置xml位置接口,mapper类和pojo实体类的位置都可以通过xml文件找到,所以不用配置

mybatis.mapper-locations=classpath*:mapper/*.xml

## 所有POJO类所在包路径

mybatis.type-aliases-package=com.example.demonativemybatisgenerator.pojo

 

tk-mybatis:和mybatis-spring比较相似,都通过application.properties文件完成属性配置,通过mapperscan扫描mapper所在包创建代理类。区别在于,tk-mybatis中mapper接口的实现不再是位于对应的xml文件或者是在接口上添加SQL注释,每一个mapper接口都指定了一个Provider实现类来完成具体的SQL操作。所以可以看到tk-mybatis的mapper接口及对应的xml是没有具体内容的,每个pojo对象对应的mapper接口都继承制Mapper类(该类又继承了BaseMapper、ExampleMapper、RowBoundsMapper等接口),这些接口通过tk-mybatis自带的provider实现类提供了基本的增删查改、分页、条件查询等操作。相比于mybatis-spring,针对单表的操作更加丰富。由于底层基于mybatis和mybatis-spring,所以如果要自己扩展SQL的话,用xml或者是注解如@select的方式都可以。

调用部分示例代码:

@MapperScan("com.example.demotkmybatisgeneralsecond.mapper")

public class DemoTkmybatisApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoTkmybatisApplication.class, args);

    }

}

Mybatis系列-tkmybatis源码分析-01-mybatis、mybatis-spring和tkmybatis的关系_第3张图片

Mybatis系列-tkmybatis源码分析-01-mybatis、mybatis-spring和tkmybatis的关系_第4张图片

你可能感兴趣的:(Mybatis,spring,boot,tkMybatis,mybatis,mybatis-spring)