MyBatis框架迭代器模式实现原理解析
迭代器模式,一直没用过,也不会用。恰巧MyBatis框架中也使用到了迭代器模式,而且看起来还比较简单,在以后的工作中,若有需要咱们可模仿它的套路来干。
直接上代码
import java.util.Iterator; /** * @author Clinton Begin */ public class PropertyTokenizer implements Iterator<PropertyTokenizer> { private String name; private final String indexedName; private String index; private final String children; // 通过这个children属性建立前后两次迭代的关系 public PropertyTokenizer(String fullname) { int delim = fullname.indexOf('.'); if (delim > -1) { name = fullname.substring(0, delim); children = fullname.substring(delim + 1); } else { name = fullname; children = null; } indexedName = name; delim = name.indexOf('['); if (delim > -1) { index = name.substring(delim + 1, name.length() - 1); name = name.substring(0, delim); } } public String getName() { return name; } public String getIndex() { return index; } public String getIndexedName() { return indexedName; } public String getChildren() { return children; } @Override public boolean hasNext() { return children != null; } @Override public PropertyTokenizer next() { return new PropertyTokenizer(children); } @Override public void remove() { throw new UnsupportedOperationException("Remove is not supported, as it has no meaning in the context of properties."); } }
实现 Iterator 接口就很方便的弄出一个迭代器,然后就可以使用hasNext和next方法了。
业务逻辑咱们不用管,只需要知道在调用next方法时,new了一个 PropertyTokenizer 实例, 而这个实例有个 children属性, hasNext方法就是通过判断这个children属性是否为空来作为结束迭代的判断条件。
具体的实现的我们不管,只需要领悟两点: 1. next需要干啥; 2. hasNext的如何判断?
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Java框架MyBatis接口编程过程解析
要求: 1.配置文件的namespace名称空间指定为接口的全类名 2.配置文件中的id唯一标识与接口中的方法对应(返回值类型对应,方法名对应,参数个数和类型对应) 接口代码: package com.bird.mybatis.dao; import com.bird.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer id); } 对应配置文件代码: <?xml
-
详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式,将整个系统划分为显示层.Controller层.Service层.Dao层四层,使用SpringMVC负责请求的转发和视图管理,Spring实现业务对象管理, MyBatis作为数据对象持久化引擎. 一. 框架详情 Spring是一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的.Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何J
-
spring mvc 组合mybatis框架实例详解
说明 本项目采用 maven 结构,主要演示了 spring mvc + mybatis,controller 获取数据后以json 格式返回数据. 项目结构 包依赖 与说明 pom文件: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://
-
Java使用MyBatis框架分页的5种方式
本文为大家分享了Java使用MyBatis框架分页的五种方式,供大家参考,具体内容如下 初始准备 1.创建分页对象类,方便模块间传值 //PageInfo.java import lombok.Data; @Data public class PageInfo { private int pageNo; private int pageSize; } 2.定义DAO层接口 import org.apache.ibatis.session.RowBounds; import org.springf
-
MyBatis框架中mybatis配置文件详细介绍
一.注册DB连接四要素属性文件 <propertiesresource="jdbc.properties"/> 二.将指定包中所有类的简单类名当作其别名 <typeAliases> <packagename="com.bjpowernode.beans"/> </typeAliases> 三.配置运行环境 <environmentsdefault="testEM"> <enviro
-
使用maven整合Spring+SpringMVC+Mybatis框架详细步骤(图文)
(项目结构图参照文章末尾) 1.创建maven工程,在pom.xml文件中导入需要的jar包依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apach
-
使用Spring Boot+MyBatis框架做查询操作的示例代码
一.在你建立的工程下创建 Module 选择Spring initializr创建. 二.在Type处选择: Maven Project(项目的构建工具) 三.创建依赖时勾上web,mybatis,mysql(这个看你个人需要吧,可以自主选择) 建立好的项目结构如下: 注意:application.properties和application.yml是同一个东西,均为项目的核心配置文件 内容如下: #连接数据库 spring.datasource.url=jdbc:mysql://localho
-
Spring+Mybatis+Mysql搭建分布式数据库访问框架的方法
一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如何通过Spring+Mybatis构建多数据库访问的架构,并采用多线程提升数据库的访问效率. 需要说明一下,这种方式只适合数据库数量.名称固定,且不是特别多的情况.针对数据库数量不固定的情况,后面再写一篇处理方案. 二.整体方案 三.开发环境准备 3.1 下载Spring.Mybatis.Mysql
-
MyBatis框架迭代器模式实现原理解析
迭代器模式,一直没用过,也不会用.恰巧MyBatis框架中也使用到了迭代器模式,而且看起来还比较简单,在以后的工作中,若有需要咱们可模仿它的套路来干. 直接上代码 import java.util.Iterator; /** * @author Clinton Begin */ public class PropertyTokenizer implements Iterator<PropertyTokenizer> { private String name; private final St
-
Java集合框架迭代器Iterator实现原理解析
使用循环遍历集合 普通for循环 for(int i=0;i<10;i++){} 增强for循环 for(String str:list){} 什么是迭代器Iterator Iterator是Java中的一个接口,核心作用就是用来遍历容器的元素,当容器实现了Iterator接口后,可以通过调用Iterator()方法获取一个Iterator对象 为啥是调用容器里面的Iterator方法呢? 因为容器的实现有多种,不同的容器遍历规则不一样,比如:ArrayList.LinkedList.HashS
-
从云数据迁移服务看MySQL大表抽取模式的原理解析
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 1.1 Java-JDBC通信原理 JDBC与数据库之间的通信是通过socket完,大致流程如下图所示.Mysql Server ->内核Socket Buffer -> 客户端Socket Buffer ->JDBC所在的JV
-
Mybatis mapper动态代理的原理解析
前言 在开始动态代理的原理讲解以前,我们先看一下集成mybatis以后dao层不使用动态代理以及使用动态代理的两种实现方式,通过对比我们自己实现dao层接口以及mybatis动态代理可以更加直观的展现出mybatis动态代理替我们所做的工作,有利于我们理解动态代理的过程,讲解完以后我们再进行动态代理的原理解析,此讲解基于mybatis的环境已经搭建完成,并且已经实现了基本的用户类编写以及用户类的Dao接口的声明,下面是Dao层的接口代码 public interface UserDao { /*
-
PHP设计模式之迭代器模式的深入解析
迭代器(Iterator)模式,它在一个很常见的过程上提供了一个抽象:位于对象图不明部分的一组对象(或标量)集合上的迭代.迭代有几种不同的具体执行方法:在数组属性,集合对象,数组,甚至一个查询结果集之上迭代. 在对象的世界里,迭代器模式要维持类似数组的功能,看作是一个非侵入性对象刻面(facet),Client类往往分离自真实对象实现,指iterator接口.只要有可能,我们可以给迭代器传送一个引用,代替将来可能发生变化的具体或抽象类.参与者:◆客户端(Client):引用迭代器模式的方法在一组
-
Redis cluster集群模式的原理解析
redis cluster redis cluster是Redis的分布式解决方案,在3.0版本推出后有效地解决了redis分布式方面的需求 自动将数据进行分片,每个master上放一部分数据 提供内置的高可用支持,部分master不可用时,还是可以继续工作的 支撑N个redis master node,每个master node都可以挂载多个slave node 高可用,因为每个master都有salve节点,那么如果mater挂掉,redis cluster这套机制,就会自动将某个slave
-
Java RPC框架熔断降级机制原理解析
熔断与降级 为什么在RPC环节中有熔断以及降级的需求,详细的原因这里不多解释,从网上搜索一张图做示意. 熔断 我理解熔段主要解决如下几个问题: 当所依赖的对象不稳定时,能够起到快速失败的目的快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复 比如产品详细页获取产品的好评总数时,由于后端服务异常导致客户端每次都需要等到超时.如果短时间内服务不能恢复,那么这段时间内的所有请求时间都将是最大的超时时间,这类消费时间又得不到正确结果的现象是不能容忍的.所以遇到这类情况,就需要根据一定的算法判定服务
-
MyBatis全局映射文件实现原理解析
全局配置文件为mybatis-config.xml 1.properties标签 <properties resource="dbconfig.properties"></properties> 可以使用properties来引入外部properties配置文件的内容 引入方式有两种: ①resource:引入类路径下的资源 ②url:引入网络路径或者磁盘路径下的资源 2.settings标签 <settings> <setting name=
-
Spring sentinel哨兵模式相关原理解析
1. sentinel作用 1. 当用Redis做主从方案时,假如master宕机,Redis本身无法自动进行主备切换 2. 而Redis-sentinel本身也是一个独立运行的进程,它能监控多个master-slave集群,发现master宕机后能进行自动切换. 2. sentinel原理 1. sentinel负责持续监控主节点的健康,当主节挂掉时,自动选择一个最优的从节点切换成主节点 2. 从节点来连接集群时会首先连接sentinel,通过sentinel来查询主节点的地址 3. 当主节点
-
MyBatis框架底层的执行原理源码解析
目录 1.前言 2.案例项目源码 3.MyBatis源码解析底层执行原理 3.1 读取mybatis配置文件创建出SqlSeesionFactory对象 3.2 通过SqlSeesionFactory对象进而创建出SqlSession对象 3.3 通过SqlSession的getMapper获取到接口代理对象 3.4 通过mapper接口的代理对象执行CRUD 1.前言 MyBatis框架大家肯定都用过的,废话我就不再多说了,这篇文章就给大家分享一下有关MyBatis框架底层的执行原理吧(Deb
随机推荐
- Python实现网站文件的全备份和差异备份
- Angularjs注入拦截器实现Loading效果
- jQuery+HTML5实现图片上传前预览效果
- AngularJS基础 ng-open 指令简单实例
- javascript正则表达式中分组详解
- 深入理解C预处理器
- freemarker简介_动力节点Java学院整理
- nw.js实现类似微信的聊天软件
- Python的函数的一些高阶特性
- Android ADB常用命令总结
- Android中让按钮拥有返回键功能的方法及重写返回键功能
- Docker搭建 Nginx+PHP+MySQL 环境并部署WordPress实践
- 提供Vista下可用的杀软及下载地址
- SQL语句实现表中字段的组合累加排序
- jQuery异步提交表单实例
- 微信小程序引用公共js里的方法的实例详解
- 在Java中使用下划线分隔数的字面值的用法讲解
- Angular2.0实现modal对话框的方法示例
- Vue的土著指令和自定义指令实例详解
- C#实现图片切割、切图、裁剪