mybatis学习总结

mybatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架

为什么要使用mybatis框架?

直接以JDBC编程,将sql语句硬编码到了java代码中,如果sql语句修改,需要重新编译java代码,不利于系统的维护,mybatis将sql语句配置在xml文件中,更易于修改。这边顺便提下mybatis与hibernate的区别,hibernate是一个标准的ORM框架,sql语句自动生成,对sql语句优化、修改比较困难,适用于需求变化不多的中小型项目。mybatis专注于sql语句,对sql语句的优化、修改比较方便,是个不完全的ORM框架,适用于需求变化较多的项目。

mybatis-config.xml配置

<?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>
    <environments default="">
        <environment id="">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>
        <!--配置全局属性-->
    <settings></settings>
        <!-- 配置别名 -->
    <typeAliases>
        <!-- 批量配置别名 -->
            <package name=""/>
    </typeAliases>
</configuration>

在mybatis与spring整合之后,与数据库的连接,事务管理等功能都交给了spring来管理,因此再上面就不再写具体的代码,全局属性的配置根据自己的需要来进行,ssm的整合写在另一篇文章 spring mvc学习的一点总结中,这边就不再赘述。

映射文件*.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sqy.ssm.dao.UserDao">
    <select id="" parameterType="" resultType="" >
        SELECT * FROM USER WHERE id=#{id}
    </select>
    <insert id="" parameterType=""></insert>
    <delete id="" parameterType=""></delete>
    <update id="" parameterType=""></update>
</mapper>

namespace是命名空间,作用是对sql进行分类化管理。
-#{id}:id表示输入的参数,参数名称为id
parameterType:指定输入参数的类型
resultType:输出结果所映射的java对象类型。使用resultType进行输出映射,只有查询出来的列名与pojo中的属性名一致,该列才可以映射成功。
resultMap:如果查询出来的列名与pojo中的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系
1.定义resultMap

<!--type表示resultMap最终映射的java对象类型,可使用别名,id表示resultMap的唯一标识  -->
<resultMap type="" id="">
    <!-- id表示查询结果集的唯一标识,column标识列名,type指定的pojo中的属性名-->
    <id column="" property=""/>
    <!-- result表示普通列的标识 -->
    <result column="" property=""/>
</resultMap>

2.使用resultMap作为输出映射类型

mybatis开发dao方法

原始dao开发:自写dao接口和dao实现类
mapper代理方法:只需要写mapper接口,mybatis可以自动生成mapper接口实现类代理对象

动态sql

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

    <!-- 定义sql片段,其他statement中可以引用sql片段 
        id:sql片段的唯一标识
    -->
    <sql id="...">balabala代码</sql>

    <select id="findUserList" parameterType="com.sqy.po.UserQueryVo" resultType="com.sqy.po.UserCustom">
        select * from user 
        <!-- where可以自动去掉第一个and -->
        <where>
            <!-- 引用sql片段的id,如果refid指定的id不在本xml文件中,需加上namespace -->
            <include refid="..."></include>
            <if test="userCustom!=null">
                <if test="userCustom.id!=null and userCustom.id!=''">
                    and user.id=#{userCustom.id} 
                </if>
                <if test="userCustom.username!=null and userCustom.username!=''">
                    and user.username like '%${userCustom.username}%'
                </if>
            </if>
            <if test="ids!=null ">
                <!--使用foreach遍历传入ids
                    collection指定输入对象中的集合属性  
                    item_id指定每次遍历生成的对象名
                    open:开始遍历时拼接的串
                    close:结束遍历时拼接的串
                    separator遍历的两个对象中间拼接的串
                -->
                <foreach collection="ids" item="item_id" open="and (" close=")" separator="or">
                    <!-- 每次遍历需要拼接的串 -->
                    id=#{item_id}
                </foreach>
            </if>
        </where>
    </select>

延迟加载:先从单表查询,需要时再从关联表进行关联查询,大大提高数据库性能。association、collection具备延迟加载功能。在mybatis-config.xml中的全局配置参数中配置。

查询缓存:分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,在SqlSession对象中有一个HashMap的数据结构用于存储缓存数据。不同的SqlSession之间的缓存数据区域(HashMap)互不影响。二级缓存是mapper级别的缓存,多个SqlSession去操作同一个mapper的sql语句,多个SqlSession可以共用二级缓存 ,二级缓存是跨SqlSession的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值