Mybatis是什么以及Mybatis和JDBC的关系?

Mybatis是什么以及Mybatis和JDBC的关系?,第1张

Mybatis是什么

mybatis是一个持久层ORM框架。它内部封装了jdbc,使得开发更简洁,更高效。

MyBatis可以通过xml或注解完成ORM映射关系配置。

Mybatis和JDBC的关系

JDBC是Java提供的一个 *** 作数据库的API; MyBatis是一个持久层ORM框架,底层是对JDBC的封装。

MyBatis对JDBC *** 作数据库做了一系列的优化:

(1) mybatis使用已有的连接池管理,避免浪费资源,提高程序可靠性。

(2) mybatis提供插件自动生成DAO层代码,提高编码效率和准确性。

(3)mybatis 提供了一级和二级缓存,提高了程序性能。

(4) mybatis使用动态SQL语句,提高了SQL维护。(此优势是基于XML配置)

(5) mybatis对数据库 *** 作结果进行自动映射

MyBatis的优点和缺点

优点:

简单:易于学习,易于使用,通过文档和源代du码,可以比较完全zhi的掌握它的设计思路和实现。

实用:提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。

灵活:通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

功能完整:提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提供了DAO支持,并在DAO框架中封装了ADO.NET,NHibernate和DataMapper。

增强系统的可维护性:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

缺点:

sql工作量很大,尤其是字段多、关联表多时,更是如此。

sql依赖于数据库,导致数据库移植性差。

由于xml里标签id必须唯一,导致DAO中方法不支持方法重载。

字段映射标签和对象关系映射标签仅仅是对映射关系的描述,具体实现仍然依赖于sql。(比如配置了一对多Collection标签,如果sql里没有join子表或查询子表的话,查询后返回的对象是不具备对象关系的,即Collection的对象为null)。

DAO层过于简单,对象组装的工作量较大。

不支持级联更新、级联删除。

编写动态sql时,不方便调试,尤其逻辑复杂时。

提供的写动态sql的xml标签功能简单(连struts都比不上),编写动态sql仍然受限,且可读性低。使用不当,容易导致N+1的sql性能问题。

同一个项目有时会涉及到多个数据库,这时我们就要配置多个数据源。配置多数据源的常见情况有以下两种:

1)同一个项目中涉及两个或多个业务数据库,它们之间相互独立,这种情况也可以作为两个或多个项目来开发

2)两个或多个数据库之间是主从关系,主库负责写,从库负责读

1、pom.xml配置

在pom.xml中增加MyBatis-Plus多数据源依赖:

2、配置文件配置

在配置文件application.yml中配置我们需要连接的数据库:blog和user,默认为blog

3、启动类配置

在@SpringBootApplication注解上增加exclude = DruidDataSourceAutoConfigure.class配置:

这个配置的作用是去掉对DruidDataSourceAutoConfigure的自动配置,否则程序会报错:

原因:

DruidDataSourceAutoConfigure在DynamicDataSourceAutoConfiguration之前,其会注入一个DataSourceWrapper,会在原生的spring.datasource下找url, username, password等,而我们动态数据源的配置路径是变化的。

4、实体类和dao层配置

在po文件夹下创建blog和user文件夹,分别用于存储blog数据库和user数据库的实体:

注解:

@TableName: 表名注解,标识实体类对应的表

@TableId: 主键注解,当type = IdType.AUTO时,表示这个主键是自增主键

在dao文件夹下创建blog和user文件夹,分别用于存储blog和user的dao:

注解:

@Repository: 将数据访问层(DAO层)的类标识为Spring Bean

@DS: 配置非默认数据源,本示例中blog为默认数据源,user为非默认数据源,在使用@DS注解时,有如下注意事项:

1)不能使用事务,否则数据源不会切换,使用的还是第一次加载的数据源

2)第一次加载数据源之后,第二次,第三次…… *** 作其他数据源,如果数据源不存在,使用的还是第一次加载的数据源

3)数据源名称不要包含下划线,否则不能切换

5、测试验证

编写ArticleController和UserInfoController:

注 : 业务逻辑复杂时,Controller和Mapper中间会有Service层来处理业务逻辑,现在我们就简单的测试一下多数据源,所以直接使用Controller调用Mapper了

1、配置分页插件

2、分页方法

1)使用MyBatis-Plus的selectPage方法

使用MyBatis-Plus的selectPage方法,返回了IPage,示例:

2)sql分页

有时候有些分页需要关联多张表,使用LambdaQueryWrapper不太方便,这时候可以自己写sql来实现分页,主要有两种:纯sql自己实现分页和使用IPage实现分页

注 : 这里的sql示例就使用单表查询了,具体的可根据业务场景使用多表查询

A、纯sql自己实现分页

分页的数据list和总条数单独调用方法返回 :

B、使用IPage实现分页(常用)

返回IPage,返回值的数据结构见“ 1)使用MyBatis-Plus的selectPage方法

本文简单介绍了一下MyBatis-Plus的多数据源和分页,本文示例代码, 详见https://gitee.com/tunan222/spring-boot-demo

若您觉得还可以,请帮忙点个 “赞” ,谢谢


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10008116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存