mybatis中的相关概念小结

上一篇文章中总结了mybatis的入门原始dao开发和mapper代理开发,忽略了很多概念性的东西,以及相关相似概念的区别,因此笔者在此,进行相关基本概念的总结,用于自我学习的记录。(ps:概念性的东西是基础,是往后理解其思想的基本必备知识)

  • parameterType:映射文件XXXMapper.xml中指定输入参数的类型。
  • resultType:映射文件XXXMapper.xml中指定输出参数的类型。
  • #{}与${}的区别:
  1. #{}表示一个占位符,#{}接收输入参数,类型可以是简单类型,pojo,hashmap等。如果接收简单类型,#{}可以写成value或者其他名称,如果接收的是pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性....的方式获取对象属性值。
  2. ${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。${}接收输入参数类型可以是简单类型,pojo,hashmap,如果接收简单类型,${}只能写成value,${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性....的方式获取对象属性值。
  • selectOne和selectList的区别:selectList可以有selectOne的功能,但是selectOne不能有selectList的功能。包含于被包含的关系。
  • SqlSessionFactoryBuilder:用于得到SqlSessionFactory对象,创建该会话工厂。
  • SqlSessionFactory:会话工厂,用户得到SqlSession对象,创建该会话。注意SqlSessionFactory是线程安全的。可以通过单例模式管理。
  • SqlSession:会话,面向用户的接口,提供了很多操作数据库的方法。注意SqlSession的线程不安全的,建议在局部范围内使用。
  • typeAliases(别名):mybatis默认支持的别名:

         当然我们不仅仅使用的就是这些类型,其中包括了自定义类型:看下面这段代码:

        

可以发现的是包名很长,尤其当路径一复杂的时候,整个文档下来机会看到的都是h.l.pojo.xxx,这个是开发者所不愿意看到的,因此我们可以给他取一个别名,用来标记他(就好比大家知道Is-Me-Hl指代的就是某某):

       

       

这样整个配置文件也就看起来“干净”很多。是开发者们所希望的。当然还可以批量定义别名,mybatis扫描完指定的包后,自动定义别名,雷明就是别名,不区分大小写,都允许。

                

(ps:这里给个提醒,也是笔者一开始学习过程中遇到的问题:mybatis的配置文件里面的标签必须按照一定顺序写,如果不按顺序写,会提示或者报错:)

The content of element type "configuration" must match"(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

解决上述这个错误的方法就是按照标签的顺序在相对应的位置上写标签(注意:指的是标签的前后顺序),这里给个顺序参考:

<configuration>

    <properties>
        <property/>
    </properties>

    <settings>
        <setting/>
    </settings>

    <typeAliases>
        <typeAlias/>
    </typeAliases>

    <environments>
        <environment></environment>
    </environments>

    <mappers>
        <mapper/>
    </mappers>

</configuration>
  • typeHandlers:类型处理器,完成jdbc类型和Java类型之间的转化。mybatis提供了很多的默认类型处理器让开发者使用。关于自定义类型处理器,后面的文章总结。
  • resultType和resultMap区别:
  1. resultType:使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,没有创建pojo对象。只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
  2. resultMap:完成高级输出结果映射。如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。下面就看看具体是怎么用的:

         

  • 动态sql:mybatis的核心,对sql进行灵活的操作,通过表达式进行判断,对sql进行灵活拼接和组装。

        

上面的这段代码,就是简单使用动态sql的一个例子:进行了sql拼接,判断id是否为空,如果不为空的话就进行拼接,为空就不拼接。

  • sql片段:将动态sql判断代码块抽取出来,组成一个sql片段,其他的statement中就可以引用sql片段。

          

  • foreach:向sql传递数组或者List,mybatis使用foreach解析

        

  • 延迟加载:mybatis默认不开启。后面总结。
  • 查询缓存:系统默认开启一级缓存(sqlSession级别),二级需要去设置(Mapper级别),后面总结。

 注:以上文章仅是个人学习过程总结,若有不当之处,望不吝赐教。

猜你喜欢

转载自blog.csdn.net/m0_37265215/article/details/84112021