MyBatis源码系列2(简易版MyBatis)

通过上一篇分析可知,可以访问数据库繁琐步骤封装为两部分完成。
步骤1、使用数据库连接池完成数据库的连接;
步骤2、封装一个“方法”,入参为脚本,出参为“目标”数据。
通过步骤2可以看出,脚本是与“目标数据”绑定在一起的,如何完成这种绑定 ? 方法很多:
方案1:建立一个实体,保存方法和返回值对象
方案2:在方法上使用注解
方案3:使用配置文件(xml、properties等)

本案例使用注解进行(选择注解的原因:在执行步骤2的时候,核心是执行脚本,执行脚本之前需要对参数进行处理,执行完成之后需要进行结果处理,符合动态代理设计模式)。

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();
        }
    }
}

在这里插入图片描述
下一节,正式阅读mybatis源码。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值