千家信息网

MyBatis如何实现注册及获取Mapper

发表于:2025-11-18 作者:千家信息网编辑
千家信息网最后更新 2025年11月18日,这篇文章主要为大家展示了"MyBatis如何实现注册及获取Mapper",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"MyBatis如何实现注册及获取Map
千家信息网最后更新 2025年11月18日MyBatis如何实现注册及获取Mapper

这篇文章主要为大家展示了"MyBatis如何实现注册及获取Mapper",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"MyBatis如何实现注册及获取Mapper"这篇文章吧。

一、搭建环境

1.1 pom.xml

             mysql            mysql-connector-java                            com.baomidou            mybatis-plus-boot-starter        

1.2 BlogMapper.java

public interface BlogMapper {    List selectBlog(String id);}

1.3 BlogMapper.xml

    

BlogMapper.xml放在resource目录下与BlogMapper.java包路径相同的路径下

1.4 MyBatisDemo.java

public class MyBatisDemo {    public static void main(String[] args) {            //创建数据源        DataSource dataSource = getDataSource();        TransactionFactory transactionFactory = new JdbcTransactionFactory();        //创建sql运行环境        Environment environment = new Environment("development", transactionFactory, dataSource);        //创建mybatis的所有配置        Configuration configuration = new Configuration(environment);        //注册mapper        configuration.addMapper(BlogMapper.class);//        configuration.addInterceptor(new PaginationInterceptor());                //根据配置创建sql会话工厂        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);        SqlSession sqlSession = sqlSessionFactory.openSession();        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);        System.out.println(mapper.selectBlog("001"));    }    private static DataSource getDataSource() {        DruidDataSource druidDataSource = new DruidDataSource();        druidDataSource.setUrl("jdbc:mysql://localhost:3306/demo?characterEncoding=utf-8&serverTimezone=Asia/Shanghai");        druidDataSource.setUsername("root");        druidDataSource.setPassword("root");        return druidDataSource;    }

二、addMapper详细分析

2.1 MapperRegistry

这块就是判断这个mapper.xml解析过没有,解析是在 parser.parse();中做的,来看

loadXmlResource();根据xml解析每个mapper接口的方法,将得到的MapperStatement放进了configuration,然后记录该xml的namespace表示已经处理过。具体调用链:

loadXmlResource()–>xmlParser.parse()–>configurationElement(parser.evalNode("/mapper"))–> buildStatementFromContext(context.evalNodes("select|insert|update|delete"))–> buildStatementFromContext(list, null)–>statementParser.parseStatementNode()–>builderAssistant.addMappedStatement–>configuration.addMappedStatement(statement);

parseStatement(method);根据注解解析每个mapper接口的方法,因此xml和注解可以同时使用。但是同一个方法两者同时使用会报错

2.2 MapperProxyFactory

放入knownMappers的是MapperProxyFactory,它是一个Mapper代理的工厂,这个工厂提供newInstance方法,产生一个代理类(也就是BlogMapper接口的代理实现类),调用BlogMapper所有的方法将在MapperProxy的invoke方法中执行

三、getMapper详细分析

getMapper会调用MapperRegistry的getMapper从knownMappers中获取代理工厂,再调用newInstance方法产生一个代理类MapperProxy。

3.1 MapperProxy

在执行mapper.selectBlog("001")时,就会调用MapperProxy的invoke方法

根据method(selectBlog)生成对应的MapperMethod,并将MapperMethod放入本地缓存。
mapperMethod.execute(sqlSession, args);执行真正的sql逻辑。

3.2 MapperMethod

MapperMethod的构造方法,根据接口信息、方法信息、配置信息得到SqlCommand(sql名称、类型)、method(方法签名),方便后续执行命令、处理结果集等。

以上是"MyBatis如何实现注册及获取Mapper"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

方法 代理 工厂 接口 信息 内容 篇文章 配置 同时 注解 环境 路径 分析 处理 学习 帮助 相同 也就是 名称 命令 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京自动化软件开发销售公司 合肥搞网络安全干什么的 寰凝软件开发有限公司 新时达服务器怎么打开增值功能 蚌埠嘉锐互联网科技有限公司 简单的网络安全手抄报a4纸 保障机构网络安全的指导文件 太仓网络技术转让 java 数据库连接方式 学软件开发上什么学历 网上支付的网络安全案例 虹口区直销软件开发推荐货源 闵行区网络营销软件开发质量推荐 美国反对网络安全审查 lol进入的时候弹出数据库 信息与网络技术的进步 属于网络安全问题的是 汽车软件开发 招聘信息 不注意网络安全 山东web前端软件开发价格 局加强网络安全管理 服务器系统启用无线连接 成果数据库与管理平台建 第五空间网络安全电影观后感 做好手机网络安全防范 网络安全 崔聪聪 互联网科技成果宣传片 服务器有什么好处 2021年9月1日实施网络安全 江苏软件开发者一般多少钱
0