简介

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。

环境

java环境:jdk1.7.0_65 64bit
eclipse: Luna Service Release 1 (4.4.1) 64bit
oracle:oracle11g

通过原生JDBC实例来分析存在的问题

创建一个Maven工程MyWeb添加相关jar包依赖
数据库驱动包

   <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.1.0.7.0</version>
    </dependency>

MyJdbcTest.java代码

package com.test.mybatis.jdbc;

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

/*********************************************************************************
//* Copyright (C) 2015 Pingan Haoche (PAHAOCHE). All Rights Reserved.
//*
//* Filename:      MyJdbcTest.java 
//* Revision:      1.0
//* Author:        <gao yunqi>
//* Created On:    2015年12月21日
//* Modified by:   
//* Modified On:   
//*
//* Description:   <原生jdbc测试类>
/********************************************************************************/
public class MyJdbcTest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //数据库连接
        Connection connection = null;
        //预编译的Statement,使用预编译的Statement提高数据库性能
        PreparedStatement preparedStatement = null;
        //结果 集
        ResultSet resultSet = null;

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

            //通过驱动管理类获取数据库链接
            //connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");//mysql
            connection =  DriverManager.getConnection("jdbc:oracle:thin:@172.30.150.100:1521:ORCL", "pahchydev", "pahchydev");
            //定义sql语句 ?表示占位符
            String sql = "select * from t_hy_user where login_name = ?";
            //获取预处理statement,下一次如果缓存中有该sql就会直接使用,这样可以提高性能
            preparedStatement = connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "15618252633");
            //向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //遍历查询结果集
            while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("login_name"));
            }
        } 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语句,则需要重新编译代码,不利于后期系统维护。
解决方案:将Sql语句配置在xml语句中,修改Sql语句不需要重新编译java代码。
3、向PreparedStatement中设置参数,对于占位符和参数值都是硬编码在java代码中的,不利于后期系统维护。
解决方案:将Sql语句以及占位符和参数全部配置在xml文件中。
4、从resultSet中遍历取结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于后期系统维护。
解决方案:将查询的结果集,自动映射成java对象。
鉴于以上原生jdbc中存在的问题,我们要使用第三方框架来解决以上问题,以mybatis为例

Mybatis框架

Mybatis 介绍
Mybatis 是一个持久层的框架,是apache下的顶级项目。
Mybatis 托管到googlecode下,再后来托管到github下。
Mybatis 让程序员将主要精力放在sql上,通过mybatis 提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需求的sql语句。
Mybatis 将向PreparedStatement中设置的输入参数自动的进行输入映射,将查询结果集来灵活的映射出java对象(输出映射)。
Mybatis 框架
这里写图片描述
以上就是为什么用mybatis框架已经框架的整体介绍,后续继续慢慢学习…

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