Mybatis(2)基于命名空间的接口编程方式

第一个例子用的是完全限定类名方式操作映射的sql语句:

User user = session.selectOne("com.mybatis.entity.UserMapper.selectUserByID",1);

Mybatis提供了使用接口方式操作已经映射的sql语句:

BlogMapper mapper = session.getMapper(BlogMapper.class);

Blog blog = mapper.selectBlog(101);
1.搭建环境省略
2.创建接口
package com.mybatis.interfac;



import com.mybatis.entity.User;



public interface IUserMapper

{

    /**

     * 该方法名对应User.xml中查询语句的id,User.xml中的namespace对应该接口的路径 

     * com.mybatis.interfac.IUserMapper

     */

    public User selectUserByID(int id);

}

3.更改User.xml中的namespace

<?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">



<!-- 该namespace对应接口路径,否则抛出异常:"...is not known to the MapperRegistr" 

    每个select中id对应接口中的一个方法名

 -->

<mapper namespace="com.mybatis.interfac.IUserMapper">

    <select id="selectUserByID" parameterType="int" resultType="User">

        select * from tb_user where id = #{id}

    </select>  

</mapper>

4.测试

package com.mybatis.test;



import java.io.IOException;

import java.io.Reader;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.mybatis.entity.User;

import com.mybatis.interfac.IUserMapper;



public class MybatisDemo

{

    //这里采用了静态单列模式确保SqlsessionFactory的唯一性,

    private static SqlSessionFactory sessionFactory=null;

    private static Reader reader=null;

    static

    {

        try

        {

            reader = Resources.getResourceAsReader("Configuration.xml");

            //从xml配置文件中构建sessionFactory

            sessionFactory = new SqlSessionFactoryBuilder().build(reader);

        } catch (IOException e)

        {

            e.printStackTrace();

        }

    }

    

    private static SqlSessionFactory getSessionFactory()

    {

        return sessionFactory;

    }

    

    public static void main(String[] args)

    {

        SqlSession session = null;

        try

        {

            session = getSessionFactory().openSession();

        

            //方式1:User user = session.selectOne("com.mybatis.entity.UserMapper.selectUserByID",1);



            //方法2:接口编程

            IUserMapper usermapper = session.getMapper(IUserMapper.class);

            User user = usermapper.selectUserByID(1);

            System.out.println(user.getUserAddress());

            

        } catch (Exception e)

        {

            e.printStackTrace();

        }finally

        {

            session.close();

        }

    }



}

注意:(官网文档)

1.命名空间,在之前版本的 MyBatis 中是可选项,非常混乱也没有帮助。现在,命名空间是必须的,而且有一个目的,它使用更长的完全限定名来隔离语句

命名空间使得接口绑定成为可能.

 

2.基于接口方式的编程有很多优点:

首先它不是基于文字的,那就更安全了。第二,如果你的 IDE 有代码补全功能,那么你可以利用它来操纵已映射的 SQL 语句。第三,不需要强制类型转换,同时 IUserMapper接口可以保持简洁,返回值类型很安全(参数类型也很安全) 。

 

你可能感兴趣的:(mybatis)