博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis原理
阅读量:3915 次
发布时间:2019-05-23

本文共 2331 字,大约阅读时间需要 7 分钟。

MyBatis 支持定制化 SQL、存储过程及高级映射的优秀的持久层框架,其主要就是1.封装JDBC操作2.利用反射打通Java类与SQL语句之间的相互转换3.Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。MyBatis的主要成员Configuration MyBatis所有的配置信息都保存在Configuration对象之中配置文件中的大部分配置都会存储到该类中SqlSession 作为MyBatis工作的主要顶层API,表示和数据库交互时的会话完成必要数据库增删改查功能Executor MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护StatementHandler 封装了JDBC Statement操作,负责对JDBC statement 的操作如设置参数等ParameterHandler 负责对用户传递的参数转换成JDBC Statement 所对应的数据类型ResultSetHandler 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合TypeHandler 负责java数据类型和jdbc数据类型(也可以说是数据表列类型)之间的映射和转换MappedStatement MappedStatement维护一条
节点的封装SqlSource 负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中并返回BoundSql 表示动态生成的SQL语句以及相应的参数信息以上主要成员在一次数据库操作中基本都会涉及,在SQL操作中重点需要关注的是SQL参数什么时候被设置和结果集怎么转换为JavaBean对象的这两个过程正好对应StatementHandler和ResultSetHandler类中的处理逻辑。
jdbc编程步骤:1、加载数据库驱动2、创建并获取数据库链接3、创建jdbc statement对象4、设置sql语句5、设置sql语句中的参数(使用preparedStatement)6、通过statement执行sql并获取结果7、对sql执行结果进行解析处理8、释放资源(resultSet、preparedstatement、connection)
mybatis与hibernate不同Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

SqlSession的使用范围SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。SqlSession通过SqlSessionFactory创建。SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。SqlSessionFactoryBuilderSqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory创建的。所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。SqlSessionFactorySqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。SqlSessionSqlSession是一个面向用户的接口,sqlSession中定义了数据库操作方法。每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

 

转载地址:http://oiirn.baihongyu.com/

你可能感兴趣的文章
.NET 5 中的隐藏特性
查看>>
客户的一个紧急bug,我用了两种方式进行 C# 反编译修改源码
查看>>
.NET5都来了,你还不知道怎么部署到linux?最全部署方案,总有一款适合你
查看>>
我画着图,FluentAPI 她自己就生成了
查看>>
BenchmarkDotNet v0.12x新增功能
查看>>
使用 .NET 5 体验大数据和机器学习
查看>>
C# 中的数字分隔符 _
查看>>
持续交付一:从开发到上线的环境
查看>>
使用 docker 构建分布式调用链跟踪框架skywalking
查看>>
深度探秘.NET 5.0
查看>>
Github Actions 中 Service Container 的使用
查看>>
天际数见数据质量巡检架构优化
查看>>
别在.NET死忠粉面前黑.NET5,它未来可期!
查看>>
Winform 进度条弹窗和任务控制
查看>>
部署Dotnet Core应用到Kubernetes(二)
查看>>
持续交付二:为什么需要多个环境
查看>>
简单理解线程同步上下文
查看>>
购票啦 | 2020中国.NET开发者峰会启动
查看>>
FreeSql接入CAP的实践
查看>>
浅析 EF Core 5 中的 DbContextFactory
查看>>