一、mybatis的介绍

  mybatis是Apache的一个开源项目ibatis,2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

  mybatis是一个非常优化的持久层框架。它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

  Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

二、使用JDBC操作数据库的问题

  在介绍mybatis的使用前,我们先来看一下使用JDBC操作数据库存在哪些问题,然后再介绍mybatis有哪些优势。下面通过代码演示JDBC操作数据库。

2.1 创建mysql数据库,导入测试数据

  

2.2 创建工程

  开发工具:eclipse

  JDK:1.8

2.2.1创建一个Java工程

  

2.2.2 导入mysql的数据库驱动包,我的驱动包位置如下:

在工程下面新建lib文件夹,并将mysql的驱动包放到lib文件夹下,并添加到build path 中:

上面的准备工作做完之后,下面我们开始编写代码:

2.2.4 JDBC操作数据库的步骤

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

2.2.5JDBC程序代码:

 package mybatis_study;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; public class JdbcDemo {
private static final String url = "jdbc:mysql://localhost:3306/mybatisstudy";
private static final String user = "root";
private static final String password = "root";
static Connection conn = null;
static PreparedStatement stat = null;
static ResultSet resultSet = null; public static void main(String[] args) {
try {
//加载mysql驱动
Class.forName("com.mysql.jdbc.Driver");
//获得数据库连接
conn = DriverManager.getConnection(url, user, password);
//获得statment
String sql = "select * from user where id = ?";
stat = conn.prepareStatement(sql);
//设置查询条件
stat.setString(1, "27");
//执行查询sql
resultSet = stat.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getString("id") + " " + resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(conn != null){
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(stat != null){
try {
stat.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if(resultSet != null){
try {
resultSet.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}

执行结果为:

上面使用JDBC的原始方法(未经封装)实现了查询数据库记录的操作。

三、总结JDBC操作数据库的问题

  1.数据库连接创建、释放频繁造成系统资源浪费,从而影响系统的性能,使用数据库连接池可以解决此问题。

  2.sql语句在代码中硬编码,造成代码不易维护,实际应用中sql语句的变化比较大,sql语句变动需要更改java代码。

  3.使用preparedstatement向占位符中传参数存在硬编码的问题,实际应用中,sql语句的where条件不一定,有可能变多也有可能变少,修改sql语句也需要修改代码,造成系统不易维护。

  4.对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库对象封装成pojo对象解析会比较方便。

上面是对JDBC操作数据库进行了复习,并对其进行分析,总结了JDBC操作数据库的问题,下篇文章开始介绍mybatis持久层框架的使用。

最新文章

  1. C# 4.0 新特性dynamic (待学习)
  2. 标准IO的缓冲问题
  3. MATLAB绘图与图形处理
  4. ASP.NET MVC 中将FormCollection与实体间转换方法【转】
  5. java-多线程安全问题
  6. three.js实现3D模型展示
  7. Laravel5中使用阿里大于(鱼)发送短信验证码
  8. AngularJs with Webpackv1 升級到 Webpack4
  9. (九) 主机增加打印(串口+ssh)
  10. vue + elementUi + upLoadIamge组件 上传文件到阿里云oss
  11. Junit的基础学习
  12. beego获取用户请求参数的方法
  13. cookie mapping 原理理解
  14. Django--Admin 组件
  15. IDEA配置maven(配置阿里云中央仓库)
  16. Nginx PREACCESS阶段 如何限制每个客户端的并发连接数
  17. Maven包下载不下来的情况
  18. 原生js 实现jquery addClass,removeClass
  19. 支持向量机通俗导论(SVM学习)
  20. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

热门文章

  1. line1: 1: Syntax error: word unexpected (expecting ")")
  2. Spring.net页面属性注入
  3. excel判断新增使用字典作为页面级数据库,减少io
  4. <<C++标准程序库>>中的STL简单学习笔记
  5. java.lang.NoClassDefFoundError: Could not initialize class com解决方案
  6. Git & TortoiseGit
  7. 编写高质量代码改善C#程序的157个建议——建议117:使用SSL确保通信中的数据安全
  8. Alpha冲刺(五)
  9. UVA - 12424 Answering Queries on a Tree(十棵线段树的树链剖分)
  10. Vue--axios:vue中的ajax异步请求(发送和请求数据)、vue-resource异步请求和跨域