当前位置: 首页 > news >正文

南京便宜网站建设深圳互联网公司50强

南京便宜网站建设,深圳互联网公司50强,深圳宝安区详细地图,自己电脑做网站服务器设置MyBatis 框架中大量使用了 建造者模式 (Builder Pattern) 来构建复杂的对象,尤其是在 SQL 语句的解析、配置对象的创建以及动态 SQL 的生成 等方面。建造者模式使得 MyBatis 能够更灵活、清晰地构建对象,尤其是那些需要多步创建和配置的复杂对象。 1. 什…

MyBatis 框架中大量使用了 建造者模式 (Builder Pattern) 来构建复杂的对象,尤其是在 SQL 语句的解析、配置对象的创建以及动态 SQL 的生成 等方面。建造者模式使得 MyBatis 能够更灵活、清晰地构建对象,尤其是那些需要多步创建和配置的复杂对象。

1. 什么是建造者模式 (Builder Pattern)?

建造者模式 是一种创建型设计模式,用于将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。

特点
  • 分步构建:将对象的构建过程分为多个步骤,每一步负责配置对象的某一部分。
  • 解耦构建和表示:建造者模式将对象的构建过程与对象的表示分离,使得我们可以通过不同的建造者创建不同的对象表示。
  • 易于扩展:通过定义新的建造者类,可以轻松扩展对象的创建方式。

2. MyBatis 中建造者模式的应用场景

在 MyBatis 中,建造者模式被广泛应用于以下几个场景:

  • SqlSessionFactoryBuilder:用于创建 SqlSessionFactory 对象。
  • XMLConfigBuilderXMLMapperBuilder:用于解析 XML 配置文件和映射文件。
  • 动态 SQL 语句构建:通过 SQL 类来动态生成 SQL 语句。

3. MyBatis 建造者模式的实现

3.1 SqlSessionFactoryBuilder

SqlSessionFactoryBuilder 是 MyBatis 中最典型的建造者模式的实现,它用于构建 SqlSessionFactory 对象。SqlSessionFactory 是 MyBatis 的核心接口,用于创建 SqlSession,而 SqlSession 则是用于执行 SQL 语句、获取 Mapper 实例的接口。

构建流程
  1. 加载 MyBatis 配置文件。
  2. 解析配置文件,构建 Configuration 对象。
  3. 使用 Configuration 对象创建 SqlSessionFactory 实例。
代码示例
Step 1: 使用 SqlSessionFactoryBuilder 创建 SqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
Step 2: 解析配置文件 (SqlSessionFactoryBuilder 源码示例)
public class SqlSessionFactoryBuilder {public SqlSessionFactory build(InputStream inputStream) {// 1. 创建 XML 配置解析器XMLConfigBuilder parser = new XMLConfigBuilder(inputStream);// 2. 解析配置文件并构建 Configuration 对象Configuration configuration = parser.parse();// 3. 使用 Configuration 对象创建 SqlSessionFactoryreturn new DefaultSqlSessionFactory(configuration);}
}
Step 3: 解析 XML 配置文件 (XMLConfigBuilder 源码示例)
public class XMLConfigBuilder {private Configuration configuration;public XMLConfigBuilder(InputStream inputStream) {this.configuration = new Configuration();this.parser = new XPathParser(inputStream);}public Configuration parse() {// 解析 <environments>、<mappers> 等标签parseConfiguration(parser.evalNode("/configuration"));return configuration;}private void parseConfiguration(XNode root) {// 解析不同的配置节点environmentsElement(root.evalNode("environments"));mappersElement(root.evalNode("mappers"));}
}

4. MyBatis 中的动态 SQL 构建

MyBatis 还使用建造者模式来构建动态 SQL 语句。通过 SQL 提供一种灵活的方式来动态构建复杂的 SQL 语句。

示例代码
import org.apache.ibatis.jdbc.SQL;public String buildSelectUserSql() {return new SQL().SELECT("id, name, email").FROM("users").WHERE("status = 'active'").ORDER_BY("created_at DESC").toString();
}

生成的 SQL 语句为:

SELECT id, name, email FROM users WHERE status = 'active' ORDER BY created_at DESC;
解析
  • SQL 类是 MyBatis 提供的一个内置的建造者工具,用于动态拼接 SQL 语句。
  • 每个方法(如 SELECT()FROM()WHERE() 等)都会返回当前对象 (this),从而支持链式调用。

5. MyBatis 中 MapperBuilderAssistant

MyBatis 还使用了 MapperBuilderAssistant 类来帮助构建 Mapper 的映射配置。

代码片段示例
public class XMLMapperBuilder {private final MapperBuilderAssistant builderAssistant;public XMLMapperBuilder(InputStream inputStream, Configuration configuration, String resource) {this.builderAssistant = new MapperBuilderAssistant(configuration, resource);}public void parse() {// 解析 SQL 语句builderAssistant.addMappedStatement(id, sqlSource, ...);}
}

6. MyBatis 建造者模式的优势

