一、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持久层框架的使用。

mybatis的入门(一)的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. mybatis快速入门(六)

    前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口 ...

  8. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  9. MyBatis基础入门《二十》动态SQL(foreach)

    MyBatis基础入门<二十>动态SQL(foreach) 1. 迭代一个集合,通常用于in条件 2. 属性 > item > index > collection : ...

  10. MyBatis基础入门《十九》动态SQL(set,trim)

    MyBatis基础入门<十九>动态SQL(set,trim) 描述: 1. 问题 : 更新用户表数据时,若某个参数为null时,会导致更新错误 2. 分析: 正确结果: 若某个参数为nul ...

随机推荐

  1. android开发环境完整搭建

    1.首先,要先下载安装包,共享一个网址,里面有非常全面的安装文件,不管是windows还是linux的,都有,网址如下:http://www.cnblogs.com/tc310/p/3938353.h ...

  2. Mysql中结果集(mysql_result)与Traversable

    对于MySQL应该也不是很陌生吧,我常常爱犯的以错误就是执行mysli_qurey()后就使用数据,忘记返回的是结果集了.而对于lSELECT,.SHOW, DESCRIBE . EXPLAINmys ...

  3. 通过MySql自动同步刷新redis

    在服务端开发过程中,一般会使用MySQL等关系型数据库作为最终的存储引擎,Redis其实也可以作为一种键值对型的数据库,但在一些实际场景中,特别是关系型结构并不适合使用Redis直接作为数据库.这俩家 ...

  4. OSG图形设备接口GraphicsContext

    1.图形设备与相机 在Camera类的成员函数中,setGraphicContext()函数的工作是设置相机对应的图形设备对象,换句话说,下面要介绍的GraphicsContext类就是图形设备对象的 ...

  5. mysql元数据查询

    截图来自<深入浅出MySQL++数据库开发.优化与管理维护+第2版+唐汉明>一书

  6. aspnetcore的那些actionresult们

    比MVC5多了n个actionresult,傻傻分不清,整理了下,妈妈再也不用担心了 https://docs.asp.net/projects/api/en/latest/autoapi/Micro ...

  7. redis内部数据结构

    redis内部数据结构,是指redis在自身的构建中,基于这些特定的内部数据结构进行的. 简单动态字符串:Simple Dynamic String 双端链表 字典:Dictonary 跳跃表:ski ...

  8. sp_helptext输出错行问题解决

    相信,大家对sp_helptext存储过程一定不陌生,它可以帮你快速获取存储过程等对象的定义.但它有一个致命的缺点就是:每行最多返回255个nvarchar类型的字符,假如有一个编写不规范的存储过程, ...

  9. CentOS7 关闭防火墙[转]

    CentOS6关闭防火墙使用以下命令, /临时关闭 service iptables stop //禁止开机启动 chkconfig iptables off CentOS7中若使用同样的命令会报错, ...

  10. 开发.NET Core NuGet包并实现CI/CD

    实际开发中我们需要对一些公共类库进行开发,并基于Jenkins进行CI/CD(CI:持续集成,CD:持续部署),其他项目通过NuGet引用.上文讲述了如何搭建本地NuGet服务器并发布NuGet包,这 ...