MyBatis学习笔记:Mybatis简介

2023-11-05

参考书籍

《深入浅出MyBatis技术原理与实战》,ISBN:978-7-121-29594-2

传统的JDBC编程

流程

1.加载数据库驱动
2.通过DriverManager获取数据库连接Connection
3.操作Connection打开Statement/PreparedStatement
4.通过Statement执行SQL
5.使用ResultSet读取数据
6.释放相关资源

缺点

1.工作量大,需要手动加载驱动、建立连接、执行SQL、处理结果、释放连接,重复代码多;
2.SQL通过字符串拼接的形式硬编码在代码中,不方便也不安全;

Example

建表语句:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

maven:

    <dependencies>
        <!-- Contains Protobuf -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
    </dependencies>

Example:

import java.sql.*;

public class PureJDBC {

    public static void main(String[] args){
        Connection connection = null;
        try {
            //Load jdbc driver
            Class.forName("com.mysql.jdbc.Driver");
            final String url = "jdbc:mysql://localhost:3306/mybatis";
            final String username = "root";
            final String password = "root";
            //Get Connection
            connection = DriverManager.getConnection(url,username,password);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            //Create statement
            statement = connection.prepareStatement("select * from user where id = ?");
            statement.setLong(1,1L);
            //Query result
            resultSet = statement.executeQuery();
            if(resultSet.next()){
                final long id = resultSet.getLong("id");
                final String name = resultSet.getString("name");
                System.out.println(id + "," + name);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //Release resource
            if(resultSet != null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement != null){
                try {
                    statement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

ORM模型

由于原生JDBC存在如上缺点,因此提出了对象关系映射(Object Relational Mapping),简称ORM。在Java中,ORM模型将数据库表和Java对象进行映射。
常用的ORM模型有:Hibernate、JOOQ、SpringData以及本文介绍之Mybatis。
S 在这里插入图片描述

Mybatis

起源

Mybatis的前身是Apache的开源项目:ibatis,2010年该项目由apache sofeware foundation迁移到google code,并改名为Mybatis。并于2013年迁移到github,目前Mybatis由github维护。

ORM模型

在这里插入图片描述

Example

mybatis_config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="user.xml"/>
    </mappers>
</configuration>

user.xml

<?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="mybatis.UserMapper">
    <select id="getUser" parameterType="long" resultType="mybatis.User">
        select id , name from user where id = #{id}
    </select>
</mapper>

User.java

package mybatis;

public class User {
    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

UserMapper.java

package mybatis;

public interface UserMapper {
    public User getUser(final long id);
}

Example:

private static  SqlSessionFactory sqlSessionFactory = null;

    private SqlSessionFactory getSqlSessionFactory() {
        if (null == sqlSessionFactory) {
            final String resource = "mybatis_config.xml";
            try {
                Reader reader = Resources.getResourceAsReader(resource);
                return new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                throw new IllegalStateException("Cannot build SqlSessionFactory", e);
            }
        } else {
            return sqlSessionFactory;
        }
    }

    public static void main(String[] args) {
        final SqlSession sqlSession = new HelloWorldMyBatis().getSqlSessionFactory().openSession();
        final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        final User user = mapper.getUser(1L);
        //User{id=1, name='Jerry'}
        System.out.println(user);
        sqlSession.close();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis学习笔记:Mybatis简介 的相关文章

  • H . 真签到题

    题目链接 题目描述 Fibonacci 数列 f n f n 1 f n 2 前n项为1 1 2 3 5 8 给出n m 需要你计算出满足条件的对数 i j 的个数 且i lt j 条件是 1 lt gcd f i f j lt n i j

随机推荐

  • 2021-01-23MNIST 测试实战

    通过多个 step 来完成整个训练集的一次迭代 叫做一个 Epoch 在实际训练时 通常需要对数据集迭代多个 Epoch 才能取得较好地训练效果 for epoch in range 20 完成一个 Batch 的数据训练 叫做一个 Ste
  • Docker笔记--查看本地镜像、搜索镜像、拉取镜像和删除镜像

    目录 1 查看本地镜像 2 搜索镜像 3 拉取镜像 4 删除镜像 1 查看本地镜像 sudo docker images 其中 REPOSITORY 表示镜像的名称 TAG 表示版本号 默认下载最新版本latest IMAGE ID表示镜像
  • 创业之路-67]:创业公司不同的产品模式

    模式1 科研型 预研型 3 5年 市场还不成熟 需求还没有显性 属于预测性需求 行业内还没有的成熟的产品形态 行业和自身的技术也都不成熟 还需要一定的酝酿期和技术积累 产品研发通常需要三年以上 甚至五年以上 需要投资资金烧钱 做未来的事 前
  • python读取fits第三方库_python-astropy.io.fits从具有多个HDU的大型fits文件中读取行

    我有一个约50GB的fits文件 其中包含多个HDU 它们都具有相同的格式 一个带有1E5对象和1E6时间戳的 1E5 x 1E6 数组 HDU描述了不同的物理属性 例如磁通 RA DEC等 我只想从每个HDU中读取5个对象 即 5 x 1
  • Databend 开源周报 第 97 期

    Databend 是一款现代云数仓 专为弹性和高效设计 为您的大规模分析需求保驾护航 自由且开源 即刻体验云服务 https app databend cn What s On In Databend 探索 Databend 本周新进展 遇
  • v.douyin.com生成制作抖音缩短口令网址php接口方法

    v douyin com是抖音官方的接口 可以制作头条 火山 抖音短视频等官方域名的任意生成接口 可以推广抖音号 第三方网址 头条文章等 效果非常号 这里记录下api接口 纯技术php生成 具体规则可以去抖音的开放平台去申请对应接口 这里用
  • 原码,反码,补码

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Jason M Ho article details 78700434 数值在计算机中是以补码的方式存储的 在探求为何计算机要使用补码之前 让我们先
  • 今日头条(OCPC)广告激活数据对接-JAVA版

    最近在今日头条投广告 头条反馈可以按照实际激活数据的转换来付费 也就是说 只有用户真的下载并打开应用了才收费 过程类似与早年间的GHOST系统预装软件 下面说下头条的整个逻辑 头条处理逻辑 1 用户在头条点击广告页 广告页引领用户去下载 用
  • Day4 Data Management II part1 ifelse/loop/function in R

    This article is based on R 4 1 2 1 ifelse if else a Identifying fulfilled conditions all condition Returns TRUE if the c
  • 【Ansible自动化运维工具】Ansible变量之lookup生成变量方法

    Ansible自动化运维工具 Ansible变量之lookup生成变量方法 一 lookup插件介绍 1 lookup简介 2 lookup使用场景 3 lookup获取的数据源 4 lookup的注意事项 二 查看lookup支持的模块列
  • 2023WAIC大会后记:我们距离AGI还有多远?

    只有解决了算力问题 才能离大模型的商业化之路更进一步 等等问题 都在成为当下限制我们想象力的关键因素 继2023世界人工智能大会后 大模型还有多少想象力 作者 思杭 编辑 皮爷 出品 产业家 1亿用户 似乎是每个App都想踏过的 门槛 Ti
  • cadence的PCB封装库导入Altium designer

    目录 说明及作者联系方式 导入封装库说明 实例 导入cadence PCB文件 生成封装库 说明及作者联系方式 作者的软件是AD20 cadence是17 4 参考官方文档 官方文档原地址可点击此处跳转 作者还拥有个人公众号 会写一些感悟文
  • 静态链接与动态链接

    C代码编译生成可执行程序会经过如下过程 链接就是把目标文件与一些库文件生成可执行文件的一个过程 1 什么是静态链接 静态链接是由链接器在链接时将库的内容加入到可执行程序中的做法 链接器是一个独立程序 将一个或多个库或目标文件 先前由编译器或
  • IDEA创建CLASS时自动生成头部文档注释

    注释效果 设置如下 if PACKAGE NAME PACKAGE NAME package PACKAGE NAME end parse File Header java ClassName NAME Author USER Descri
  • 经典css系列面试题。

    1 对BFC规范 块级格式化上下文 的理解 BFC 块级格式化上下文 一块独立的区域 有自己的规则 bfc中的元素与外界的元素互不影响 BFC是一块用来独立的布局环境 保护其中内部元素不受外部影响 也不影响外部 怎么触发BFC 1 floa
  • 降低电源纹波噪声的方法

    一 降低电源纹波噪声只需三步 降低电源纹波噪声只需三步 描述 在应用电源模块常见的问题中 降低负载端的纹波噪声是大多数用户都关心的 那么模块的纹波噪声该如何降低 下文为大家从纹波噪声的波形 测试方式 模块设计及应用的角度出发 阐述几种有效降
  • 服务器ibmc无法加载js文件,WEUI应用之JS常用信息提示弹层的封装

    weUI应用 自己用JS封装了几个常用的信息提示的弹层 测试页面的代码在后面有贴出 几个弹层如下图 HTML页面代码 weUI test 测试 function 提示弹层 取消关闭 确定做相应操作 dialog 标题1111111 内容11
  • ODrive踩坑(三)AS5047P磁编码器的ABI接口

    前两篇已经介绍过ODrive在Windows下的使用环境搭建 以及TLE5012B ABI编码器闭环运动的基本配置 ODrive教程资源导航 ODrive踩坑 一 windows下使用环境的搭建 odrivetool及USB驱动的安装 OD
  • Xftp使用root权限连接服务器时提示“ssh服务器拒绝了密码”

    参考网上很多方案修改过后还是不行 最终依据这篇博客修改后成功 原因是之前修改的配置文件不对 应该修改sshd config Xftp连接linux ubuntu 时提示ssh服务器拒绝了密码 请再试一次
  • MyBatis学习笔记:Mybatis简介

    MyBatis学习笔记 Mybatis简介 参考书籍 传统的JDBC编程 流程 缺点 Example ORM模型 Mybatis 起源 ORM模型 Example 参考书籍 深入浅出MyBatis技术原理与实战 ISBN 978 7 121