Mybatis基础知识--框架原理篇

来源:互联网 发布:吉利知豆d1和d2的区别 编辑:程序博客网 时间:2024/05/21 18:35

简介

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框架已经框架的整体介绍,后续继续慢慢学习…

0 0
原创粉丝点击