Mybatis框架复习随笔

只是回想时的头脑风暴,具体配置需要查看官方文档,以下仅随意整理自己的思路,如有缺错请谅解

1.Mybatis是半自动化的ORM对象关系映射框架,省去了传统JDBC工作中繁琐的输入参数,输出结果与JavaPOJO类的手动映射,仅需在配置文件中进行配置,底层框架会通过读取xml文件,反射自动进行映射,实现功能

2.Mybatis配置流程(结合原理捋思路)回顾

  配置文件中标签的使用导入约束文件,根据提示与标签语义进行配置,注意顺序

  1>主配置文件中的配置:

    <configuration>配置文件中的配置信息

      <type aliases> 映射文件中输入输出映射不适用全限定类名,而对包中类起别名,默认不包含路径的类名为别名

      <properties> 需要用到配置文件的配置(数据源jdbc四大信息的配置,使用${键名})

      <settings><setting> 具体设置,诸如(延迟加载/缓存设置等)

      <envirenment>工作环境

        而mybatis中的工作环境包括 : 进行数据库交互-->数据源的配置-->数据库连接四要素(可通过配置properties配置文件实现灵活的存取)

                              事务的管理

        除去主要的底层支持,就需要具体的sql语句,mapper的加载(将mapper.xml们加载到主配置文件,相关API只加载主配置文件即可)

        <mappers><mappers>其中可以单个进行<mapper>配置, 也可以使用属性package一次性配置(但需要配置文件与接口在同一个包中)

  2>mapper映射文件

    使用动态代理生成DAO接口的实现类时,mapper的namespace与接口的全限定类名一致,而具体statement的id与接口中的方法名一致

    OGNL  对象图导航语言

    输入映射-->sql语句中#{a}中参数a对应于Java传入的参数,会将传入的Java对象转换为只有一个整体而内部封装多个信息的对象或Map  

          对于实际POJO对象 #{}中a是属性名

          对于单个基本数据类型,#{}可任意取名字

          对于多个参数,默认将这多个参数封装成一个Map对象,默认key为它的排列顺序-->在接口方法参数中使用注解,map的key为参数名,#{}中是参数名

          遇到多参数-->多参数对应一个实体类-->使用该实体类封装

                多参数对应多个实体类-->参数少,简单-->多参数+注解实现

                          -->封装一个Map  -->创建VO类,将多参数设置为属性

        *类似于Map中key对应的value为对象,要取出对象对应的属性--->键.属性名-->#{}可进一步点.

    

    动态SQL mapper的sql语句中动态拼接sql

      <if test="...>0"> ...使用传入参数的属性名,具体属性的属性使用点

      where+if

      choose+when+otherwise

      for for适用于一个属性对于多个值in(,,,)的批量操作,for遍历数组 时用arrays,集合时使用list(直接的数组或集合以arrays,list为键值封装)

    输出映射

      反射生成输出对象,根据查询出的结果集字段,为其属性赋值

      简单实体类映射直接resultType="类名"

      实体类属性名与数据库字段不一致-->起别名

                     -->resultMap做输出结果集映射

    resultMap中关联查询

      --->关联查询,inner join合成一张表后映射

      --->独立查询,分开两次查询(可延迟加载)  --->第二个查询中输入参数由第一个查询查出来的某一字段提供

      一对多collection , 多对一(一对一) assocation

3.配合API的执行流程

  API操作配置文件以执行sql数据交互

  配置文件需要被API读取来进行一系列操作

  sql执行的核心为SqlSession,SqlSession的创建依赖于SqlSession工厂,而工厂的创建要读取到配置文件,解析xml,构造复杂所以采用建造者模式

  利用Resource将主配置文件读取成流传递给SqlSessionFactoryBuilder,建造者就拥有了配置文件中的信息Configuration,接着将这些信息传递给SqlSessionFactory

  openSession时创建Executor执行器(用于执行Sql语句的核心),Configuare,还有是否自动提交,默认为否

  

  动态代理的Mapper-->sqlSession.getMapper(Dao接口)

      根据接口名搜索到对应的namespace,根据对应的方法名搜索到对应的statement的id来实现拦截器,代理类等代理类的构建

       

原文地址:https://www.cnblogs.com/autism-dong/p/12158848.html

时间: 2024-10-13 02:51:12

Mybatis框架复习随笔的相关文章

Maven+Spring+SpringMVC+MyBatis框架搭建

看了一段时间Android,学了学C++,搭个SSM的框架复习复习老本行. 原来的SSH——Struts,spring,hibernate,逐渐被现在的SSM取代,当然了,还有各有优缺点的. 搭的这个框架中的SpringMVC并不是返回页面,而是返回json数据,在前端的js中处理页面的展现,我是为了让Android客户端能够访问SpringMVC的controller,并给Android客户端返回json数据考虑的. 一.还是一样的,要先看maven中都引入什么包: Java代码 复制代码 收

MyBatis - 系统化复习加强 (2020年4月11日始 持续更新)

目录 MyBatis - 系统化复习加强 (2020年4月11日始 持续更新) 1 简介 1.1 什么是MyBatis 1.2 持久层 1.3 为什么要用 MyBatis 1.4 如何获取 MyBatis 2 第一个MyBatis程序 2.1 搭建环境 2.2 创建Module 2.3 运行测试 2.4 常见BUG MapperRegistry问题 ★ Could not find resource .............UserMapper.xml Error creating docum

MyBatis框架中Mapper映射配置的使用及原理解析(七) MapperProxy,MapperProxyFactory

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(六) MapperRegistry> 中我们知道DefaultSqlSession的getMapper方法,最后是通过MapperRegistry对象获得Mapper实例: public <T> T getMapper(Class<T> type, SqlSession sqlSession) { final MapperProxyFactory<T> mapperProxyFactory =

MyBatis框架(一)

MyBatis介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动.创建connection.创建statement.手动设置参数.结果集检索等jdbc繁杂的过程代

MyBatis框架中Mapper映射配置的使用及原理解析(三) 配置篇 Configuration

从上文<MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder> 我们知道XMLConfigBuilder调用parse()方法解析Mybatis配置文件,生成Configuration对象. Configuration类主要是用来存储对Mybatis的配置文件及mapper文件解析后的数据,Configuration对象会贯穿整个Mybatis的执行流程,为Mybatis的执行过程提供必要的配

MyBatis框架中Mapper映射配置的使用及原理解析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder

在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sessionFactory = null; String resource = "mybatisConfig.xml"; try { sessionFactory = new SqlSessionFactoryBuilder().build(Resources .getResourceAsRea

MyBatis框架Maven资源

<!-- MyBatis框架 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!-- MySql数据库驱动 --> <dependency> <groupId>mysql&

mybatis框架搭建学习初步

mybatis框架搭建步骤:1. 拷贝jar到lib目录下,而且添加到工程中2. 创建mybatis-config.xml文件,配置数据库连接信息 <environments default="development"> <environment id="mysql"> <transactionManager type="JDBC"></transactionManager> <dataSou

MyBatis框架知识整理

MyBatis框架 一.介绍: MyBatis实际上是Ibatis3.0版本以后的持久化层框架[也就是和数据库打交道的框架]! 和数据库打交道的技术有: 原生的JDBC技术---> Spring的JdbcTemplate技术 这些工具都是提供简单的SQL语句的执行,但是和我们这里学的MyBatis框架还有些不同,框架是一整套的东西,例如事务控制,查询缓存,字段映射等等. 我们用原生JDBC操作数据库的时候都会经过: 编写sql---->预编译---->设置参数----->执行sql