Mybatis入门案例中设计模式的简单分析
Talk is cheap, show me the code!
public class TestMybatis {
public static void main(String[] args) throws IOException {
//1. 读取配置文件
InputStream resource = Resources.getResourceAsStream("mybatis.xml");
//2. 创建sqlSessionFactory工厂
SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = Builder.build(resource);
//3. 使用工厂模式创建sqlSession对象
SqlSession sqlSession = factory.openSession();
//4. 使用sqlSession对象创建mapper(Dao接口)的代理对象
ItemsMapper mapper = sqlSession.getMapper(ItemsMapper.class);
//5. 使用代理对象执行方法
List<Items> items = mapper.selectAll();
for (Items item : items) {
System.out.println(item);
}
//6. 释放资源
sqlSession.close();
resource.close();
}
}
以上这段mybatis的入门案例代码,相信每一个了解mybatis的朋友都能看得懂,知码酱同学今天也细细品了品!
项目的路径问题 :
Resources.getResourceAsStream("mybatis.xml");
在实际的项目中,并不推荐众所周知的相对路径和绝对路径。- 相对路径:
src/main/java/xxx.xmlweb应用是需要部署到服务器上的,一旦部署,项目的路径就会发生改变,然后。。。。一堆404; - 绝对路径:
F:/project/xxx/xxx.xml要知道,服务器可不一定有我们的F盘,况且推荐使用linux系统的服务器;- 推荐使用
- 使用类加载器,但是它只能加载类路径的配置文件;
- 使用项目路径(根路径)。
- 贴个地址,方便查看 https://blog.csdn.net/chenmh12/article/details/90515148
- 推荐使用
- 相对路径:
使用构建者模式创建SqlSessionFactory对象
SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = Builder.build(resource);
- 什么是构建者模式呢? 源码暂且不做探究,我的理解就是点石成金的工程队,想要黄金(factory),你得提供原材料(resource)吧,道理就这么简单!
- 优点:隐藏了创建对象的细节,只需调用相应方法就能得到对象!
使用工厂模式创建SqlSession对象
SqlSession sqlSession = factory.openSession();
- 工厂模式的使用,使得我们无需手动new一个对象,因为这样不利于维护(一旦改变需求就要改源代码,又得重新编译部署!)
- 优点:解耦(降低了类和类之间的依赖关系)
使用代理模式创建了mapper(Dao)接口的实现类
ItemsMapper mapper = sqlSession.getMapper(ItemsMapper.class);
- 代理模式就好比租房的中介,房东只需提供房源,关于租房的事情交给中介(代理),其他什么都不用管,做自己的事情就行。也就是说使用代理模式,之前的代码完全不需要改变,也不需要我们创建实现类,代理会帮我们完成这件事情!
- 优点:不修改源码的基础上对已有方法增强!
总结:这篇文章的出发点是浅显易懂的理解mybatis入门案例中的设计模式和使用路径时应该注意的问题,虽然后续学习spring的时候,这些内容也会被隐藏,但目的是为了理解mybatis设计的独具匠心,关于设计模式的深层次理解,还需要我们多读一写其他的相关文章,多推敲设计模式的代码!
Mybatis入门案例中设计模式的简单分析的更多相关文章
- mybatis入门案例分析
mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...
- MyBatis入门案例、增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- MyBatis入门案例 增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- mybatis入门案例自定义实现
mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...
- 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例
mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...
- 一、mybatis入门案例
今天学习了mybatis框架,简单记录一下mybatis第一个入门案例,目标是使用Mybatis作为持久层框架,执行查询数据的SQL语句并且获取结果集 基本步骤: 物理建模 逻辑建模 引入依赖 创建持 ...
- intellij IDEA Mybatis入门案例
最近打算学习ssm框架 Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...
- MyBatis入门案例
1.案例架构 2.引入jar 包 3.书写配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8&qu ...
- mybatis入门教程之搭建一个简单的mybatis项目并启动它
一.准备条件: 1.依赖jar包:mybatis核心包(必须).lombok插件包(非必须)以及MySQL数据库连接驱动包(必须) <dependency> <groupId> ...
随机推荐
- MySQL按时间统计每个小时记录数
MySQL按时间统计每个小时记录数 方案1: ? 1 2 3 4 5 6 7 SELECT @rownum := @rownum + 1 AS ID, CONCAT((CASE WH ...
- qt 中创建一个工作线程(例子)
当一个事件需要很长的处理时间,就创建一个工作线程,防止主界面卡死. 1.新建一个QT的gui项目,里面包含main.cpp,mainwindow.h,mainwindow.cpp,mainwindow ...
- 荣获“5G MEC优秀商用案例奖”,阿里云边缘计算发力新零售
4月24日,在中国联通合作伙伴大会的 “5G MEC(Mobile Edge Computing,移动边缘计算)边缘云赋能行业数字化转型”分论坛上,阿里云“基于5G边缘计算的新零售应用案例”荣获201 ...
- @loj - 2496@ 「AHOI / HNOI2018」毒瘤
目录 @description@ @solution@ @accepted code@ @details@ @description@ 从前有一名毒瘤. 毒瘤最近发现了量产毒瘤题的奥秘.考虑如下类型的 ...
- 洛谷P2820 局域网
#include<bits/stdc++.h> using namespace std; ; ; int n,k,sum,tot; struct node{ int cnt,fa; }f[ ...
- oracle函数greatest(exp1,exp2,exp3,……,expn)
[功能]返回表达式列表中值最大的一个.如果表达式类型不同,会隐含转换为第一个表达式类型. [参数]exp1……n,各类型表达式 [返回]exp1类型 [示例] SELECT greatest(10,3 ...
- JQuery---高级选择器
一.派生选择器 例如:$('#bavBar a') 二.孩子选择器 例如:$('body > p') 三.相邻兄弟选择器 例如:$('h2 + div') 四.属性选择器 1.$('img[a ...
- Java多线程遍历文件夹,广度遍历加多线程加深度遍历结合
复习IO操作,突然想写一个小工具,统计一下电脑里面的Java代码量还有注释率,最开始随手写了一个递归算法,遍历文件夹,比较简单,而且代码层次清晰,相对易于理解,代码如下:(完整代码贴在最后面,前面是功 ...
- HDU 1114 完全背包问题
题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出... 思路:变形的完全背包问题,只是 ...
- IntStack(存放int型值,带迭代器) 附模板化实现 p406
1 该栈只用于存在int型数据 #include "../require.h" #include <iostream> using namespace std; cla ...