1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 模板模式-Template Pattern

模板模式-Template Pattern

时间:2023-09-11 10:00:17

相关推荐

模板模式-Template Pattern

一、定义二、结构三、实现四. mybatis模板模式浅探之BaseExecutor

一、定义

一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。

二、结构

三、实现

Game

public abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();//模板public final void play() {//初始化游戏initialize();//开始游戏startPlay();//结束游戏endPlay();}}

Cricket

public class Cricket extends Game {@Overridevoid endPlay() {System.out.println("Cricket Game Finished!");}@Overridevoid initialize() {System.out.println("Cricket Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Cricket Game Started. Enjoy the game!");}}

FootBall

public class Football extends Game {@Overridevoid endPlay() {System.out.println("Football Game Finished!");}@Overridevoid initialize() {System.out.println("Football Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Football Game Started. Enjoy the game!");}}

测试

public class TemplatePatternDemo {public static void main(String[] args) {Game game = new Cricket();game.play();System.out.println();game = new Football();game.play();}}

四. mybatis模板模式浅探之BaseExecutor

BaseExecutor 主要负责实现 MyBatis 中的 SQL 语句执行逻辑,包括缓存管理、事务管理和 SQL 语句的执行。具体来说,它的主要作用包括:

提供缓存管理功能:BaseExecutor 通过维护两级缓存,实现了对 SQL 语句执行结果的缓存。一级缓存是基于执行器的,二级缓存是基于 SqlSessionFactory 的。这样可以大大减少数据库访问次数,提高应用程序的性能。实现事务管理功能:BaseExecutor 提供了事务管理功能,可以控制事务的提交和回滚。在执行 SQL 语句的过程中,如果发生异常,BaseExecutor 会自动回滚事务,保证数据的完整性。执行 SQL 语句:BaseExecutor 通过调用 StatementHandler 对象的方法,执行 SQL 语句并返回执行结果。在执行 SQL 语句之前,BaseExecutor 会将 SQL 语句和参数传递给 StatementHandler 对象,由它来进行具体的执行操作。

根据传入的语句类型,创建不同的语句处理器,执行不同的方法。避免了多重条件判断,动态选择行为。

![](https://img-/f7f470cbc3624033a0863116f3c3a1a1.

public class BaseExecutor implements Executor{private <E> List<E> queryFromDatabase(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, CacheKey key, BoundSql boundSql) throws SQLException {List<E> list;localCache.putObject(key, EXECUTION_PLACEHOLDER);try {// 根据不同的执行器调用查询方法。list = doQuery(ms, parameter, rowBounds, resultHandler, boundSql);} finally {localCache.removeObject(key);}// 存入缓存localCache.putObject(key, list);if (ms.getStatementType() == StatementType.CALLABLE) {localOutputParameterCache.putObject(key, parameter);}return list;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。