zoukankan      html  css  js  c++  java
  • Java框架学习——Mybatis

    本篇文章是我学习Mybatis的总结
    1.概述
    1.1 定义:
    Mybatis是是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。它通过SQL Map将Java对象映射成SQL语句,再将结果集转换成Java对象。
    1.2 它可以:
    1)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。
    2)MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO映射成数据库中的记录。
    2.Mybatis执行流程
    2.1要使用Mybatis,你需要3件东西:
    1)一个数据库和一张表:
    因为Mybatis就是操作数据库的,所以我们使用Mybatis当然要用到数据库,数据库是mysql,我用的测试数据库名称叫test.有几张表,我会导出sql语句,放到工程中。
    如下图:
    2)jar包:mybatis的和mysql的核心包
    3)一个java web项目:
    大概是长这个样子。大概需要的东西就是这三件,然后我们开始使用Mybatis来操作数据库吧。
    2.2.Mybatis执行流程
    执行Mybatis需要
    1)一个实体类:建立一个对应于数据库的一张表的实体类,需要有空构造方法,sqlSession的selectone方法查询一条信息时,会调用空构造方法去实例化一个domain.
    2)一个conf.xml:配置sql的运行环境。
    conf.xml 配置需要遵守以下顺序,不然会报错:
    • properties:可以引用一些properties文件,例如jdbc的配置文件
    • settings
    • typeAliases:可以给Java类型命名一个较短的名字,用来减少类完全限定名的多余部分,可以用在mapper中。
    • typeHandlers
    • objectFactory
    • objectWrapperFactory
    • reflectorFactory
    • plugins
    • environments:将SQL映射用于多种数据库中,可以配置多种环境,但只能为每一个SqlSessionFactory选择一个
    • databaseIdProvider
    • mappers:定义SQL映射语句。告诉Mybatis去哪找映射文件。
    3)一个mapper.xml文件:核心sql映射。
    为实体类写mapper文件,就是写sql语句,需要什么写什么。包括DDL,DML语句等。
    4)一个执行类:
    Mybatis的执行步骤是:
    • 使用类加载器或者MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
    • 构建sqlSession的工厂
    • 创建能执行映射文件中sql的sqlSession
    • 执行查询
    运行这个执行类就可以看到操作了。
    3.mapper里的Sql语句
    这一章专门总结一下mapper里面的语法。mapper其实就是一个sql语句的xml形式,mybatis利用这个xml反射生成Java代码从而面向接口编程。主要总结标签:
    1)常用标签:
    select:查询语句,有多个属性,重要的是下面两个
    parameterType:参数的类型,可以是基本类型也可以是Java类
    resultType/resultMap:返回的结果,当Java实体类和数据库的表的列对应时,就可以直接写列名,当不对应时,就需要用resultMap来对应了。
    insert:
    parameterType:同上
    update:
    parameterType:同上
    delete
    parameterType:同上
     
    2)动态sql
    动态sql元素和使用JSTL或其他相似的基本XML的文本处理器相似,mybatis采用基于OGNL表达式来消除其他元素。
    if:条件语句
    <if test="colName != null">
    and ....
    </if>
    choose、when、otherwise:选择跳转
    <choose>
    <when test="cloName!=null">
    and...
    </when>
    <when test="....">
    and...
    </when>
    <otherwise>
    or 1=1;
    </otherwise>
    </choose>
    注:两个when只能满足一个,都不满足则会用otherwise
    trim、where、set:将where作为判断条件
    set元素可以用于动态,包含更新的列
    foreach:迭代一个集合,通常是构建在条件上的。
    4.Mybatis缓存:见链接,写得很好。
     
    5.Mybatis基本原理
    反射,就是反射,还是反射
     
     
    注:代码我会传到github上,链接是:https://github.com/Gabby007/frameworkDemo
    参考资料:
    《深入分析Java Web 技术内幕(修订版)》 许令波著
     
     
     
     
  • 相关阅读:
    洛谷 U141580 简化罗波切问题
    洛谷 U141578 维修电路
    洛谷 U140760 狭义公因子
    CF75C Modified GCD
    算法题-求解斐波那切数列的第N个数是几?
    算法题-求N的阶乘
    JAVA8新特性
    nginx启动脚本,手动编辑
    javah生成带有包名的头文件
    Matlab图像处理(03)-基本概念
  • 原文地址:https://www.cnblogs.com/Gabby/p/6813444.html
Copyright © 2011-2022 走看看