zoukankan      html  css  js  c++  java
  • MyBatis接口式编程(SqlSession直接调用API向接口转变)

    package com.atguigu.mybatis.dao;
    
    import com.atguigu.mybatis.bean.Employee;
    
    /**
     * @Author 谢军帅
     * @Date2019/11/11 16:16
     * @Description
     */
    public interface EmployeeMapper {
    
        /**
         *  根据id查员工
         * @param id
         * @return
         */
        public Employee getEmpById(Integer id);
    }

    上一节的代码中,直接使用SqlSession对象在增删改查时,在传参时,是一个Object类型;传入的参数错误时,实现不了相应的功能。

    接口是从数据库查询数据封装成对象,Sql映射文件也是查询数据库返回封装的对象;MyBatis实现接口与SQL映射文件动态绑定

    这时SQL映射文件的namespace就不能随便写了,要指定为接口的全类名。

    接口中有一个根据id查询员工的方法,对应SQL映射文件中的SQL,将SQL的id改为方法的id(也就是方法名)。

    接口的好处:

    1.接口规定的方法拥有更强的类型检查。

    2.有明确的返回值。

    3.MyBatis使用代理实现接口的实现类的创建。

    测试代码:

    public class MyBatisTest {
    
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            return  new SqlSessionFactoryBuilder().build(inputStream);
        }
    
        @Test
        public void test2() throws IOException {
            //1.获取SqlSessionFactory
            SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
    
            //2.获取sqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            //3.之前是直接调用增删改查的API,现在接口和Sql有了绑定
            //使用sqlSession对象得到接口的实现类对象
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
    
            Employee employee = employeeMapper.getEmpById(1);
            System.out.println(employee.getClass());
            System.out.println(employee);
            sqlSession.close();
        }
    }

    1、 接口式编程

    原生:  Dao===》DaoImpl

    MyBatis:  Mapper===》xxMapper.xml

    2、SqlSession代表和数据库的一次对话;用完必须关闭;

    3、SqlSession和Connection一样,都是非线程安全的。每次使用都应该去获取新的对象,不要把它放在成员变量中。

    4、mapper接口没有实现类,但是MyBatis会为这个接口生成一个代理对象。

        (将接口和xml进行绑定)

        EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);

    5、两个重要的配置文件:

      MyBatis的全局配置文件:包含数据连接池的信息,事务管理器信息等。。。系统运行环境信息

      sql映射文件:保存了每一个sql语句的映射信息;===》把sql抽取出来,让程序员去编写,区别Hibernate的(黑箱操作)。

  • 相关阅读:
    C++——多态性
    C++——继承与派生
    C++——字符串处理
    C++——深拷贝
    C++——浅拷贝
    C++——动态内存分配3
    C++——动态内存分配2-创建对象数组
    C++——动态内存分配1
    C++——指针5
    C++——指针4
  • 原文地址:https://www.cnblogs.com/xjs1874704478/p/11836994.html
Copyright © 2011-2022 走看看