zoukankan      html  css  js  c++  java
  • 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接口可以保持简洁,返回值类型很安全(参数类型也很安全) 。

     

  • 相关阅读:
    So sad! ,Asphyre Closure
    Asphyre Sphinx is a cross-platform framework for developing 2D/3D video games and interactive business applications
    Mark: admob for delphi xe4 integrated 80% -done!-95% to do more test
    CCBPM新手流程设计教程
    CCBPM 常用API接口说明
    CCBPM H5版本中组织结构集成以及与外部数据源同步介绍
    关于驰骋工作流引擎ccbpm 在工业自动化环境下的应用演示实例
    关于驰骋工作流引擎ccbpm 在工业自动化环境下的 应用演示实例
    CCFlow新版本的自由流程、自定义流程功能说明
    关于驰骋工作流引擎ccbpm对bpmn2.0的支持
  • 原文地址:https://www.cnblogs.com/david-rui/p/3603645.html
Copyright © 2011-2022 走看看