Mybatis学习笔记--1:先跑起来再说

2023-11-16

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。是一个基于Java的持久层框架.无论是Mybatis、Hibernate都是ORM的一种实现框架,都是对JDBC的一种封装!

先放项目目录:

a142c7ef007bfd5bb19a2372fd4fa7d609c.jpg

  1. 准备测试工作
  •  导入Mybatis开发包

                    mybatis-3.1.1.jar          

                    mysql-connector-java-5.1.7-bin.jar

  • 创建一张表(MySql)

-- ----------------------------
-- Table structure for customer
-- ----------------------------
DROP TABLE IF EXISTS `customer`;
CREATE TABLE `customer` (
  `cust_id` int(11) NOT NULL AUTO_INCREMENT,
  `cust_name` varchar(255) DEFAULT NULL,
  `cust_profession` varchar(255) DEFAULT NULL,
  `cust_phone` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`cust_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of customer
-- ----------------------------
INSERT INTO `customer` VALUES ('1', '鲁班', '射手', '13499887733', '12341241@qq.com');
INSERT INTO `customer` VALUES ('2', '李白', '刺客', '18977665521', 'libai@163.com');
INSERT INTO `customer` VALUES ('3', '阿轲', '刺客', '18977665997', 'aike@qq.com');
INSERT INTO `customer` VALUES ('4', '德玛西亚', '肉盾', '13700997665', 'demaxiya.126.com6');
INSERT INTO `customer` VALUES ('5', '亚索', '战士', '13586878987', 'yasuo@qq.com');
INSERT INTO `customer` VALUES ('6', '奶妈', '辅助', '13398909089', 'nama@qq.com');
INSERT INTO `customer` VALUES ('7', '剑圣', '刺客', '13398909088', 'jiansheng@163.com');
  • 创建实体:entity.customer.java
public class Customer {
    private Integer cust_id;
    private String cust_name;
    private String cust_profession;
    private String cust_phone;
    private String email;
}

 

  • 创建mybatis配置文件 :mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- spring整合后 environments配置将废除 使用spring中的连接池 -->
    <environments default="development">
        <environment id="development">
            <!-- 使用jdbc事务管理 -->
            <transactionManager type="JDBC" />
            <!-- 数据库连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url"
                          value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="1234" />
            </dataSource>
        </environment>
    </environments>
</configuration>
  • 创建与表对象的关系映射Mapper文件mapper/customer.xml
  • 编写sql语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="myTest">
    <!--后续通过namespace.id使用-->
    <!--根据cust_id查询客户-->
    <select id="queryCustomerById" parameterType="Int" resultType="com.hbuas.sw.entity.Customer">
	  SELECT * FROM `customer` WHERE cust_id  = #{cust_id}
	</select>
  •  将mapper映射文件加载到mybatis配置文件

8e40c03bd74b28f3b000ebb2e7dc27d6e91.jpg

2、执行

1.从硬盘中将mybatis配置文件读到某一对象中;创建SqlSession,执行sql语句


//1.config.xml --->reader
Reader reader =Resources.getResourceAsReader("myBatis-config.xml);
//2.reader --->SqlSession
SqlSessionFactory sessionFacotry = new SqlSessionFactoryBuild().build(reader );
SqlSession session = sessionFacotry.openSession();

2.执行SQL

//第一个参数是Customer.xml的statement的ID;也可以写命名空间.ID;
Customer customer =sqlSession.selectOne("queryCustomerById",1L);
System.out.println("customer");
//释放内存
sqlSession.close();

======================分割线=========================

Mybatis工作流程:

  • 通过Reader对象读取Mybatis配置文件

  • 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象

  • 获取当前线程的SQLSession

  • 事务默认开启

  • 通过SQLSession读取映射文件中的操作编号,从而读取SQL语句

  • 提交事务

  • 关闭资源

 

3.Main方法中的名词解释:

SqlSession:连接到数据库的一个会话,sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例,SqlSession的实例不能共享使用,它也是线程不安全的。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

 

SqlSessionFactory:创建sqlSession的工厂,是一个接口;接口中定义了openSession的不同重载方法。SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。

 

SqlSessionFactoryBuilder:SqlSessionFactoryBuilder用于创建SqlSessionFacoty
SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了;因为SqlSession是通过SqlSessionFactory创建的;所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。

MyBatis架构:c2e6e10841bd13570589e2c8c65d9061f84.jpg

 

 

 

转载于:https://my.oschina.net/u/4152684/blog/3065239

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis学习笔记--1:先跑起来再说 的相关文章

随机推荐

  • C#求排列组合数

    using System using System Collections Generic namespace Algorithms public class PermutationAndCombination
  • Golang RPC性能测试

    最近刚好要使用Golang的RPC 因此对Golang标准库的RPC进行了一下测试 看看其性能到底如何 RPC服务端和客户端的实现完全使用RPC的net rpc标准库 没有经过特殊的优化 主要针对下面三个场景进行测试 测试之前需要先说明一下
  • 数据结构:顺序栈的基本操作

    目录 顺序栈 顺序栈特点 操作 定义结构体 创建一个空的顺序栈 增 删 计算长度 获取栈顶数据 清空顺序栈 销毁 完整代码 顺序栈 栈的特点 只能在一个端进行数据的插入和删除 先入栈的数据后出栈 后入栈的数据先出栈 FILO first i
  • python 查看列名_Pandas 库之 DataFrame - Python学习笔记

    1 简介DataFrame是Python中Pandas库中的一种数据结构 它类似excel 是一种二维表 或许说它可能有点像matlab的矩阵 但是matlab的矩阵只能放数值型值 当然matlab也可以用cell存放多类型数据 DataF
  • C#枚举 及其API C#学习杂记(九)

    C 中有两种基本类型 值类型 引用类型 本文要说的是值类型中的 枚举 1 枚举的意义 我们玩角色扮演游戏的时候 角色一般来说有多种 战士 法师 射手等 我们可以用 0 1 2来分别代表这三种角色类型 角色类型 类型编号 战士 0 法师 1
  • 如何使用Pip卸载软件包?

    Python Pip command provides search install update uninstall packages We can use pip command to uninstall packages easily
  • 收集到的 hls rtmp rtsp 视频流测试地址

    收集到的 hls rtmp rtsp 视频流测试地址 hls https video dev github io streams x36xhzz x36xhzz m3u8 http live hkstv hk lxdns com live
  • JS常用方法

    以下为web开发中常用到的js方法 收集并整理出来 简单的就不写出来了 1 2 lt HTML gt 3 lt HEAD gt 4 lt TITLE gt New Document 5 lt META N
  • 机器学习——线性模型之Softmax回归

    问 Softmax回归模型是一种典型处理多分类任务的非线性分类模型 答 错误 Softmax回归是线性分类模型 实际上是逻辑回归的拓展 它将逻辑回归的二分类推广到了多分类 用逻辑回归的方法解决多分类问题 线性模型 Softmax回归 Sof
  • Python常见面试题

    Python 30道高频面试题及详细解答 1 如何用一行代码生成 1 3 5 7 9 11 13 15 17 19 2 写一个等差数列 产生一个首项为8 公差为12 末项不大于100的列表 3 一行代码求1到1000内的整数和 4 字典按V
  • 工业智能网关在热交换站管理中的应用

    随着城镇化进程的推进 我国供暖行业的集中供暖需求不断增加 中央供暖热源一般是将热源供应站生产出来的高温蒸汽或温水通过一次热管输送到热交换站 热交换站则是通过热交换器的热交换循环进行热交换 然后再通过二次供应管向家家户户输送热量 热水通过室内
  • Selenium教程__获取元素文本、属性值、尺寸(8)

    本文将介绍如何使用Selenium来获取元素的文本内容 属性值和尺寸 并展示一些实际应用场景 学习本文内容将能够轻松地获取并利用元素的相关信息 从而更好地进行元素的验证 操作和断言 from selenium import webdrive
  • jmeter获取图片验证码-解密图片并识别

    说明 关于图片验证码的处理方式有三种方法 一是让开发屏蔽验证码 二是让开发后端指定一个万能验证码 三是使用OCR工具进行图片验证码的解密及识别 推荐使用前两种方法最省事 OCRServer工具识别图片验证码 由于没有对图片进行降噪 所以识别
  • 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取

    参与第五届泰迪杯 侥幸获得二等奖 简单记录一下 一 问题的背景 在当今的大数据时代里 伴随着互联网和移动互联网的高速发展 人们产生的数据总量呈现急剧增长的趋势 当前大约每六个月互联网中产生的数据总量就会翻一番 互联网产生的海量数据中蕴含着大
  • 1. VC6.0致命错误 RC1015: 无法打开包含文件 'afxres.h'.解决方案

    引起此错误一般是因为运行库路径设置错误 导致找不到头文件 afxres h 解决方案 1 运行VC 选择 工具 按钮 选择 选项 如图 VC6 0致命错误
  • LS1028使用原生RGMII软件修改方案

    LS1028的网络拓扑结构 forlinx的开发板目前只做了五路网口 原生的RGMII并没有配置出来 默认将相关引脚功能用作了音频信号 若将该引脚功能用作了RGMII 音频功能就不能使用了 本人主要介绍软件上的修改 对于硬件原理部分是有硬件
  • bat删除文本文件每行前几个字符

    echo off set fn a txt for f usebackq delims i in fn do echo i gt con set h i setlocal enabledelayedexpansion echo h 4 en
  • 【预测模型-RBF预测】基于RBF神经网络实现腐蚀失重数据预测附matlab代码

    作者简介 热爱科研的Matlab仿真开发者 修心和技术同步精进 matlab项目合作可私信 个人主页 Matlab科研工作室 个人信条 格物致知 更多Matlab仿真内容点击 智能优化算法 神经网络预测 雷达通信 无线传感器 信号处理 图像
  • windows版docker安装运行nacos配置连接数据库

    1 docker安装nacos 下载镜像 docker pull nacos nacos server 下载加载完成之后查看本地镜像 看看拉到本地没有 docker images 启动镜像 docker run d p 8849 8848
  • Mybatis学习笔记--1:先跑起来再说

    MyBatis 本是apache的一个开源项目iBatis 2010年这个项目由apache software foundation 迁移到了google code 并且改名为MyBatis 是一个基于Java的持久层框架 无论是Mybat