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对象。(输出映射)


相关文章
|
4月前
|
SQL Java 数据库连接
|
2天前
|
SQL Java 数据库连接
MyBatis-Plus详细介绍
MyBatis-Plus是基于MyBatis框架的增强工具,致力于简化MyBatis的开发。它提供了一系列的增强功能,包括代码生成器、分页查询、性能分析等,大大提高了开发效率。
6 0
|
SQL Java 数据库连接
Mybatis之discriminator(鉴别器)详解
前言 最近干了一个工作是使用discriminator去写一个新的API,那么写这个新的API原因是什么呢?原因是这样的:我们的项目使用Mybatis,我们项目中有一个实体类叫做User,在User中还含有很多别的实体类,例如Role,Permission,Address等(有经验的肯定知道这种嵌套实体类的情况,使用和)。
3889 0
|
7月前
|
XML Java 数据库连接
|
4月前
|
Java 数据库连接 测试技术
mybatis中@Many
mybatis中@Many
31 0
|
4月前
|
Java 数据库连接 数据库
Mybatis及Mybatis-Plus使用
Mybatis及Mybatis-Plus使用
609 2
Mybatis及Mybatis-Plus使用
|
6月前
|
SQL Java 数据库连接
14MyBatis - MyBatis介绍
14MyBatis - MyBatis介绍
21 0
|
7月前
|
XML Java 数据库连接
MyBatis-Plus使用
MyBatis-Plus使用
|
SQL XML 存储