MyBatis源码系列1(使用JDBC查询数据)

使用原生jdbc进行查询数据步骤.
  • 1、加载驱动
  • 2、获取数据库连接
  • 3、创建Statement对象
  • 4、占位符赋值
  • 5、执行脚本
  • 6、解析结果
  • 7、关闭资源
    代码示例
java 复制代码
public class T0 {

    public static void main(String[] args) throws Exception {

        String sql = "SELECT id,name FROM goods WHERE id = ?";
        List<Object> params = new ArrayList<>(1);
        params.add(1);

        new T0().jdbcForSql(sql, params);

    }

    public void jdbcForSql(String sql, List<Object> params) throws Exception {

        //从配置文件中读取配置信息
        Properties pro = new Properties();
        pro.load(Resources.getResourceAsStream("database.properties"));
        String driver = pro.get("db.driver").toString();
        String userName = pro.getProperty("db.username").toString();
        String pwd = pro.getProperty("db.password").toString();
        String url = pro.getProperty("db.url").toString();

        //加载驱动
        Class.forName(driver);

        //创建数据库链接
        Connection connection = DriverManager.getConnection(url, userName, pwd);

        //创建Statement对象
        PreparedStatement preparedStatement = connection.prepareStatement(sql);


        //给占位符赋值
        for (int i = 0; i < params.size(); i++) {
            preparedStatement.setObject(i + 1, params.get(i));
        }

        //执行脚本
        ResultSet resultSet = preparedStatement.executeQuery();

        //结果解析
        while (resultSet.next()) {
            System.out.println(resultSet.getString("name"));
        }

        //关闭资源
        if (resultSet != null) {
            resultSet.close();
        }

        if (null != preparedStatement) {
            preparedStatement.close();
        }

        if (connection != null) {
            connection.close();
        }

    }
}

从上面代码中可以看出明显的缺点:

1、每与数据库交互一次,都要执行一遍上面的流程,流程繁琐,

2、脚本与业务代码强耦合,不利于复用和维护。

优化思路:

  • 1、步骤1、步骤2 可以引入数据库连接池解决。
  • 2、步骤3~步骤7可以封装,唯一不同的是执行脚本不同(传递参数),返回值不同反射解决(查询操作)。

步骤3~步骤7中,核心是执行脚本,执行脚本之前需要给脚本动态赋值,脚本执行以后需要对结果进行解析,正好对应代理模式(动态代理)。

基于以上分析,可以将查询数据库的操作简化为两步:

1、从数据库连接池中获取数据库连接;

2、传入脚本获取结果。

下一篇基于 动态代理+注解 实现简易版的MyBatis。

相关推荐
干到60岁退休的码农7 小时前
13.构建登录接口响应数据
java·spring boot·mybatis
SQL-First布道者1 天前
我为什么把 MyBatis 从项目中删了?
java·spring·tomcat·mybatis·mybatis plus·spring jdbc
爱折腾的编程老炮1 天前
潮玩品牌自建抽盒机小程序——商城 + 抽盒 + 一番赏 + 会员 + 社区,一套代码怎么搭
spring boot·小程序·vue·mybatis·uniapp
kakawzw1 天前
mybatis源码笔记1——JDBC和整体架构
java·mybatis
Java小白笔记2 天前
MySQL 8.0 常用内置函数用例
数据库·mysql·mybatis
勿忘,瞬间2 天前
Mybatis高阶
java·数据库·mybatis
大梦想家a2 天前
新能源汽车共享充电桩收费管理系统的设计与实现(SpringBoot+MyBatis-Plus+Vue,前后台分离完整源码)
spring boot·汽车·mybatis
计算机学姐2 天前
基于SpringBoot的高校爱心慈善管理系统
java·vue.js·spring boot·后端·spring·tomcat·mybatis
大梦想家a2 天前
基于 Spring Boot 的物流运单管理系统后端设计与实现(JWT + MyBatis-Plus + MySQL)
spring boot·mysql·mybatis
摇滚侠3 天前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis MyBatis 简单开发 阅读笔记 39
spring boot·笔记·mybatis