MyBatis框架 基本配置及运行原理

MyBatis(半自动,轻量级)简介

原名iBatis,2013年迁移到gitHub,sql与Java编码分离,sql是开发人员控制
PS:对于JDBC,sql夹杂在java代码块中,耦合度高导致编码硬伤,维护不易。频繁修改
对于Hibernate:
①长难复杂sql处理不易,
②自动生产sql,不宜优化,
③基于全映射,大量字段部分映射较困难,导致数据库性能下降

MyBatis简单使用

1)、导入jar包

2)、在src下新建全局配置文件(XML文件,编写JDBC变量)
文件名:mybatis.xml
验证:此xml文件使用DTD进行验证

<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">

3)、新建以mapper结尾的包,在包下新建:实体类名+Mapper.xml(主要编写)
文件作用:编写需要执行的SQL语句,相当于实现类

4)、测试结果(只有在单独使用mybatis时使用)
流程:

  //获取配置文件输入流
  InputStream iStream = Resources.getResourceAsStream("mybatis.xml");
  //工厂设计模式接收对象
  SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(iStream);
  //生产SqlSession对象
  SqlSession sSession = factory.openSession();
  //进行增删改查
  //和mapper.xml中定义的元素相对应进行操作
  如:List<Goods> list = sSession.selectList("com.mfqh.virtual.selGoods(虚拟包.id)");
  //关闭SqlSession对象
  sSession.close();

PS:使用到了ORM,在获取到数据库数据后通过反射建立对象并通过set方法赋值,在3.2之后,反射可直接给属性强制赋值。

SqlSession的三种查询方式

1)、selectList()
返回值为List类型,适用于查询结果都要遍历的需求
2)、selectOne()
返回值为Object,适用于返回一个变量或一行数据
3)、selectMap()
返回值为Map<key,resultType>,适用于需求需要在结果中通过某个值快速取到

MyBatis运行原理

1)、涉及到的类
①Resources Mybatis中IO流工具类,加载配置文件
②SqlSesssionFactoryBuilder() 构建器,创建SqlSessionFactory接口实现类
③XMLConfigBuilder 全局配置文件内容构建器类,从流中提取配置信息解析为JAVA代码
④Configuration 配置信息类,封装全局配置的所有信息
⑤DefaultSqlSessionFactory sqlSessionFactory接口实现类
⑥Transaction 事务类,每一个SqlSession都带有一个事务对象
⑦TransactionFactory 事务工厂,负责生产Transaction对象
⑧Executor MyBatis执行器,负责执行SQL命令,相当于Statement(PreparedStatement、CallableStatement)对象
默认执行器为SimpleExcutor,批量操作为BatchExcutor(通过 openSession控制)
⑨DeafultSqlSession SqlSession实现类
⑩ExceptionFactory 错误工厂

2)、流程
①先由Resources将核心配置文件MyBatis.xml加载到流中;②SqlSesssionFactoryBuilder() 构建器会调用XMLConfigBuilder来解析流中的配置信息,并将信息存储至Configuration类中,接着建立DefaultSqlSessionFactory的对象;
③在工厂对象建立SqlSession之时,先会通过TransactionFactory产生一个Transaction对象,并且通过配置信息选择一个执行器,然后就可建立一个SqlSession对象;
④通过SqlSession进行sql操作,每个SqlSession对象相当于一个事务,可以提交或者回滚;
⑤最后关闭SqlSession对象

发布了82 篇原创文章 · 获赞 1 · 访问量 1462

猜你喜欢

转载自blog.csdn.net/qq_41891805/article/details/104967243