MyBatis的简单了解(一)上

简介: MyBatis的简单了解(一)

一. JDBC 形式的缺点


MyBatis 是数据持久层的操作,是对数据库的处理, 在介绍它之前,先来了解一下,原来的jdbc 的处理,有哪些缺点,然后看看MyBatis 是如何进行改变的。


先来简单写一个User 类,只有id,name,age,sex,description 五个简单的字段,是简单的pojo 类。 对其进行简单的查询操作:


一.二 JDBC类


package com.yjl.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
 @author:yuejl
 @date: 2019年6月15日 上午11:53:34
 @Description 类的相关描述
*/
public class DBUtils {
  public static Connection getConnection(){
    Connection connection=null;
    try {
      Class.forName("com.mysql.jdbc.Driver");
      connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8", 
          "root","abc123");
    } catch (Exception e) {
      // TODO 自动生成的 catch 块
      e.printStackTrace();
    }
    return connection;
  }
  public static void close(ResultSet resultSet,Statement statement,Connection connection){
    if(resultSet!=null){
      try {
        resultSet.close();
      } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
      }
    }
    if(statement!=null){
      try {
        statement.close();
      } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
      }
    }
    if(connection!=null){
      try {
        connection.close();
      } catch (SQLException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
      }
    }
  }
}


一.三 根据id 编号进行查询的方法


@Test
  public void oldTest() throws SQLException{
    Connection connection=DBUtils.getConnection();
    String sql="select * from user where id=?";
    PreparedStatement statement=connection.prepareStatement(sql);
    statement.setInt(1, 1);
    ResultSet resultSet=statement.executeQuery();
    User user=null;
    while(resultSet.next()){
      user=new User();
      user.setId(resultSet.getInt("id"));
      user.setName(resultSet.getString("name"));
      user.setAge(resultSet.getInt("age"));
      user.setSex(resultSet.getString("sex"));
      user.setDescription(resultSet.getString("description"));
    }
    DBUtils.close(resultSet,statement,connection);
    System.out.println(user);
  }


运行之后,会显示:


20190528191939237.png


仔细观察,会发现这种写法,有很多的不足之处。


一.四 原始JDBC 开发的不足


  1. 数据库的连接。 数据库在使用时被创建,不使用就释放, 对数据库进行频繁的连接开启和关闭,造成数据库资源浪费,影响数据库的性能。
  2. 数据库信息被硬编码。


connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8", 
          "root","abc123");


数据库的连接信息被硬编码到连接数据库类中,如果更换数据库,则需要改变相应的信息,重新编码。即使可以写在 jdbc.properties 等配置文件里面,那么还需要写一个单独的读取 jdbc.properties 文件信息的类。


  1. sql 语句被硬编码


String sql="select * from user where id=?";


如果sql 被修改, 实际开发中,是常常被修改的, 那么就必须重新编译,不利用系统维护。


4.向PreparedStatement 设置值时,对参数的位置 和值,硬编码到程序里面。 不利于系统维护。 如 设置 ? 时,id 放在了第一位, 如果有name, name放在了第二位, 那么在传参的时候,必须把id 放在第一个,name 放在第二个。


statement.setInt(1, 1);


  1. 遍历结果集数据时, 将获取表的字段值,进行了硬编码。不利用系统维护。


      user=new User();
      user.setId(resultSet.getInt("id"));
      user.setName(resultSet.getString("name"));
      user.setAge(resultSet.getInt("age"));
      user.setSex(resultSet.getString("sex"));
      user.setDescription(resultSet.getString("description"));


如,如果修改了数据库的字段,description, 现在要改成desc, 那么就都得改变,列名硬编码到程序中。 当然,可以通过 getInt(1),getString(2) 这样的索引顺序来取得,那么列名就不硬编码了,但是 索引顺序就硬编码了。 改变sql 前后值的顺序,就有可能出错。


6.某些功能无法实现。


如 根据传过来的值,来动态的显示列。 即 前台传入列的名称,来动态的显示 列。 前台传入name 和sex, 就查询name 和sex 列, 前台传入name,sex,age 就动态查询name,sex,age 列。


二. MyBatis

二.一 MyBatis 的出现

在MyBatis 之前,是叫 ibatis, 是Apache 组织的开发的。 现在交由github 管理了。 还有一种 持久化ORM ,叫Hibernate. 前面讲过。 可以看:

Hibernate开发环境的简单搭建及常见错误(一)

将Hibernate 与 MyBatis 进行比较性 开发。


MyBatis 的下载网址是:

https://github.com/mybatis/mybatis-3


20190615133444355.png


下载之后:


20190615133524181.png


其中, mybatis-3.4.5.jar 是开发的jar 包, mybatis-3.4.5.pdf 是帮助文档, lib 是常用的关联jar 包。


20190615133649890.png


二.二 MyBatis 的作用

mybatis是一个持久层的框架,是apache下的顶级项目。


mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。


mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)


相关文章
|
Java 数据库连接 mybatis
|
XML Java 数据库连接
|
3月前
|
SQL 缓存 Java
Mybatis知识
Mybatis知识
45 0
|
6月前
|
算法 Java 数据库连接
MyBatis-Plus详解(2)
MyBatis-Plus详解(2)
46 0
|
SQL 安全 Java
Mybatis
参数传递 单个普通参数:Mybatis可以直接使用这个值,取值#{ },不会对它进行处理 多个参数:任意多个参数,都会被Mybatis封装成一个Map传入,map的key时param1,param2,或者0.1.2.......,就是参数的值
60 1
|
SQL Java 关系型数据库
mybatis plus很好,但是我被它坑了!
作者今天在开发一个后台发送消息的功能时,由于需要给多个用户发送消息,于是使用了 mybatis plus 提供的 saveBatch() 方法,在测试环境测试通过上预发布后,测试反应发送消息接口很慢得等 5、6 秒,于是我就登录预发布环境查看执行日志,发现是 mybatis plus 提供的 saveBatch() 方法执行很慢导致,于是也就有了本篇文章。
74 1
|
SQL Java 数据库连接
14MyBatis - MyBatis介绍
14MyBatis - MyBatis介绍
47 0
|
SQL XML 缓存
了解mybatis
了解mybatis
71 0
|
Java 数据库连接 mybatis
Mybatis小技巧
Mybatis小技巧
77 0
|
算法 Java 关系型数据库
MyBatis-Plus基本的使用
MyBatis-Plus基本的使用

热门文章

最新文章

下一篇
开通oss服务