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

第一个例子用的是完全限定类名方式操作映射的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基于命名空间的接口编程方式)