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框架已经框架的整体介绍,后续继续慢慢学习…
- Mybatis基础知识--框架原理篇
- mybatis基础知识-2.mybatis框架
- 框架 day65 Mybatis入门(基础知识:框架原理,入门[curd],开发dao层,全局与映射配置)
- Mybatis入门篇(一)-框架原理
- mybatis框架原理
- mybatis框架原理
- mybatis框架原理
- Mybatis框架原理
- Mybatis框架原理
- mybatis框架原理
- Mybatis---框架原理
- mybatis框架及原理
- Mybatis框架基础原理
- 框架学习系列 mybatis 第二篇 mybatis的工作原理
- 【SpringMVC+mybatis】2.mybatis框架原理
- myBatis学习--myBatis框架原理理解
- Mybatis之Mybatis框架原理(2)
- MyBatis(1)框架原理
- 鸟类及动物声音辨识方法原理进展境况转自知乎
- Android5.X (三) : CardView
- Bootstrap记录点滴
- linux下获取程序当前目录绝对路径
- 给大家来个事务的使用方式
- Mybatis基础知识--框架原理篇
- 态度
- D3学习之update、enter、exit
- 无线WEP、WPA加密与解密原理
- 数据库的分页查询语句汇总
- struts <constant/>
- swift学习日志—— 结构体和类
- 如何通过jQuery获取input中的值
- jedis包括2.4.1,2.5.1等高版本的JedisPoolConfig没有maxActive属性