MyBatis学习(一)-- 为什么要使用MyBatis

MyBatis学习(一)– 为什么要使用MyBatis

标签(空格分隔): MyBatis学习


  • 程序例子
  • 问题总结
之前使用JDBC作为数据库持久层,一般需要以下几个步骤:
 1. 加载数据库驱动
 2. 创建并获得数据库连接(设置连接地址、用户名密码)
 3. 创建jdbc statement对象
 4. 设置sql语句
 5. 设置sql语句中的参数(使用preparedStatement)
 6. 通过statement执行sql并获得结果
 7. 对sql执行结果并解析处理
 8. 释放资源(关闭连接)

代码实例如下:

public static void main(String[] args) {
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    try {
        // 加载数据库驱动
        Class.forName("com.mysql.jdbc.Driver");

        // 通过驱动管理类获取数据库链接
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
                "root", "mysql");
        // 定义sql语句 ?表示占位符
        String sql = "select * from user where username = ?";
        // 获取预处理statement
        preparedStatement = connection.prepareStatement(sql);
        // 设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
        preparedStatement.setString(1, "王五");
        // 向数据库发出sql执行查询,查询出结果集
        resultSet = preparedStatement.executeQuery();
        // 遍历查询结果集
        while (resultSet.next()) {
            System.out.println(resultSet.getString("id") + "  " + resultSet.getString("username"));
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        // 释放资源
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

}

针对上面的代码,总结如下问题:

  1. 创建数据库连接、释放资源频繁造成数据库资源的浪费,创建和关闭连接影响性能—-解决方案:采用数据库连接池
  2. 将sql硬编码在java代码中,如果sql语句修改需要重新编译java代码,不利于系统的维护 —-解决设想:将sql语句配置在配置文件中,即使sql变化不需要重新编译java代码
  3. 在prepareStatement中设置参数,对占位符位置和设置参数值硬编码在java代码中,不利于后期系统维护—解决设想:将sql语句及占位符全部配置在sql文件中
  4. 在遍历结果集时,将获取表的字段进行硬编码,不利于后期系统维护 —解决设想:将查询的结果集自动映射成java的pojo对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值