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接口可以保持简洁,返回值类型很安全(参数类型也很安全) 。

     

  • 相关阅读:
    第01组 Beta冲刺(1/5)
    2019 SDN上机第6次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    USDT钱包对接交易所 寻找最便捷的USDT充提币API接口文档
    EOS区块链钱包开发教程
    XRP钱包对接教程
    usdt钱包如何跟交易所对接?
    BTC_ETH_USDT_自动充提币API接口,钱包对接交易所教程!
    BTC bitcoin-cli转账及交易的API使用教程
  • 原文地址:https://www.cnblogs.com/david-rui/p/3603645.html
Copyright © 2011-2022 走看看