MyBatis框架简介

MyBatis

一、使用MyBatis的开发步骤

         1.下载jjar包并导入工程

    2.编写MyBatis核心配置文件(全局)

    3.创建实体类POJO

    4.Dao层SQL映射文件(局部)

    5.创建测试类(service调用)

        a.读取全局配置文件

        b.创建SqlSessionFactory对象,读取配置文件

        c.创建SqlSession对象

        d.调用mapper文件进行数据操作

1: 主配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

    <!--默认environment环境 -->

    <environments default="mysql">

        <!--连接环境 -->

        <environment id="mysql">

            <!--连接源 -->

            <transactionManager type="jdbc" />

            <!--数据源 -->

            <dataSource type="POOLED">

                <!--加载驱动 -->

                <property name="driver" value="com.mysql.jdbc.Driver" />

                <!--数据库地址 -->

                <property name="url" value="jdbc:mysql:///smbms" />

                <property name="username" value="root" />

                <property name="password" value="4682135" />

            </dataSource>

        </environment>

    </environments>

    <mappers>      <!--//关联局部配置文件 -->

        <mapper resource="cn/smbms/dao/user/UserMapper.XML" />

    </mappers>

</configuration>

二、XML文件的提示信息

1.提示信息.dtd文件在mybatis-3.X.jar文件中

2.将jar文件解压 org/apache/ibatis/builder/xml/

    mybatis-3-config.dtd

    mybatis-3-mapper.dtd两个文件

3.拷贝两个xml文件代码头部PUBLIC中的路径 例:PUBLIC "-//mybatis.org//DTD Mapper     3.0//EN"

 4.在MyEclipse中单击工具栏的Window - Preferences - 搜索XML - 选中XML catalog - 单击 Add...

    Location 引入文件路径

        Key 粘贴PUBLIC的复制的路径

三、局域文件

mapper标签:局部根节点

namespace属性对应本文件全路径名(省略从src开始之前的文件夹 所有 / 用 . 替代)

将创建好的文件引入主文件中

<mappsers>

    <mapper namespace="cn/smbms/dao/user/UserMapper.xml">

</mappsers>

四、概念总结

1、MyBatis基本要素

    MyBatis的核心接口和类

        1)SqlSessionFactoryBuiler

            用过即丢,其生命后期只存在于方法体内

            可以重用其来创建多个SqlSessionFactory实例

            负责构建SqlSessionFactory.并提供U盾讴歌build方法的重载

        2)SqlSessionFactory

            SqlSessionFactory是每个MyBatis应用的核心

            作用:创建SqlSession实例

                SqlSession session = SqlSessionFactory.openSession(boolean                   autoCommit)(true:默认关闭事务控制 false:开启事务控制)

            作用域:Application

            声明周期与应用的生命周期相同

            单例:存在于整个应用运行时,并且同时只存在一个对象实例

        3)SqlSession

            包含了执行SQL所需的所有方法

            对应一次数据库会话,会话结束必须关闭

            作用域:线程级别,不能共享

            因为线程不安全 所以最好的作用域在request

            声明周期:一个request请求

            SqlSession的两种使用方式:

                1.通过SqlSession实例直接运行映射的SQL语句

                2.基于Mapper接口方式操作数据

2.mybatis-config.xml  核心配置文件

3.mapper.xml SQL映射文件

五、mybatis-config.xml核心配置文件中的标签和属性

注意:元素节点的顺序

configuration配置

properties 可以配置在java属性配置文件中

settings 修改MyBatis在运行时的行为方式

typeAliases为java类型命名一个别名(简称)

typeHandlers 类型处理器(类型转换器)

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

mappers 映射器

1.配置properties元素的两种方式

    1.通过外部指定的方式(database.properties),实现动态配置

        配置properties标签的resource属性指定(引入)

    2.直接配置为XML,实现动态配置

        直接配置prperty 如:1.

   

    注意:第一种方式优先于第二种

2.typeAliases只用于关联XML配置,简写冗长的java类名

    1.为pojo配置别名

 

2:<typeAliases>

        <typeAliases alias="user" type="cn.java.entity.User">

       </typeAliases>

 

     

     2.扫描某包下的所有类,其类名既别名

3: <package  name="cn.java.pojo"> 类扫描器

 

3.environments元素

    表示配置Mybatis的多套运行环境,将SQL映射到多个不同的数据库上

    子元素节点:environment.但是必须指定其中一个默认运行环境(通过default指定)

    如:1

4.transactionManager-事务管理器

    type属性有两种

        1.JDBC

        2.MANAGED(托管)

5.dataSource元素

    使用基本的DBC数据源接口来配置JDBC连接对象的资源

    有三种内建的数据源类型

    例:<dataSource type="[UNPOOLED|POOLED|JNDI]">

        POOLED是基本的连接池的概念

