MyBatis源码·一——jdbc与mybatis的简单示例

这篇博客介绍了JDBC作为Java与数据库交互的标准,提供了简单示例。随后转向MyBatis,展示了如何配置和创建基本的MyBatis示例,包括主配置文件和mapper.xml的编写,以及执行根据id查询User的SQL。最后提到,虽然计划研究MyBatis源码,但因ORM领域的复杂性决定暂时搁置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JDBC

JDBC(Java Database Connectivity)是Java语言和关系型数据库交互的一种规范。JDBC提供了一套完整的API用于连接、访问数据库,并返回sql执行对应的结果。

本系列主要研究MyBatis源码,JDBC我们仅做一个使用示例,对MyBatis起一个引导作用,并不会对其底层做研究。

示例

导入相应的jar包

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.27</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.8</version>
</dependency>

我使用的是Mysql 8,大家进行相应的修改就好

package com.nona.jdbc;

import com.mysql.cj.jdbc.MysqlDataSource;

import java.sql.*;

/**
     * @author nona9961
     * @date 2021/12/27
     */
public class JDBCExample {
    public static void main(String[] args) throws SQLException {
        // 获取数据源——不用DriverManager,DataSource的实现类MysqlDataSource是Mysql提供的,所以不需要设置Driver
        MysqlDataSource mysqlDataSource = new MysqlDataSource();
        mysqlDataSource.setUser("root");
        mysqlDataSource.setPassword("123456");
        mysqlDataSource.setURL("jdbc:mysql:///myBatis-user");
        // 获取连接
        Connection connection = mysqlDataSource.getConnection();
        // sql
        PreparedStatement preparedStatement = connection.prepareStatement("select * from user ");
        // 查询获得结果集
        ResultSet resultSet = preparedStatement.executeQuery();
        // 遍历结果集
        while (resultSet.next()) {
            ResultSetMetaData metaData = resultSet.getMetaData();
            for (int i = 1; i <= metaData.getColumnCount(); i++) {
                String columnName = metaData.getColumnName(i);
                Object object = resultSet.getObject(columnName);
                System.out.println("columnName = " + columnName + ", value = " + object);
            }
        }
        connection.close();
    }
}

/*结果为

    columnName = id, value = 1
    columnName = name, value = 张三
    columnName = id, value = 2
    columnName = name, value = 李四
    columnName = id, value = 3
    columnName = name, value = null

    */

可以看到一次查询主要经过了如下几步:

  1. 创建并配置DataSource
    • 一般来说这个实现类是由各家的厂商帮忙实现的
  2. 获取连接
  3. 准备好sql
  4. 执行sql
  5. 操作结果集

我们知道第一步仅在启动初始化阶段执行一次;第二步可以用数据库连接池来优化。

接下来我们直接上手MyBatis,按照文档来使用。

MyBatis示例

打开mybatis官网找到getting startedIntroduction里面有语言切换,有需要的可以换成中文。根据其内容简单写个demo,这就是我们最开始用的程序了。

首先在resources(也就是classpath)里面创建主配置文件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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///zdy_mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper.xml"/>
    </mappers>
</configuration>

可以看到我们需要在标签dataSource里面配置数据源相关信息,比起上面JDBC多了driver的参数,由它来给出真正的数据库驱动是什么。

注意到标签mappers,这个标签用于告诉mybatis,我们sql语句放在那里 ,那么相应的我们在resources里面创建另一个xml文件:mapper.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="myMapper">
    <select id="selectUser" resultType="com.nona.pojo.User">
    select * from user where id=#{id}
  </select>
</mapper>

这里我已经写了一个根据id查询user的sql,话不多说跟着官网的实例我们写一个demo

package com.nona.mybatis;

import com.nona.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author nona9961
 * @date 2022/1/27
 */
public class GetStartedDemo {
    public static void main(String[] args) throws IOException {
        // 读取配置文件为流
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 根据配置文件创建核心类:sqlSessionFactory;这里没有关闭resourceAsStream是因为读取完配置并解析之后,mybatis自动帮我们关闭了流
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        // try-with-resources用法,好处就是会自动帮你调用close方法关闭资源
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            // User类自己创建一下就好
            User user = sqlSession.selectOne("myMapper.selectUser", 2);
            System.out.println(user);
        }
    }
}

/*
User{id=2, name='李四'}
*/

请大家不要吐槽时间上的跨越,我也没想到下一次想起来更新居然就过了1个月了。

至此,一个简单的demo就完成了,之后我们会根据这个demo去探寻mybatis的源码

暂时搁置

发现java orm比我像的要多得多,暂时把mybatis搁置了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值