Mybatis学习——认识Mappper.xml配置文件

Mybatis最大的好处就是封装了JDBC,减少了50%y以上的JDBC代码量,提供Java中POJOs与数据库之间的映射,在配置文件Mapper.xml中就可以使用SQL语句,消除了sql语句与程序代码之间的耦合。
那么接下来作为新手,我通过查资料学习,总结Mappper.xml配置文件的认识。

认识Mapper文件中的元素

1.映射文件节点元素构成

是以<mapper>...</mapper>作为根节点,在根节点中有9个元素,如下图在Ecplise截图所示:
这里写图片描述
分别为:

1.<sql>...</sql>
2.<cache>...</cache>
3.<cache-ref>...</cache-ref>
4.<parameterMap>...</parameterMap>
5.<resultMap>...</resultMap>
6.<select>...</select>
7.<update>...</update>
8.<delete>...</delete>
9.<insert>...</insert>

其中6、7、8、9就是sql语句中的增删改查,非常容易理解

2.映射文件元素的作用

  • cache : 配置给定命名空间的缓存。
    Mybatis相比较Hibernate还有一个强大的缓存机制, 可以使我们很方便配置与定制。缓存机制主要分为一级缓存与二级缓存。
    一级缓存:默认情况下Mybatis是没有开启缓存的,是默认session缓存机制的,当session关闭close或者flush刷新以后,在作用域session中所有cache将会清空。
    二级缓存:需要在配置映射文件中加下面的语句
<cache/>

这样就可以实现二级缓存,关于二级缓存的属性,如下所示:

<cache
  <!--使用FIFO(先进先出)算法来缓存,默认的是LRU(最近使用最少算法)-->
  eviction="FIFO"
  <!--每隔60m刷新一次缓存-->
  flushInterval="60000"
  <!--缓存会存储列表对象或者集合的512个引用,默认为1024个-->
  size="512"
  <!--返回的对象只读状态-->
  readOnly="true"/>

除此之外,当然也可以进行自定义缓存,但是具体的我目前还没进一步加深学习,还没理解透。

  • cache-ref : 从其他命名空间引用缓存配置。
    当你想在namespace命名空间中共享某个相同的缓存机制或者实例,就可以使用cache-ref
<cache-ref namespace="com.xxxx.xxxx"/>
  • resultMap :主要是当对数据库进行负责的联合查询,一对多的情况时候返回的数据类型。
    Mybatis中进行select查询以后,返回的类型通常分为resultType与resultMap。resultType是直接返回的类型,resultMap是高级结果映射,但resultMap与resultType只能在其中用一个。
    resultMap通常用于下列的情况:比如每个学生都有自己的课程安排表student_course,也有自己的兴趣爱好student_hobby。
--表一:student
CREATE TABLE `student` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `name` varchar(255) NOT NULL,   
  `age` int(3) DEFAULT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;  

--表二:student_course
CREATE TABLE `student_course` (  
  `course_id` varchar(11) DEFAULT NULL,  
  `course_name` int(11) DEFAULT NULL
  `course_time` int(11) DEFAULT NULL  
   PRIMARY KEY (`course_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  

 --表三:student_hobby
CREATE TABLE `student_hobby` (  
  `hobby_id` varchar(255) NOT NULL,  
  `hobby_name` varchar(255) DEFAULT NULL,  
  PRIMARY KEY (`hobby_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

我们需要通过student的id查找到学生的兴趣爱好与课程,这时候就用到resultMap配置了。如下实例代码配置resultMap:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><resultMap type="" id="">

        <!-- id, 唯一性,这个id用于标示这个javabean对象的唯一性, 不一定会是数据库的主键
            property属性对应javabean的属性名,column对应数据库表的列名
            (这样,当javabean的属性与数据库对应表的列名不一致的时候,就能通过指定这个保持正常映射了)
        -->
        <id property="" column=""/>

        <!-- result与id相比, 对应普通属性 -->    
        <result property="" column=""/>

        <!-- 
            constructor对应javabean中的构造方法
         -->
        <constructor>
            <!-- idArg 对应构造方法中的id参数 -->
            <idArg column=""/>
            <!-- arg 对应构造方法中的普通参数 -->
            <arg column=""/>
        </constructor>

        <!-- 
            collection,对应javabean中容器类型, 是实现一对多的关键 
            property 为javabean中容器对应字段名
            column 为体现在数据库中列名
            ofType 就是指定javabean中容器指定的类型
        -->
        <collection property="" column="" ofType=""></collection>

        <!-- 
            association 为关联关系,是实现N对一的关键。
            property 为javabean中容器对应字段名
            column 为体现在数据库中列名
            javaType 指定关联的类型
         -->
        <association property="" column="" javaType=""></association>
</resultMap></span>
  • parameterMap :目前已经不用了不,不做学习记录

  • sql : 可以重用的 SQL,如列名、字段名、表名、字段值等。

    <!--表名 -->
    <sql id="tableName">
        sc_student
    </sql>

    <!-- 字段 -->
    <sql id="Field">
    STUDENT_ID,
    NAME,
    AGE,
    BIRTHDAY
    </sql>

    <!-- 字段值 -->
    <sql id="FieldValue">
    #{STUDENT_ID},
    #{NAME},
    #{AGE},
    #{BIRTHDAY}
    </sql>

通过使用<include refid="" />标签引用,refid=”” 中的值指向需要引用的<sql>中的id=“”属性,可以重复使用sql

<include refid="tableName">
<include refid="Field"></include>
<include refid="FieldValue"></include>
  • insert : 映射插入语句
  • update : 映射更新语句
  • delete –:映射删除语句
  • select: 映射查询语句

    insert、update、delete、select标签用法相类似,都可以使用动态的sql语句

<mapper namespace="com.majing.learning.mybatis.dao.UserDao">  

    <insert id="addUser" parameterType="student" useGeneratedKeys="true" keyProperty="id">  
        insert into user(name,password,age) values(#{id},#{name},#{age})  
    </insert>  

    <delete id="deleteUser" parameterType="int">  
        delete from student where id = #{id}  
    </delete>  

    <update id="updateUser" parameterType="user" >  
        update student set name = #{name}, name= #{name}, age = #{age} where id = #{id}  
    </update>  

</mapper> 

这相当于可以理解为:JDBC中的预处理代码,标签中的id就是pst


String sql="insert into stduent(id,name,age) values(?,?,?)";
PreparedStatement pst=con.prepareStatement(sql);
pst.executeUpdate();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值