6.mapper元素

    映射器,定义SQL映射语句

    必须在主配置中引用mapper映射文件

    导入的方式有两种

        1.使用类资源路径获取资源

            4:<mapper resource="cn/java/dao/user/UserMapper.xml"/>

        2.使用URL获取资源

            5:<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>

        3.使用类选择器 - 用类扫描器加载 此种方法必须文件名与接口名必须一致

            6:<package name="cn.java.dao">

   

 

 

六、SQL映射的XML文件(局部配置文件)

一.SQL映射的XML文件

    Mybatis真正的强大在于映射语句,专注于SQL,功能强大

    SQL映射的配置却相当简单

    SQL映射文件的几个顶级元素(按照定义的顺序)

        mapper-namespace -命名空间绑定Dao接口

        cache     -配置给定命名空间的缓存

        cache-ref -从其他命名空间的缓存

        resultMap -用来描述数据库结果集和对象的对应关系

        sql       -可以重用的SQL块,也可以被其他语句音乐

        insert    -映射插入语句

        update    -映射更新语句

        delete    -映射删除语句

        select    -映射查询语句

1.mapper

    namespace:命名空间

        namespace和子元素的id联合保证唯一,区别不同的mapper

        绑定DAO接口

            namespace的命名必须跟某个(相对应的)接口同名

            接口中的方法与映射文件中的SQL语句id一一对应

2.select

    select是Mybatis中最常用的元素之一

    select语句有很多属性可以详细配置每一条语句

    1.id属性:

        命名空间中唯一的标识符

        接口中的方法与映射文件中的SQL语句id一一对应

    2.parameterType属性:

        传入SQL语句的参数类型的完全限定名或别名(jdk基本类型可以不用全名)

    3.resultType属性:

        SQL语句返回值类型的完整类名或别名

3.参数传递#{参数名}

    数据库字段名与JavaBean的属性名一致(或setting映射 sql下划线类型映射驼峰命名)

    parameterType

        基础数据类型

            int.String.Date等

            只能传入一个,通过#{参数名}即可获取传入的值

        复杂数据类型

            java实体类,Map等

            通过#{属性名}或者#{Map的Key}即可获取传入值

MyBatis入参

    单参数:Java基础数据类型

    多参数:Java实体或者封装成Map

二.实现自定义结果映射

    resultType:直接表示返回类型

        基础数据类型

        复杂数据类型

    resultMap:对外部resultMap的引用

        应用场景:

            数据库字段信息与对象属性不一致

            复杂的联合查询,自由控制映射结果

    二者不能同时存在,本质上都是Map数据结构

7: <resultMap>标签

    <resultMap>

        <resultMap type="实体类" id="自定义名">

        <result property="id" column="id"/>

        <result property="userName" column="user_name"/>

        <result property="实体类属性" column="数据库查询出的字段名"/>

    </resultMap>

    <select id="" resultMap="自定义名">

        select id,user_name from user_info

    </select>

 

    resultMap自动映射匹配前提:字段名与属性名一致

    resultMap的自动映射级别(autoMappingBehavior)

        PARTIAL(默认):自动匹配所有属性

    <!-- 关闭自动映射 -->

    <settings>

        <setting name="autoMappingBehavior" value="NONE"/>

    </settings>

面试题${}与#{}的区别

答:#{ }可以防止sql注入,而且入参时自动加上’’单引号,${}sql拼接的时候更方便一些

七、使用Mybatis实现基本的增删改操作

insert标签| delate标签| update

    id属性

    parameterType属性

    参数可以是pojo对象

    也可以是Map

    也可以用@Param注解

        1.将映射方法的多个参数前加上@Param("注解名")

        2.在映射的SQL语句中用#{注解名}入参

    8:modify(@Param("id")Integer id,@Param("userName")String uName);

        SQL: update user_info set userName=#{userName} where id = #{id}

 

    注:超过4个以上的参数最好封装成对象入参

    参数固定的业务方法,最好直接使用多参数入参

         resultType返回值都默认是int类型所有没有此属性

八、使用resultMap实现高级结果映射

resultMap标签

    id:resultMap的唯一标识

    type:java实体类

   

    resultMap子元素的属性有:

        1.id:一般对应数据库中该行的主键id,设置此项可提高MyBatis的性能

        2.result:映射到JavaBean的某个简单类型属性

        3.association:映射到JavaBean的某个复杂类型属性,比如javaBean类

            association标签 实现复杂的类型关联,一对一的关联

            内部嵌套

                映射有一个嵌套javaBean属性

            属性

                property:映射数据库列的实体对象的属性

                javaType:完整java类名或者别名

                resultMap:引用外部resultMap

            子元素

                id

                result

                   property:映射数据库列的实体对象的属性

                   column:数据库列名或者别名

        4.collection映射到javaBean的某个复杂类型属性,比如集合

            复杂类型集合,一对多

            内部嵌套

                映射一个嵌套结果集到一个列表

            属性

                property:映射数据库列的实体对象的属性

                ofType:完整Java类名或者别名(集合所包括的类型)

                resultMap:引用外部resultMap

            子元素

                id

                result

                   property:映射数据库列的实体对象的属性

                   column:数据库列名或者别名

