精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究
从所周知,数据库CRUD开发环境很复杂,像VS开发要配置数据源,还涉及到注册表和文件数据源,如果不用数据源,还要自己找连接字符串,写到代码里自己建立连接,对初学者不友好。mybatis,看它的字面意思my,bat,is,我的自动化信息系统,帮你自动化处理数据库相关的操作。
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。持久层很多初学者不理解,持久的目标是数据,数据可以理解为数据库操作中数据,数据进出程序不是暂时,是永久的,比如数据保存到数据库就保存上了,保存上了就是持久了。Mybatis支持3种情况,自定义SQL简单好理解,其它的存储过程和高级映射也在工作里经常用到。
MyBatis是帮助节省数据库开发难度,但是MyBatis是抽象的产物,对初学者来说,要理解不同层面的思想,MyBatis把工作分成了几块,对几块理解了就好实现MyBatis理解。
首先我们先来看一张MyBatis框架执行流程图
学习过数据库的小伙伴应该知道,操作某个数据库需要配置这个数据库的一些基本信息,比如用户、密码等,这样我们才能连接到这个数据库,进而对这个数据库进行操作。因此我们现在的首要任务就是配置我们的数据库,及我们流程中的第一步,下面是一个配置文件中的主要信息
可以看出该文件就是对我们的数据库信息进行了配置,同时还配置了映射文件的位置,当我们的程序去读取配置文件得时候,根据这个位置就可以去加载我们的映射文件
如上图,配置文件配置好了我们数据库的信息,使得我们能够找到数据库,找到数据之后干嘛,当然是操作数据库,而映射文件就是帮助我们做这样一个事情。<mapper>元素是映射文件的根元素,它包含一个namespace属性,该属性为这个<mapper>指定了唯一的命名空间,通常会设置成“包名+SQL映射文件名”的形式。子元素<select>中的信息是用于执行查询操作的配置,其id属性是<select>元素在映射文件中的唯一标识;parameterType属性用于指定传入参数的类型,这里表示传递给执行SQL的是一个Integer类型的参数;resultType属性用于指定返回结果的类型,这里表示返回的数据是Customer类型。在定义的查询SQL语句中,“#{}”用于表示一个占位符,相当于“? ”,而“#{id}”表示该占位符待接收参数的名称为id。
有了上面的两个文件感觉好像已经完工了,即能找到数据库了,又能操作数据库了,这不就完事了。但是配置文件是写好了,谁来执行文件呢,总不能让这两个配置文件自己跑吧。这就是我们接下来步骤的工作,如下是我们的一段测试代码
首先根据我们的配置文件来构建会话工厂,然后用会话工厂来创建我们的回话对象,然后回话对象就可以执行我们映射文件中定义的SQL,这样就得到了查询的结果。
这样我们对数据库的操作应该就结束了,但是上面的执行流程好像还没完,后续操作其实都是一些底层操作。
MyBatis底层定义了一个Executor接口来操作数据库,它会根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
在Executor接口的执行方法中,包含一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等。Mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是MappedStatement的id。
输入参数映射。在执行方法时,MappedStatement对象会对用户执行SQL语句的输入参数进行定义(可以定义为Map、List类型、基本类型和POJO类型),Executor执行器会通过MappedStatement对象在执行SQL前,将输入的Java对象映射到SQL语句中。这里对输入参数的映射过程就类似于JDBC编程中对preparedStatement对象设置参数的过程。
输出结果映射。在数据库中执行完SQL语句后,MappedStatement对象会对SQL执行输出的结果进行定义(可以定义为Map和List类型、基本类型、POJO类型), Executor执行器会通过MappedStatement对象在执行SQL语句后,将输出结果映射至Java对象中。这种将输出结果映射到Java对象的过程就类似于JDBC编程中对结果的解析处理过程。
mybatis是框架,用mybatis处理数据库CRUD比自己写要更安全,所以建议大家认真学习。
锐英源mybatis生成代码详解研究内容。