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-spring-boot-starter(mybatis-spring基于springboot的依赖包)依赖于mybatis和mybatis-spring

 

  • 使用方式

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<Users> list = mapper.selectAll();

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


sqlSession.close();

xm配置部分代码:

<environments default="development">

        <environment id="development">

            <!--使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交

            事务管理器完成以下工作:a、获得数据库连接 b、提交SQL c、事务回滚 d、关闭连接-->

            <transactionManager type="JDBC" />

            <!--数据源配置-->

            <dataSource type="UNPOOLED">

                <property name="driver" value="com.mysql.jdbc.Driver" />

                <property name="url" value="jdbc:mysql://127.0.0.1:3306/foodie-shop?useSSL=false&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=convertToNull&amp;serverTimezone=GMT%2B8" />

                <property name="username" value="root" />

                <property name="password" value="123456" />

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <!--通过mapper指定xml路径,mybatis根据该xml配置文件扫描mapper类,放到knownMappers里面,并且生成对应的mappedStatement

        所以,没有通过package指定mapper也没关系,mybatis可以通过xml解析出来mapper

        反之,只有package但是没有指定xml路径则是不行的,这样无法生成mappedStatement-->

        <mapper resource="mapper/ItemsCommentsMapper.xml"/>

        <!--package指定的是mapper类所在的包路径,mybatis会扫描路径下的mapper类,放到knownMappers里面去-->

<!--        <package name="com.example.demotkmybatisgenerator.mapper"/>-->

    </mappers>

 

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<Users> 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<T>类(该类又继承了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);

    }

}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值