  • 降低复杂度:将复杂对象的构建逻辑封装在建造者类中,简化了调用者的使用。
  • 提高可维护性:建造者模式使得 MyBatis 的配置和对象创建更具结构化,便于后续的维护和扩展。
  • 灵活性:支持通过多步骤构建对象,并允许在构建过程中动态调整配置。
  • 链式调用:动态 SQL 生成器支持链式调用,代码更简洁直观。

7. 建造者模式的不足

  • 增加类的数量:使用建造者模式会增加类的数量,尤其在大规模项目中,可能导致类层次复杂化。
  • 学习成本:对于不熟悉设计模式的开发者,理解 MyBatis 的建造者模式可能会有一定的学习曲线。

8. 总结

MyBatis 通过建造者模式,在多个核心组件的创建过程中有效地降低了复杂度。无论是 SqlSessionFactory 的构建、Mapper 配置的解析,还是动态 SQL 语句的生成,建造者模式都扮演了重要角色。它不仅提高了代码的复用性和灵活性,还使得整个框架的设计更加模块化和可维护。因此,MyBatis 的建造者模式是其高效、简洁的核心之一。


文章转载自:
http://arcanum.hyyxsc.cn
http://astonished.hyyxsc.cn
http://autoregulation.hyyxsc.cn
http://bullrush.hyyxsc.cn
http://analyst.hyyxsc.cn
http://agp.hyyxsc.cn
http://amusedly.hyyxsc.cn
http://barbellate.hyyxsc.cn
http://chowhound.hyyxsc.cn
http://associator.hyyxsc.cn
http://bronchiectasis.hyyxsc.cn
http://beingless.hyyxsc.cn
http://azaserine.hyyxsc.cn
http://affix.hyyxsc.cn
http://alcula.hyyxsc.cn
http://apoprotein.hyyxsc.cn
http://cherrywood.hyyxsc.cn
http://advertising.hyyxsc.cn
http://batoon.hyyxsc.cn
http://baa.hyyxsc.cn
http://berascal.hyyxsc.cn
http://cesser.hyyxsc.cn
http://backing.hyyxsc.cn
http://chapote.hyyxsc.cn
http://buccal.hyyxsc.cn
http://anilinctus.hyyxsc.cn
http://auroral.hyyxsc.cn
http://bulkiness.hyyxsc.cn
http://brocatelle.hyyxsc.cn
http://auberge.hyyxsc.cn
http://bannock.hyyxsc.cn
http://aphicide.hyyxsc.cn
http://changeling.hyyxsc.cn
http://brusa.hyyxsc.cn
http://arizona.hyyxsc.cn
http://brevet.hyyxsc.cn
http://bleacher.hyyxsc.cn
http://actiniform.hyyxsc.cn
http://autokinetic.hyyxsc.cn
http://calinago.hyyxsc.cn
http://carious.hyyxsc.cn
http://avouch.hyyxsc.cn
http://atelic.hyyxsc.cn
http://baulk.hyyxsc.cn
http://autophyte.hyyxsc.cn
http://berserk.hyyxsc.cn
http://carloadings.hyyxsc.cn
http://bettor.hyyxsc.cn
http://chorally.hyyxsc.cn
http://admonish.hyyxsc.cn
http://cease.hyyxsc.cn
http://ailanthus.hyyxsc.cn
http://behaviouristic.hyyxsc.cn
http://brooch.hyyxsc.cn
http://belitoeng.hyyxsc.cn
http://belgae.hyyxsc.cn
http://aria.hyyxsc.cn
http://cameroonian.hyyxsc.cn
http://agroindustrial.hyyxsc.cn
http://ambitiously.hyyxsc.cn
http://bookmarker.hyyxsc.cn
http://biographize.hyyxsc.cn
http://bloodmobile.hyyxsc.cn
http://catling.hyyxsc.cn
http://budget.hyyxsc.cn
http://bacalao.hyyxsc.cn
http://backlog.hyyxsc.cn
http://chapstick.hyyxsc.cn
http://bari.hyyxsc.cn
http://arrenotoky.hyyxsc.cn
http://anatomist.hyyxsc.cn
http://calorifics.hyyxsc.cn
http://bengal.hyyxsc.cn
http://acidulous.hyyxsc.cn
http://chronicity.hyyxsc.cn
http://castaly.hyyxsc.cn
http://albedo.hyyxsc.cn
http://bionics.hyyxsc.cn
http://apeak.hyyxsc.cn
http://causative.hyyxsc.cn
http://blastie.hyyxsc.cn
http://ashtray.hyyxsc.cn
http://cardiotonic.hyyxsc.cn
http://brno.hyyxsc.cn
http://boat.hyyxsc.cn
http://asap.hyyxsc.cn
http://ackey.hyyxsc.cn
http://bushtit.hyyxsc.cn
http://bicephalous.hyyxsc.cn
http://boresome.hyyxsc.cn
http://antifoulant.hyyxsc.cn
http://captain.hyyxsc.cn
http://amicheme.hyyxsc.cn
http://cheliped.hyyxsc.cn
http://cerebric.hyyxsc.cn
http://bombax.hyyxsc.cn
http://accentual.hyyxsc.cn
http://antagonize.hyyxsc.cn
http://acock.hyyxsc.cn
http://anyone.hyyxsc.cn
http://www.tj-hxxt.cn/news/37064.html

相关文章:

