Mybatis的映射文件的配置

Mybatis映射文件的配置

一、映射文件mapper.xml的主要配置元素

  1. select:查询语句,最常用,最复杂的语句之一
  2. insert:插入语句
  3. update:更新语句
  4. delete:删除语句
  5. sql:定义sql语句的一部分,尽量是可以复用的那部分
  6. resultMap:用来描述从数据库集中加载对象,提供映射规则

二、主要元素的描述

1 、select

它是用于映射sql语句中的select语句,其包含了很多属性:

  1. id:是这个元素的唯一标识,一般和Mapper.xml配合使用,来找到元素包含的sql语句。
    2.parameterType:标识传入sql语句中的值得类型,别名或者全限定名,是可选属性,Mybatis能够识别。
    3.resultType:sql语句执行的获得值后的返回值类型,如果是集合类型,也可以用resultMap。
    下面用一个简单的示例演示三个标签的用法:
/*
id的值是querywithid,这个名字自己定义,它代表这个select元素
parameterType的值为Int,表明传入的值得类型为int型,如下面的代码中传入1
resulType的值为student,是Student类的别名,表示预期这条选择语句的道数据的返回值为Student对象类型,所以返回值用student对象接收 
*/
<select id="querywithid" resultType="student" parameterType="int">
           select * from a where stuno=#{stuno}
 </select>
String s="com/kyg/Mapper/StudentMapper.querywithid";
/*通过将Mapper文件的文件名和元素的id值配合使用,就可以让相应的对象找到元素中的sql
 语句,并且执行*/
Student student=session.selectOne(s,1);

4.resultMap:它是映射集的引用,可以配合映射文件中的resulMap元素实现很多功能。
5.flushCache:用于设置执行sql语句后是否清空本地和二级缓存
6.useCache:启动二级缓存的开关,表示将查询结果存入二级缓存中
7.timeout:设置超时参数,单位是秒,超时将会抛出异常
8.fetchSize:获取记录的总条数设定

2、insert

这个元素是用于映射的插入语句,执行完后,会返回插入成功的行数,用int类型接收,它也有几个重要的属性:
1.keyProperty:该属性的作用是将插入或者更新时的返回值赋值给实体类的某个属性,通常会设置为主键所对应的属性,如果是联合属性,用逗号隔开。
2.keyColumn:该属性用于设置第几列是主键,当主键不是第一列是需要设置,如果是联合主键,也是用逗号隔开。
3.useGenerateKey:该属性将使Mybatis使用JDBC的getGenerateKeys()方法获取由数据库产生的主键,其默认值为false。

3、delete和delete元素

这两个元素比较简单,都是执行后返回一个整数。

4、sql元素

这个语句主要用于定义一个sql语句的重复片段,并且通过include的标签包裹插入到需要的地方。

 <sql id="usesql">
        stuno,stuname,sex
    </sql>
    //用sql语句代替了select中的 stuno,stuname,sex,并用include引用它
 <select id="selectwithHashmap"  resultMap="student" >
              select <include refid="usesql"/> from a
    </select>

下面代码和上面的代码效果一样

<select id="selectwithHashmap"  resultMap="student" >
              select stuno,stuname,sex from a
    </select>

5、resultMap元素

这元素有强大的功能:
1解决数据库表和实体类的属性不一致的问题:

//实体类的属性:
   private  int user_id;
   private String user_name;
   private boolean sex;

在这里插入图片描述

//通过resultMap将属性名和数据库表名映射起来
<resultMap id="usemap" type="student">//property是实体类属性名
         <id property="user_id" column="stuno"/>//column是数据库表名
        <result property="user_name" column="stuname"/>
        <result property="sex" column="sex"/>
    </resultMap>
    /*通过<select>元素中的resultMap填写resultMap元素的id值,来解决属性名和表名不一致的问题
    */
    <select id="querywithmap" resultMap="usemap" paramentType="student">
    	select  user_id,user_name,sex form a 
    </select>

另外一种不是用resultMap的解决方法:

//通过as 将属性名和表名连接起来
    <select id="selectwithmap" resultType="student">
        select stuno as 'user_id',
               stuname as 'user_name',
               sex as 'user_sex'
        from a
    </select>

2解决级联查询的问题(以一对一级联查询为例):
首先级联可以简单理解为将两张有关系的表,如学生表和成绩表,通过外键连接,通过查询一张表,可以将另一张一起查询出来


public class Course {
    private int Course_id;
    private String Course_name;
    private int Course_score;
    //setter,getter方法省略
    }
public class Student{
 private  int user_id;
   private String user_name;
   private boolean sex;
   private Course course;//将课程的对象引进了,与查询结果进行映射
    //setter,getter方法省略
}

为数据库中的学生表建立外键,和课程表的主键一致
在这里插入图片描述
为课程表设立主键和学生表的外键一致,这样就将两张表连在一起了
在这里插入图片描述
下面通过resultMap元素实现两个级联的表查询出来,最重要是看其中的association

<resultMap id="usemapoo" type="student">
        <id property="user_id" column="stuno"/>
        <result property="user_name" column="stuname"/>
        <result property="sex" column="sex"/>
        //用<association>实现级联
        /*注意:这和元素中的property写引入到Student类属性中的Course类的对象
        		javaType写Course类的全限定类名
        		其他的都是解决属性名与表名不一致的问题,与上例一样
        */
        <association property="course" javaType="com.kyg.entity.Course">
            <id property="course_id" column="course_id"/>
            <result property="course_name" column="course_name"/>
            <result property="course_score" column="course_score"/>
            <result property="course_id" column="course_id"/>
        </association>
    </resultMap>
    //下面的sql语句是数据库的知识,与这个知识点关联性不大
    <select id="selectwithoo" resultMap="usemapoo" parameterType="int">
           select * from a af inner join b bf on af.course_id=bf.course_id where af.stuno=#{stuno}
    </select>

3,resultMap元素表示结果映射集,可以定义为用Map结果集接收数据,也可以是实体类接收。

6、其他元素:

cache – 对给定命名空间的缓存配置。
cache-ref – 对其他命名空间缓存配置的引用。
(这些标签以后涉及到可以引用)

三、小结

这篇文章主要讲了Mybatis 中的映射器也就是映射文件的主要元素,一个配置文件大概包含这些东西。下一遍文章将主要讲动态SQL,笔者水平有限,如有错误,望大家指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值