mybatis映射器用法

        MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等。MyBatis的配置文件包含了<mappers></mappers>节点,这里就是MyBatis映射器。映射器是Mybatis最复杂且最重要的组件。它由一个接口加上XML文件(或者注解)组成。在映射器中可以配置参数、各类的SQL语句、存储过程、缓存、级联等复杂的内容,并且可以通过简易的映射规则映射到指定的POJO或者其他对象上,而且映射器能有效消除JDBC底层的代码。

1、映射器的组成:

        SQL语句:<select>        <delete>        <update>        <insert>

        映射关系:<sql>        <parameterMap>        <resultMap>

2、MyBatis映射器分类:

        (1)纯xml映射器,利用SqlSession的各种方法实现增删改查。

        (2)xml映射器+接口映射器的混合类型

               先定义接口映射器,然后再定义xml映射器,其中xml映射器的namespace应该对应接口映射器的类名。其用法如下:

  1. PersonMapper pm = session.getMapper(PersonMapper.class);

  2. // 直接调用接口的方法,查询id为1的Peson数据

  3. Person p2 = pm.selectPersonById(1);

        (3)注解+接口映射器的混合形式

此类形式,将原先xml里面的sql配置信息,变成Java注解的形式写到接口映射器,用法与上面的例子雷同。

3、引入映射器的三种方式:

 (1)通过文件类路径引入XML映射器

<mappers>

<mapper resource="com/ape/mapper/studentmapper.xml"/>

</mappers>

(2)通过包名引入映射器接口

<mappers>

<package name="com.ape.mapper"/>

</mappers>

  (3)用类注册引入映射器接口

<mappers>

<mapper class="com.ape.mapper.studentmapper"/>

</mappers>

4、MXL映射器+接口映射器

        用XML定义映射器分为两个部分:接口定义和XML配置。先定义一个映射器接口,如下所示。

public interface studentmapper {
    public int addStudent(Student s);
    }

        注意:映射器只是一个接口,而不是一个实现类。MyBatis内部运用了动态代理技术,生成接口的实现类,从而完成接口的相关功能。只要明白 MyBatis 会为这个接口生成一个代理对象,代理对象会去处理映射器接口相关的逻辑即可。

然后,用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.ape.mapper.studentmapper">
    <insert id="addStudent" parameterType="com.ape.bean.Student" useGeneratedKeys="true"             keyProperty="sid"> 
    insert into student(sname,birthday,ssex,classid) 
    values(#{sname},#{birthday},#{ssex},#{classid}) 
</insert>
</mapper>

有了这两个文件,就完成了一个映射器的定义。关于XML文件内容介绍,如下所示:

(1)<mapper> 元素中的属性 namespace 所对应的是一个接口的全限定名,于是 MyBatis 上下文就可以通过它找到对应的接口。

(2)<insert> 元素表明这是一条增加语句,而属性 id 标识了这条 SQL。

注意:我们并没有配置 SQL 执行后和 Student 的对应关系,它是如何映射的呢?其实,这里采用的是一种被称为自动映射的功能,MyBatis在默认情况下提供自动映射,只要SQL返回的列名能和POJO的属性对应起来即可。

最后,在MyBatis的配置文件里面引入这个XML映射器文件:

<package name="com.ape.mapper"/>

       4.1 接口绑定

        接口绑定,就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法,可以有更加灵活的选择和设置。

        接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上 @Select、@Update等注解,里面包含Sql语句来绑定;另外一种就是通过xml里面写SQL来绑定,在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名。

        当Sql语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用xml绑定。一般情况下,用xml绑定的比较多。

使用MyBatis的mapper接口调用时要注意的事项有:

         1. 接口方法名要和 sqlmapper 的id名一样 能找到要执行的sql语句
         2. 接口返回值的类型  要和 sqlmapper中 resultType 类型要一致(每个元素的类型)
         3. 接口中入参的类型 要和 sqlmapper 中 parameterType类型要一致
         4.sqlmapper中的namescpace 的值要和 接口的类路径要一致
         5. 接口要和sqlmapper 放在同一个包下
         6. 接口的名字 要和 sqlmapper 文件名要一致

5、注解+接口映射器

        除 XML方式定义映射器外,还可以采用注解方式定义映射器,它只需要一个接口就可以通过 MyBatis 的注解来注入 SQL,如下所示。

public interface StudentMapper {

    @Select("select * from student" )
    public List<Student> findStudentAndBanji();
}

注解方式完全等同于XML方式创建映射器,但是使用注解的方式比XML方式要简单得多。如果注解方式和XML方式同时定义时,XML 方式将覆盖掉注解方式,一般情况下,MyBatis官方推荐使用的是XML方式,因为XML映射器能完成更复杂的SQL功能。

6、映射器的使用方法

映射器的使用有两种方式,一种方式是直接利用SqlSession进行数据库操作,另外一种方式是SqlSession返回映射器Mapper,利用映射器来执行数据库操作。如下所示:

public class Test

{

public static void main(String[] args) throws Exception

{

// 读取mybatis-config.xml文件

InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");


// 初始化mybatis,创建SqlSessionFactory类的实例

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);


// 创建Session实例

SqlSession session = sqlSessionFactory.openSession();


// 操作数据库方法一:获得xml映射文件中定义的操作语句

Student s = session.selectOne("com.ape.mapper.StudentMapper.getStudent", 1);

// 打印Student对象

System.out.println(s);


// 操作数据库方法二:获得mapper接口的代理对象

StudentMapper sm = session.getMapper(StudentMapper.class);

// 直接调用接口的方法,查询id为1的Student数据

Student s2 = sm.getStudent(1);

// 打印Peson对象

System.out.println(s2);


// 提交事务

session.commit();

// 关闭Session

session.close();

}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值