栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis的mapper生成原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis的mapper生成原理

实现一个最简单的MyBatis
  • MyBatis是什么
  • 思考一下,我们怎么用在Spring中使用mybatis这个框架的
    • SqlSessionFactoryBean
    • 你写的接口
    • MapperFactoryBean 重点
      • mybatis 动态代理 接口编程
        • 怎么实现?
  • 搞定
  • sqlSessionFactory呢?

MyBatis是什么

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

思考一下,我们怎么用在Spring中使用mybatis这个框架的 SqlSessionFactoryBean
//首先是不是有一个SqlSessionFactoryBean
//这个就是Mybatis创建SQL连接的一个工厂

	//在SqlSessionFactoryBean中定义一个数据源
  
  // 配置mybatis
   

你写的接口
public interface UserMapper {
  @Select("SELECT * FROM users WHERe id = #{userId}")
  User getUser(@Param("userId") String userId);
}
MapperFactoryBean 重点
//把链接和你的接口放到一个类中再找到 配置文件 执行创建一个可以使用的bean
//原理是动态代理

   //你写的mapper接口
  
  //sqlSessionFactoryBean对象
  

mybatis 动态代理 接口编程

userMapperz这个bean是不是一个org.mybatis.spring.mapper.MapperFactoryBean类
为什么这个类可以注入到我们创建的对象类型中
看属性 mapperInterface 指定的是你的接口


怎么实现?

首先创建一个interface

public interface UserDao {
    public void insert();
    public void select();
    public void query();
    public void upate();
}

再有一个代理类对象

//实现InvocationHandler 接口 重写 invoker方法
public class DaoTemplate implements InvocationHandler {
    public static Object newInstance(Class[] interfaces) {
    	//使用JDK的动态代理创建代理对象
        return Proxy.newProxyInstance(DaoTemplate.class.getClassLoader(),
                interfaces, new DaoTemplate());
    }
	
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        String methodName = method.getName();
        System.out.println("调用的方法名称为:"+methodName);
        Class returnType = method.getReturnType();
        System.out.println("返回的类型为"+returnType.getName());

        if ("select".equals(methodName)) {
            this.getClass().getMethod("select");
        } else if ("update".equals(methodName)) {
            this.getClass().getMethod("update");
        } else if ("insert".equals(methodName)) {
            this.getClass().getMethod("insert");
        } else if ("query".equals(methodName)) {
            this.getClass().getMethod("query");
        }


        return null;
    }

    public void select(){
        System.out.println("执行了select");
    }

    public void query(){
        System.out.println("执行了query");
    }

    public void delect(){
        System.out.println("执行力delect");
    }

    public void insert(){
        System.out.println("执行了insert");
    }

}


搞定

public class MyBatisTest {
    public static void main(String[] args) {
        UserDao userDao = (UserDao) DaoTemplate.newInstance(new Class[]{UserDao.class});
        userDao.insert();
        userDao.query();
        userDao.select();
        userDao.upate();
    }
}

sqlSessionFactory呢?

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/396706.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号