15|mBatis:如何将SQL语句配置化?
MyBatis 简介
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何模仿MyBatis实现自己的mBatis。通过配置文件将SQL语句放在外部配置文件中,使用一个结构对应配置文件中的SQL语句的定义。仿照MyBatis,使用一个SqlSessionFactory来处理,并默认实现一个DefaultSqlSessionFactory来负责。在使用Sql Session访问数据时,通过工厂创建一个Sql Session,再执行SQL命令。这个设计留下了灵活性,意味着每一次真正执行某条SQL语句的时候可以替换JdbcTemplate,使动态数据源成为可能。文章通过示例代码深入浅出地介绍了mBatis的配置化特点和实现原理,对于想要深入了解持久化框架的读者具有很高的参考价值。 总结来看,本文通过仿照MyBatis实现了mBatis,将SQL语句进行了配置化。通过一个SqlSessionFactory解析配置文件,以一个id来代表使用的SQL语句。应用程序使用的时候,给SqlSession传入一个SQL的id号就可以执行。然而,这个是极简版本,远远没有实现MyBatis丰富的功能。比如现在只有select语句,没有update;比如SqlSession对外只有一个selectOne接口,非常单薄;比如没有SQL数据集缓存,每次都要重新执行;比如没有读写分离的配置。如何在这个极简版本的基础上进行扩展,就需要读者动动脑筋,好好思考一下了。在一步步构建框架的过程中,主要学习的是搭建框架的思路,拆解部件,让专门的部件去处理专门的事情,让自己的框架具有扩展性。读者可以通过完整源代码参见,进一步思考如何扩展到update语句,以及实现读写分离的配置。
《手把手带你写一个 MiniSpring》,新⼈⾸单¥59
全部留言(2)
- 最新
- 精选
- peter请教老师两个问题啊: Q1:Mapper配置的几个问题 在“Mapper配置”部分,有一个xml文件的说明: <mapper namespace="com.test.entity.User"> <select id="getUserInfo" parameterType="java.lang.Integer" resultType="com.test.entity.User"> 下面是文字说明:“这个配置中,也同样有基本的一些元素:SQL 类型、SQL 的 id”, 请问:namespace有什么用?文字说明中的“SQL 类型”对应哪个部分?是对应namespace吗? namespace与resultType相同,是必须相同吗?还是可以不相同? Q2:没有请求时候访问数据库。 SpringBoot项目,controller中自动注入service,service中自动注入Mapper。请求来了之后,由controller处理,controller调用自动注入的service,service再调用自动注入的Mapper,这是典型的ssm流程。 但是,现在有一个需求:软件启动后,需要访问数据库,此时并没有请求。我现在的实现方法是:controller的构造函数中使用JDBC访问数据库,是成功的。 问题:软件启动后,controller的构造函数执行了,说明controller被实例化了,此时service会自动注入吗? (项目是两年前做的,当时一开始是尝试还用ssm来访问数据库,但好像失败了;印象中好像是service为null,就是说没有自动注入。)
作者回复: namespace区分不同的mapper,以免重名。sql类型是指select,update这些。 建议不要用controller访问数据库,层次不清。
2023-04-16归属地:北京 - 云从老师这节课在xml 中配置sqlSessionFactory时,使用了init-method,如果我没看漏的话 ,前面代码我们应该没有处理这个属性 需要在XmlBeanDefinitionReader 处理一下2023-10-16归属地:四川