总结:

    resultMap自动映射(autoMappingBehavior)的三个匹配级别

        NONE 禁止自动匹配

        PARTIAL 默认 自动匹配所有属性,内部嵌套除外

        FULL 自动匹配所有

   

    resultMap - 复杂类型关联

        association

            映射一个嵌套javaBean属性,一对一(就是类中的属性包含另一个类)

        collection

            映射一个嵌套集合属性,一对多(就是累中的属性是一个集合)

九、动态SQL标签

1、概念,

    基于OGNL表达式

    使用动态SQL完成多条件查询等逻辑实现

    用于实现动态SQL的元素主要有

        if

        trim 灵活的祛除无用关键字

        where

        set

        choose(when,otherwise)

        foreach

       

2、if标签

    简单的条件选择

3、where

    简化where的条件判断

4、trim

    属性

        prefix 在前面加 比如where

        suffix 在后面加 比如where id=#{id}

        prefixOverrides 忽略前面 比如and

        suffixOverrides 忽略后面 比如逗号

    更灵活的祛除多余关键字

    替代where

    拼接SQL的前缀或者后缀

    :<trim prefix="where" proefixOverrides="and | or">

    可以灵活的判断是否加入一个where语句  忽略拼接条件开头的and或者or关键字

 

5、使用动态SQL实现更新操作

    set标签 + if标签

        update set 列名=值,列名=值 where条件

        set标签配合if标签可以判断值是否需要更改 而且可以忽略句尾的逗号

        备注:实际开发当中,用户只要执行了更新操作,就要按照客户的要求进行更新,哪怕是传入空参也要尊重用户的意愿,所以实际工作当中几乎不会使用set + if进行操作

6、使用forEach完成复杂查询

        迭代一个集合,通常适用于in条件

        属性:

            item - 每个元素迭代时的别名

            index - 迭代过程中每次迭代到的位置 可以省略

            collection:必须指定 - 指定相应入参属性的值 有以下情况

                list

                array

                map-key

            open - 表示以什么未开始 一般是” ( ”

            separator - 每次迭代用什么符号进行间隔 一般是 “,”

            close - 语句以什么结束 一般是” ) ”

十、Mybatis实现分页查询

limit(起始位置,页面容量)

查询用户列表的方法增加2个参数

    from

    pageSize

: DAO接口

List<User> getUserList(@Param("userName")String userName,

                           @Param("userRole")Integer roleId,

                           @Param("from")Integer correntPageNo,

                           @Param("pageSize")Integer pageSize);

 

 

XML:

    <!-- 查询用户列表 -->

    <resultMap type="cn.smbms.pojo.User" id="userList">

        <id property="id" column="id"/>

        <result property="userCode" column="userCode"/>

        <result property="userName" column="userName"/>

        <result property="userRole" column="userRole"/>

        <result property="userRoleName" column="roleName"/>

    </resultMap>

    <select id="getUserList" resultMap="userList">

        select u.* from smbms_user u , smbms_role r where u.userRole = r.id

        <if test="userName != null and userName != ''">and userName like COUACT('%',${userName},'%')</if>

        <if test="userRole != null">and userRole = #{userRole}</if>

        order by creationDate DESC limit #{from},#{pageSize}

    </select>

 

 

Test

    @Test

    public void getUserList() throws IOException {

        SqlSession session = MyBatisUtil.getSession();

        String userName = "";

        Integer roleId = null;

        Integer correntPageNo = 0;

        Integer pageSize = 5;

        List<User> userList = session.getMapper(UserMapper.class).getUserList(

                userName, roleId, correntPageNo, pageSize);

        for (User user : userList) {

            log.debug(user);

        }

    }

 

十一、MyBatis缓存

MyBatis缓存

    一级缓存  会话作用域

    二级缓存  全局作用域

   

二级缓存的配置

    1.MyBatis的全局cache配置

    <settings>

        <settiing name="cacheEnabled value="true"/>

    </settiongs>

    2.在MaaperXML文件中设置缓存,默认情况下未开启 -- 只在一个mappers中有效

    <cache eviction="FIFO" flushlnterval="60000" size="512" readOnly="true"/>

    3.在MaaperXML文件配置支持cache后,若需要对个别查询进行调整,可以单独设置cache

    <select id="selectAll" resultTye="User" useCache="true">

十二、定义部分

  1. 定义:

MyBaits是一个ORM持久化框架

2.uuid技术:

    生成一个随机数 利用uuid()函数

        resultType:返回值类型

        keyProperty:字段名

        order:加载顺序

        <selectKey resultType="string" keyProperty="uuid" order="BEFORE">

            slect uuid()

        </selectKey>

3.面试题

    1.谈谈你对Mybatis框架的理解

        MyBatis是一个ORM的持久化框架,简化JDBC代码,解耦,效率.

    2.应用:

        CRUD,

        特色: 级联查询,缓存

    3.注解:

        JDK注解

        框架注解

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值