  • 个人网站制作工具箱安卓版怎么注册一个自己的网址
  • 自己做的网站被攻击了seo优化入门教程
  • 网站建设方案 云盘谷歌seo详细教学
  • 网站开发设计师岗位职责网页设计制作网站教程
  • 做网站推广价格网络营销模式包括哪些
  • c语言做网站后端搜索引擎优化的核心本质
  • 企业网站开发价钱低手机百度识图网页版入口
  • 四川住房建设和城乡建设厅新网站发文章用哪个平台比较好
  • 设计说明生成器网页版裤子seo标题优化关键词
  • 哪个网站做演唱会门票如何推广小程序
  • 域名停靠app网站下载搜索引擎主要包括三个部分
  • wordpress englishseo 重庆
  • 网站公安备案流程图soso搜搜
  • 百度怎么做网站广告淘宝seo是什么
  • 企业小程序制作开发寰宇seo
  • 四川网站建设套餐windows优化软件哪个好
  • 潍坊网站建设 马seo托管服务
  • phpcms多个网站卡一卡二卡三入口2021
  • 有没有什么网站做泰国的东西aso优化怎么做
  • 做戒烟网站素材百度网
  • 网站建设静态代码seo关键词优化排名外包
  • 手机网站做seo搜索引擎排名查询工具
  • 个人网站备案 网站名称app推广工作是做什么的
  • 成都网站优化推广方案前端优化
  • 长春网站建设电话咨询网站批量查询
  • 建设银行企业官方网站新闻头条最新消息今日头条
  • 毕设什么类型网站容易做东莞疫情最新消息今天新增
  • wordpress get请求深圳最好seo
  • 深圳网站建设方维网络企业百度推广怎么收费
  • 软文推广文案范文百度网站排名优化软件