首先使用原生态的JDBC来操作数据库,从中发现存在的一些问题:

jdbc代码:

public class JdbcTest {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", "123");//定义sql语句 ?表示占位符String sql = "select * from user where username = ?";//获取预处理statementpreparedStatement = 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 blocke.printStackTrace();}}if(preparedStatement!=null){try {preparedStatement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(connection!=null){try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}  

注意代码中导入的包如下:

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

为什么导入的都是java.sql包中的接口?
原因: 这里使用mysql的jar包中实现了这些接口,如果以后更换了数据库oracle,oracle的数据库jar包也实现了这些接口。就不需要重新引入了。如果这里导入的是mysql的jar中的实现类的话,那么更换为oracle数据库之后,要重新导入oracle的jar的实现类。

上边的代码中的:

 PreparedStatement preparedStatement = null;

为什么要使用PreparedStatement而不使用Statement呢?
原因:preparedStatement是预编译的statement,
通过statement向数据库发送sql语句,然后数据库那边要对sql语句进行编译,编译完成之后把编译的结果存储到数据库端的缓存中。下次如果发送相同的sql语句的话,数据库就不需要编译了,直接将缓存中的结果取过来就可以了。这样提高了数据库的性能。

通过上边的原生版的jdbc发现的问题:

  1. 数据库连接在使用的时候就创建,使用完成之后就关闭。这就会对数据库进行频繁的连接开启和关闭,就会造成数据库的资源浪费,影响了数据库的性能。
    解决方案:使用数据库的连接池来管理数据库的连接
  2. 将sql语句硬编码(也就是把变量写死了)到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
    解决方案:可以将sql语句配置在xml的配置文件中。这样即使sql语句变化了,也不需要对java代码进行重新编译
  3. 向preparedStatement中设置参数(preparedStatement.setString(1, "王五");),对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
    解决方案:将sql语句及占位符和参数全部配置到xml文件中
  4. 从resutSet中遍历结果集数据时(
 while(resultSet.next()){System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));}

),
存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
解决方案:将查询的结果集自动映射成java对象

为什么要用Mybatis框架---Mybatis学习笔记(一)相关推荐

  1. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  2. (转)MyBatis框架的学习(六)——MyBatis整合Spring

    http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyB ...

  3. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  4. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  5. (转)MyBatis框架的学习(三)——Dao层开发方法

    http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...

  6. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图:  下面作简要概述: ...

  7. ssm 转发请求_千呼万唤!阿里内部终于把这份SSM框架技术学习笔记分享出来了...

    SSM SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项 ...

  8. php mvc 路由,PHP MVC框架路由学习笔记

    文章主要介绍了PHP MVC框架路由学习笔记的相关资料,需要的朋友可以参考下. 提到PHP开发web,自然离不开开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等... 第一篇先来 ...

  9. 轻量级HTTP客户端框架—Forest学习笔记

    轻量级HTTP客户端框架-Forest学习笔记 一.Forest 1.1 业务需求 一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信. ...

  10. 【BackEnd--SSM 框架详解】Mybatis+Spring+SpringMVC学习笔记(完整详细版)

    BackEnd 学习笔记 1 Java 2 SSM框架(Mybatis+Spring+SpringMVC) 3 SpringBoot(SpringBoot 3.x+MybatisPlus) 4 Spr ...

最新文章

  1. 简单验证码识别 tessnet2
  2. JSP中 request.getRealPath(/xx/yy) 方法提示已经过时的替代方法
  3. idea远程调试修改代码_IDEA远程调试(Remote Debug)Java代码指南
  4. linux生成的pdf文件,把LINUX MAN PAGE生成为PDF文件的脚本
  5. 百度景鲲:9月15日发布小度真无线智能耳机
  6. python视频提取关键帧_一种视频关键帧提取算法的制作方法
  7. 推荐一个Silverlight多文件(大文件)上传的开源项目(转载)
  8. 微软Azure首席架构师John Gossman就微软加入Linux基金会一事答疑
  9. 安装打印机时出现无法安装,打印处理器不存在
  10. 调用Kinect 2.0摄像头
  11. python正则查找_python正则匹配
  12. hackthebox - frolic (考点: 信息搜集 ook解密 base解密 zip 解密 xxd解密 brainfuck解密 playsms安全)
  13. 使用canvas绘制一个三角形
  14. matlab 稳定系统,matlab分析系统的稳定性
  15. codeforces 596E Wilbur and Strings
  16. org.apache.thrift.transport.TTransportException: GSS initiate failed
  17. 【svn】 如何在Linux服务器上添加svn账户的教程
  18. 大学计算机实践教程在线阅读,第一部分 实验免费阅读_大学计算机基础实践教程免费全文_百度阅读...
  19. ORA-00054资源正忙解决方法
  20. 理解有符号数和无符号数的区别。

热门文章

  1. 了解冒泡排序选择排序
  2. mysql中的类型与java_mysql与java数据类型对应关系
  3. centos ftp服务器搭建_ftp软件,ftp软件安装使用教程,利用Serv-U如何搭建ftp服务器?...
  4. js获取一周从开始到结束日期范围
  5. 让同步函数同步执行,异步函数异步执行,并且让它们具有统一的 API
  6. 控制台一直报错, [WDS] Disconnected!
  7. 【Python爬虫学习实践】基于BeautifulSoup的网站解析及数据可视化
  8. 百度地图标注图标太小
  9. apache 伪静态 .htaccess
  10. 小程序未来将有广阔的发展前景