记录一下MyBatis的几个模块大纲,除去缓存以及集合映射两个部分

Mybatis架构



1、 mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

2、 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

3、 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

4、 mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

5、 Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

6、 Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

7、 Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。


  1. 输入映射(就是映射文件中可以传入哪些参数类型)

    1)基本类型

    2)pojo类型

    3)Vo类型

    1. 输出映射(返回的结果集可以有哪些类型)

      1)基本类型

      2)pojo类型

      3)List类型
    2. 动态sql:动态的拼接sql语句,因为sql中where条件有可能多也有可能少

      1)where:可以自动添加where关键字,还可以去掉第一个条件的and关键字

      2)if:判断传入的参数是否为空

      3)foreach:循环遍历传入的集合参数

      4)sql:封装查询条件,以达到重用的目的

    3. 对单个对象的映射关系:

      1)自动关联(偷懒的办法):可以自定义一个大而全的pojo类,然后自动映射其实是根据数据库总的字段名称和

      pojo中的属性名称对应.

      2)手动关联: 需要指定数据库中表的字段名称和java的pojo类中的属性名称的对应关系.

      使用association标签

    4. 对集合对象的映射关系

      只能使用手动映射:指定表中字段名称和pojo中属性名称的对应关系

      使用collection标签
    5. spring和mybatis整合

      整合后会话工厂都归spring管理

      1)原生Dao实现:

      需要在spring配置文件中指定dao实现类

      dao实现类需要继承SqlSessionDaoSupport超类

      在dao实现类中不要手动关闭会话,不要自己提交事务.

      2)Mapper接口代理实现:

      在spring配置文件中可以使用包扫描的方式,一次性的将所有mapper加载

    6. 逆向工程:自动生成Pojo类,还可以自动生成Mapper接口和映射文件

      注意:生成的方式是追加而不是覆盖,所以不可以重复生成,重复生成的文件有问题.

      如果想重复生成将原来生成的文件删除


一般写的时候三步走:

(1)XXXmapper.xml中配sql语句,也就是映射关系

(2)写XXXmapper接口,注意里面的四个小点和同名xml中要一致

(3)在测试类中获取会话工厂,然后通过会话工程获取mapper代理对象

(4)代理对象就可以调用接口中的方法,并返回值结果集了

tips1

占位符#{} 拼接符${}

动态sql中where标签自动去除and字段

public class UserMapperTest {
    private SqlSessionFactory factory;

    @Before
    // 前置执行
    public void ssf() throws IOException {// 初始化会话工厂
        String resource = "sqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        factory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void test1() throws Exception {
        // 获取会话
        SqlSession sqlSession = factory.openSession();
        // 获取代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.findAll();
        System.out.println(list);
        sqlSession.commit();
    }

MyBatis记录的更多相关文章

  1. Mybatis 记录

    1. #{}, ${}两种传参数方式的区别 1) ${} 会将传入的参数完全拼接到sql语句中,也就是相当于一个拼接符号. 也就是,最后的处理方式就相当于 String sql = select * ...

  2. Mybatis框架基础支持层——日志模块(8)

    前言: java开发中常用的日志框架有Log4j,Log4j2,Apache Commons Log,java.util.logging,slf4j等,这些工具对外的接口不尽相同.为了统一这些工具的接 ...

  3. MyBatis源码解读之延迟加载

    1. 目的 本文主要解读MyBatis 延迟加载实现原理 2. 延迟加载如何使用 Setting 参数配置 设置参数 描述 有效值 默认值 lazyLoadingEnabled 延迟加载的全局开关.当 ...

  4. MyBatis 源码篇-日志模块1

    在 Java 开发中常用的日志框架有 Log4j.Log4j2.Apache Common Log.java.util.logging.slf4j 等,这些日志框架对外提供的接口各不相同.本章详细描述 ...

  5. mybatis源码解析-日志适配器

    1.为什么需要使用适配器?    集成第三方日志组件,屏蔽日志组件底层实现,统一提供写日志的接口. 2.什么是适配器模式 定义:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...

  6. MyBatis获取插入记录的自增长字段值

    在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名! <insert id=" ...

  7. mybatis 配置返回集合collection时只有一条记录

    查询语句配置如下: <select id="selectCustomerList" resultMap="CustomerDtoMap" paramete ...

  8. 备忘:mybatis 3的使用记录

    这是一篇记录.mybatis是一个部分模仿ORM的framework.是一个介于ORM和原始JDBC的框架.既可以提供ORM的操作对象的特性,又能从详细地控制最终的SQL.达到一个平衡.我们还是得写s ...

  9. Mybatis获取插入记录的自增长ID(转)

    1.在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. <ins ...

随机推荐

  1. VMware虚拟机下Ubuntu连不上网解决

    虚拟机:VMware® Workstation 12 Pro Ubuntu: 14.04 问题描述:电脑从公司拿到家打开Ubuntu之后,打开自带Firefox浏览器,显示连接不上网,终端下ping ...

  2. 号称精通Java的你,是否真的名副其实

    慎用精通 随着猎头行业的兴盛,一些应聘者往往可以从猎头那得到一些注意事项和过往经验.比如,在简历中切不可随意用上"精通"二字,尤其对于刚入职场的小伙伴. 因为,对于应聘者写上精通和 ...

  3. Spring+SpringMVC+MyBatis集成学习笔记【一】

    一,首先要清楚,SpringMVC其实就是Spring的一个组件       例如我们知道Spring中有类似于,AOP TX等等类似的组件,所以SpringMVC其实就是Spring的一个组件,是S ...

  4. [js] 实现接口

    摘要 js 语言并没有interface implement 关键字,如果要做到和后端语言类似的接口,一般会需要模拟实现. 在oo 编程中, 接口可以让架构师规定好模块必须要实现的方法, 尽量解耦模块 ...

  5. 使用Fiddler调试手机端页面请求/抓包

    简介 Fiddler作为一个强大的抓包工具,也是非常强大的http(s)协议分析工具,我们通常用它跟踪请求,PC端使用这里暂不做介绍(这里前提是熟悉PC端的使用),使用很简单. 那么我们如何来用它来跟 ...

  6. MAC上安装EndNote破解版的链接文件 以及某些安装好后有可能替换执照文件的方法

    一款非常好用的论文写作软件不多形容,开整: X7 mac版本(非免破解版本)链接: 点击我 X8 mac版本(大客户版本,免破解非常好用) 点击我 X8 windows版本(大客户版本,免破解非常好用 ...

  7. year:2017 month:8 day:1+

    2017-08-01 JAVAse 方法的重载:在同一个类中存在一个以上的同名方法,只要他们的参数数量,参数类型,参数顺序(两个相同类型的参数是不行的)这样就构成了方法的重载. 有返回值的方法有三种调 ...

  8. mybatis 详解(一)------JDBC

    1.什么是MyBatis? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且 ...

  9. 关于Django的理解

    Django的理解 Django的核心是中间件, 所有的请求和响应都会经过中间件 中间件是一个钩子框架, 它们可以介入请求的响应处理过程, 它用于在全局修改Django的输入和输出 Django有以下 ...

  10. 找不到包含 OwinStartupAttribute 的程序集。 - 找不到包含 Startup 或 [AssemblyName].Startup 类的程序集。

    打开web.config添加 <add key="owin:appStartup" value="false" /> <add key=&qu ...