mybatis学习笔记(1)-对原生jdbc程序中的问题总结

mybatis学习笔记(1)-对原生jdbc程序中的问题总结

标签:mybatisjava


[TOC]mysql


本文总结jdbc编程的通常步骤,总结这样编程存在的问题,并附上典型地jdbc示例demogit

jdbc编程步骤

  1. 加载数据库驱动
  2. 建立并获取数据库连接
  3. 建立jdbc statement对象
  4. 设置sql语句
  5. 设置sql语句中的参数(使用preparedStatement)
  6. 经过statement执行sql并获取结果
  7. 对sql执行结果进行解析处理
  8. 释放资源(resultSet、preparedstatement、connection)

问题总结

1.数据库链接,使用时就建立,不使用当即释放,对数据库进行频繁链接开启和关闭,形成数据库资源浪费,影响数据库性能。github

设想:使用数据库链接池管理数据库链接。sql

2.将sql语句硬编码到java代码中,若是sql语句修改,须要从新编译java代码,不利于系统维护。数据库

设想:将sql语句配置在xml配置文件中,即便sql变化,不须要对java代码进行从新编译。编程

3.向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。mybatis

设想:将sql语句及占位符号和参数所有配置在xml中。性能

4.从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。学习

设想:将查询的结果集,自动映射成java对象。

参考代码

package com.iot.mybatis.jdbc;

//import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * Created by Administrator on 2016/2/21.
 */
public class JdbcTest {
    public static void main(String[] args) {
        //数据库链接
        Connection connection = null;
        //预编译的Statement,使用预编译的Statement提升数据库性能
        PreparedStatement preparedStatement = null;
        //结果集
        ResultSet resultSet = null;

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

            //经过驱动管理类获取数据库连接
            connection =  DriverManager.getConnection("jdbc:mysql://120.25.162.238:3306/mybatis001?characterEncoding=utf-8", "root", "123");
            //定义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();
                }
            }

        }

    }

}

做者@brianway更多文章:我的网站 | CSDN | oschina

相关文章
相关标签/搜索