mybatis取list第⼀个_MyBatis基础搭建及架构概述
MyBatis 是什么?
MyBatis是第⼀个⽀持⾃定义SQL、存储过程和⾼级映射的类持久框架。MyBatis消除了⼤部分JDBC的样板代码、⼿动设置参数以及检索
结果。MyBatis能够⽀持简单的XML和注解配置规则。使Map接⼝和POJO类映射到数据库字段和记录。
下⾯我们通过⼀个简单的项⽬搭建来带你认识⼀下MyBatis的使⽤和⼀些核⼼组件的讲解。
MyBatis 项⽬构建
为了快速构建⼀个MyBatis项⽬,我们采⽤SpringBoot快速搭建的⽅式。搭建好后在对应的l下添加如下的maven依赖,主要作⽤
在于引⼊mybatis⼀些jar包和类库
主要分为四个步骤:
快速构建项⽬,引⼊核⼼maven dependency依赖
bs和mvc的区别
构建POJO类和接⼝式编程的 Mapper类,编写SQL语句
cp命令怎么用
编写config.properties数据库驱动等配置
构建Mybatis核⼼配置⽂件即l,引⼊数据库驱动,映射Mapper类
编写Junit单元测试类
为了便于更好的说明⽂章的主旨,这⾥就不贴出全部代码了,会贴出核⼼代码部分
编写对应的POJO类和接⼝式编程Mapper类,这⾥我们以部门业务逻辑为例,构建⼀个部门类,有三个属性即部门编号、部门名称、位
置,下⾯是部分代码:
Dept.batis.beans;public class Dept {  private Integer deptNo; private String dname; private String loc;  public Dept() {} public Dept(Inte
MyBatis最核⼼的功能之⼀就是接⼝式编程,它可以让我们编写Mapper接⼝和XML⽂件,从⽽把参数
和返回结果映射到对应的字段中。DeptDao.batis.dao;public interface DeptDao { // 通过部门名称查询 public Dept findByDname(String Dname); // 通过部门编号查询 public Dept
上述的 就是映射到Mapper接⼝类的命名空间 标签⽤于编写查询语句,查询完成之后需要把结果映射到对象或者map集合等,需要⽤到resultType属性指定对应的结果集。上述采⽤了和的标签写法,为了⽅便的映射到实体类,需要修改的话统⼀修改即可,降低耦合性。
构建完成基础的SQL语句和映射之后,下⾯来构建MySQL数据库驱动,在/resources 下创建config.properties类
jdbc.sql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/testjdbc.username=rootjdbc.password=123456
在/resources 下编写MyBatis核⼼配置⽂件l,引⼊数据库驱动,映射Mapper类
configuration 标签很像是Spring 中的 beans 标签或者是基于注解的配置@Configuration,也就是MyBatis的核⼼配置环境,使⽤
properties 标签引⼊外部属性环境,也就是数据库驱动配置,使⽤ mappers 映射到Mapper所在的包,这⾥指的就是DeptDao.java所在
的包。
在test包下⾯新建⼀个Junit单元测试类,主要流程如下:
MyBatisTest.java 代码如下:
public class MyBatisTest { private SqlSession sqlSession; /** * 读取配置⽂件,创建SQL⼯⼚,打开会话 * @throws Exception */ @Before public void start() throws E
@Before 和 @After 是junit⼯具包中的类,@Before在执⾏@Test 测试其主要业务之前加载,@After 在执⾏@Test 测试完成之后加
载。
整体结构如下:
MyBatis 整体架构
MyBatis的架构⼤概是这样的,最上⾯是接⼝层,接⼝层就是开发⼈员在Mapper或者是Dao接⼝中的接⼝定义,是查询、新增、更新还是
删除操作;中间层是数据处理层,主要是配置Mapper -> xml层级之间的参数映射,SQL解析,SQL执⾏,结果映射的过程。上述两种流程
都由基础⽀持层来提供功能⽀撑,基础⽀持层包括连接管理,事务管理,配置加载,缓存处理。
接⼝层
在不与Spring 集成的情况下,使⽤MyBatis执⾏数据库的操作主要如下:
InputStream is = ResourceAsStream("l");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionF
其中的SqlSessionFactory,SqlSession是MyBatis接⼝的核⼼类,尤其是SqlSession,这个接⼝是MyBatis中最重要的接⼝,这个接⼝能
够让你执⾏命令,获取映射,管理事务。
数据处理层
配置解析
在Mybatis初始化过程中,会加载l配置⽂件、映射配置⽂件以及Mapper接⼝中的注解信息,解析后的配置信息会形成相应的对象并保存到Configration对象中。之后,根据该对象创建SqlSessionFactory对象。待Mybatis初始化完成后,可以通过SqlSessionFactory创建SqlSession对象并开始数据库操作。
SQL解析与scripting模块
Mybatis实现的动态SQL语句,⼏乎可以编写出所有满⾜需要的SQL。
Mybatis中scripting模块会根据⽤户传⼊的参数,解析映射⽂件中定义的动态SQL节点,形成数据库能执⾏的sql语句。
SQL执⾏
SQL语句的执⾏涉及多个组件,包括MyBatis的四⼤神器,它们是: Executor、StatementHandler、ParameterHandler、ResultSetHandler。SQL的执⾏过程可以
⽤下⾯这幅图来表⽰
c语言getstring函数的用法MyBatis层级结构各个组件的介绍(这⾥只是简单介绍,具体介绍在后⾯):
SqlSession: MyBatis核⼼API,主要⽤来执⾏命令,获取映射,管理事务。接收开发⼈员提供Statement Id 和参数.并返回操作结果
mysql语句的执行顺序Executor: 执⾏器,是MyBatis调度的核⼼,负责SQL语句的⽣成以及查询缓存的维护
StatementHandler: 封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
ParameterHandler: 负责对⽤户传递的参数转换成JDBC Statement 所需要的参数
ResultSetHandler: 负责将JDBC返回的ResultSet结果集对象转换成List类型的集合
TypeHandler: ⽤于Java类型和jdbc类型之间的转换
MappedStatement: 动态SQL的封装
SqlSource: 表⽰从XML⽂件或注释读取的映射语句的内容,它创建将从⽤户接收的输⼊参数传递给数据库的SQL。
Configuration: MyBatis所有的配置信息都维持在Configuration对象之中
基础⽀持层
该层保护mybatis的基础模块,它们为核⼼处理层提供了良好的⽀撑。
(1)反射模块
Mybatis中的反射模块,对Java原⽣的反射进⾏了很好的封装,提供了简易的API,⽅便上层调⽤,并且对反射操作进⾏了⼀系列的优化,⽐如,缓存了类的元数据(MetaClass)和对象的元数据(MetaObject),提⾼了反射操作的性能。
(2)类型转换模块
Mybatis的别名机制,是为了简化配置⽂件的,该机制是类型转换模块的主要功能之⼀。类型转换模块的另⼀个功能是实现JDBC类型与Java类型间的转换。该功能在SQL语句绑定实参和映射查询结果集时都会涉及。在SQL语句绑定实参时,会将数据有Java类型转换成JDBC类型;在映射结果集时,会将数据有JDBC类型转换成Java类型。
(3)⽇志模块
Java世界⾥,有很多优秀的⽇志框架,如Log4j、Log4j2、slf4j等。Mybatis除了提供了详细的⽇志输出信息,还能够集成多种⽇志框架,其⽇志模块的主要功能就是集成第三⽅⽇志框架。
(4)资源加载模块
该模块主要封装了类加载器,确定了类加载器的使⽤顺序,并提供了加载类⽂件和其它资源⽂件的功能。
(5) 解析器模块
该模块有两个主要功能:⼀个是封装了XPath,为Mybatis初始化时解析l配置⽂件以及映射配置⽂件提供⽀持;另⼀个为处理动态SQL语句中的占位符提供⽀持。
(6)数据源模块
在数据源模块中,Mybatis⾃⾝提供了相应的数据源实现,也提供了与第三⽅数据源集成的接⼝。数据源是开发中的常⽤组件之⼀,很多开源的数据源都提供了丰富的功能,如,连接池、检测连接状态等,选择性能优秀的数据源组件,对于提供ORM框架以及整个应⽤的性能都是⾮常重要的。
(7)事务管理模块
二进制转字符串在线
round函数取整规则⼀般地,Mybatis与Spring框架集成,由Spring框架管理事务。但Mybatis⾃⾝对数据库事务进⾏了抽象,提供了相应的事务接⼝和简单实现。
(8)缓存模块
Mybatis中有⼀级缓存和⼆级缓存,这两级缓存都依赖于缓存模块中的实现。但是,需要注意,这两级缓存与Mybatis以及整个应⽤是运⾏在同⼀个JVM中的,共享同⼀块内存,如果这两级缓存中的数据量较⼤,则可能影响系统中其它功能,所以需要缓存⼤量数据时,优先考虑使⽤Redis、Memcache等缓存产品。
(9)Binding模块
在调⽤SqlSession相应⽅法执⾏数据库操作时,需要制定映射⽂件中定义的SQL节点,如果sql中出现了拼写错误,那就只能在运⾏时才能发现。为了能尽早发现这种错误,Mybatis通过Binding模块将⽤户⾃定义的Mapper接⼝与映射⽂件关联起来,系统可以通过调⽤⾃定义Mapper接⼝中的⽅法执⾏相应的SQL语句完成数据库操作,从⽽避免上述问题。注意,在开发中,我们只是创建了Mapper接⼝,⽽并没有编写实现类,这是因为Mybatis⾃动为Mapper接⼝创建了动态代理对象。有时,⾃定义的Mapper接⼝可以完全代替映射配置⽂件,但⽐如动态SQL语句啊等,还是写在映射配置⽂件中更好。
免费分享Java系列教程,需要的朋友可以私信我免费领取

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。