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的朋友都能看得懂,知码酱同学今天也细细品了品!

  1. 项目的路径问题 : Resources.getResourceAsStream("mybatis.xml");

    在实际的项目中,并不推荐众所周知的相对路径和绝对路径。

    • 相对路径:src/main/java/xxx.xml web应用是需要部署到服务器上的,一旦部署,项目的路径就会发生改变,然后。。。。一堆404;
    • 绝对路径:F:/project/xxx/xxx.xml 要知道,服务器可不一定有我们的F盘,况且推荐使用linux系统的服务器;
  2. 使用构建者模式创建SqlSessionFactory对象

    SqlSessionFactoryBuilder Builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = Builder.build(resource);
    • 什么是构建者模式呢? 源码暂且不做探究,我的理解就是点石成金的工程队,想要黄金(factory),你得提供原材料(resource)吧,道理就这么简单!
    • 优点:隐藏了创建对象的细节,只需调用相应方法就能得到对象!
  3. 使用工厂模式创建SqlSession对象

    SqlSession sqlSession = factory.openSession();
    • 工厂模式的使用,使得我们无需手动new一个对象,因为这样不利于维护(一旦改变需求就要改源代码,又得重新编译部署!)
    • 优点:解耦(降低了类和类之间的依赖关系)
  4. 使用代理模式创建了mapper(Dao)接口的实现类

    ItemsMapper mapper = sqlSession.getMapper(ItemsMapper.class);
    • 代理模式就好比租房的中介,房东只需提供房源,关于租房的事情交给中介(代理),其他什么都不用管,做自己的事情就行。也就是说使用代理模式,之前的代码完全不需要改变,也不需要我们创建实现类,代理会帮我们完成这件事情!
    • 优点:不修改源码的基础上对已有方法增强!
  5. 总结:这篇文章的出发点是浅显易懂的理解mybatis入门案例中的设计模式和使用路径时应该注意的问题,虽然后续学习spring的时候,这些内容也会被隐藏,但目的是为了理解mybatis设计的独具匠心,关于设计模式的深层次理解,还需要我们多读一写其他的相关文章,多推敲设计模式的代码!

Mybatis入门案例中设计模式的简单分析的更多相关文章

  1. mybatis入门案例分析

    mybatis入门案例分析 一.设计模式分析 public class MybatisTest { public static void main(String[] args) throws Exce ...

  2. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  3. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  4. mybatis入门案例自定义实现

    mybatis入门案例自定义实现 一.需要实现的类和接口 public static void main(String[] args) throws Exception{ //1.读取配置文件 Inp ...

  5. 03 Mybatis:01.Mybatis课程介绍及环境搭建&&02.Mybatis入门案例

    mybatis框架共四天第一天:mybatis入门 mybatis的概述 mybatis的环境搭建 mybatis入门案例 -------------------------------------- ...

  6. 一、mybatis入门案例

    今天学习了mybatis框架,简单记录一下mybatis第一个入门案例,目标是使用Mybatis作为持久层框架,执行查询数据的SQL语句并且获取结果集 基本步骤: 物理建模 逻辑建模 引入依赖 创建持 ...

  7. intellij IDEA Mybatis入门案例

    最近打算学习ssm框架  Mybatis 作为入门的第一个持久层框架,学习起来实在费劲.故写此文章作为入门案例. 先打开 IDEA建立一个Maven项目,目录结构如下: 源代码已经上传至GitHub ...

  8. MyBatis入门案例

    1.案例架构 2.引入jar 包 3.书写配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8&qu ...

  9. mybatis入门教程之搭建一个简单的mybatis项目并启动它

    一.准备条件: 1.依赖jar包:mybatis核心包(必须).lombok插件包(非必须)以及MySQL数据库连接驱动包(必须) <dependency> <groupId> ...

随机推荐

  1. HZOJ 集合论

    考场用的set,代码复杂度很低,时间复杂度$O(sum log)$,一发过了大样例,以为1e6的数据很稳了就没再管(然后就挂掉了……) 考后把set化成unordered_set就A了.其实$sum ...

  2. 巨蟒python全栈开发-第11阶段 ansible_project3

    今日大纲: 1.用户创建 2.前端优化 3.用户编辑 4.用户删除 5.ansible api介绍 1.用户创建 新建一个user_create.html的页面 <form class=&quo ...

  3. TCP之单项通信

    TestServer.java package com.sxt.tcp; /* * 服务端 */ import java.io.DataInputStream; import java.io.IOEx ...

  4. 前后端登录注册之node剖析与token的使用状态

    登录模块功能详解 1.用户名密码的格式验证 由前端完成,根据需求自行决定,不加叙述 2.点击提交按钮思路详解 前端将用户名 以及加密后的密码还有验证码输入的内容统一发给后端  由后端和数据库的数据进行 ...

  5. @codeforces - 1205B@ Shortest Cycle

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个长度为 n 的正整数序列 a1, a2, ..., an ...

  6. iptables 网址转译 (Network Address Translation,NAT)

    当封包流经NAT電腦時,其位址/通訊端口會被修改,以達到改变包目的地(或旅程),或是让目的地误以为包是源自NAT电脑的效果.換言之,对封包执行NAT的电脑,可以成为新包的来源或目的地,或是成为真正来源 ...

  7. Layout布局(补充)

    HBoxLayout和VBoxLayout HBoxLayout和VBoxLayout布局都比较简单,也叫箱式布局,它按照先后顺序进行横向布局或垂直布局.另外这两种布局也提供了pack属性支持,设置内 ...

  8. pytorch更新

    Pytorch如何更新版本与卸载,使用pip,conda更新卸载Pytorch 2018年05月22日 07:33:52 醉雨轩Y 阅读数 19047   今天我们主要汇总如何使用使用ubuntu,C ...

  9. iptables智能DNS

    1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. 在NAT服务器上添加以下规则: 在PREROUTING链中添加目的地址转换规则: iptables -t ...

  10. 嵌套app ,的h5分支 项目 (分享,保存图片,返回app)

    function callAppBridge(func, argObj) {   const app = window.webkit || window.app;   const args = typ ...