Mybatis快速复习--简介篇

63 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情

MyBatis简介

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。

MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

原来的名字叫iBais

本来代码在Apache放着,后来又放到Google Code上了。然后就改名为Mybatis了~

优点

  • 很容易学,很小巧,没有第三方依赖,装两个jar包+几个sql映射文件即可
  • 灵活,因为我是学完动态sql之后才回来写的笔记,月学到后面越发现这玩意是真灵活能有很多组合呀,判断啊。然后呢,sql写在xml文件里,能方便的进行统一管理和优化。
  • 提供映射标签,支持对象与数据库的字段关系映射
  • 提供xml标签,支持动态sql就是编写一些判断语句根据实时发生的情况进行改变这就叫动态

缺点

  • 写sql 的时候工作量很大,对于很多字段的,关联了很多表的更是这样,学着学着我就有感觉这玩意也没多容易啊不想前面学的spring和springMVC这么简单,这还是要写这么多。
  • sql语句依赖于数据库,移植性差
  • 二级缓冲机制不太行

JDBC

JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据。JDBC代表Java数据库连接

JDBC操作数据库的流程

面试可能会问,背!

下面这些就很固定的步骤

  • 导入数据库驱动
  • 注册驱动
  • 获取数据库连接对象
  • 写sql
  • 预编译
  • 执行sql
  • 封装对象

JDBC连接池

获取数据库连接对象的时候太消耗资源,所以呢就出现连接池技术

我将数据库连接对象多放几个在一个池子里,你用的时候直接从池子里取不用的话在放回来。这样就不用一直连数据库了,提高了效率节省了资源

常用的连接池有Druid,C3P0

它优化后的JDBC流程为:

  1. 导入Druid的jar包
  2. 定义配置文件
  3. 通过工厂类获取数据库连接池对象
  4. 写sql
  5. 预编译
  6. 执行sql
  7. 封装结果
/**
 * 定义一个方法,查询emp表的数据将其封装为对象,然后装载集合,返回
 */

public class JdbcDemo06 {

    public static void main(String[]args){
        List<Emp> list = new JdbcDemo06().findall();
        System.out.println(list);
    }

    public List<Emp> findall() {
        Connection conn = null;
        Statement stmt = null;
        ResultSet res = null;
        ArrayList<Emp> list = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            conn = DriverManager.getConnection("jdbc:mysql:///db2", "root", "root");
            //3.定义sql
            String sql = "select * from emp";
            //4.获取执行sql对象
            stmt = conn.createStatement();
            //5.执行sql
            res = stmt.executeQuery(sql);
            //6.处理结果
            Emp emp = null;
            list = new ArrayList<>();

            while (res.next()) {
                int id = res.getInt("id");
                String ename = res.getString("ename");
                int job_id = res.getInt("job_id");

                //创建emp对象,并赋值
                emp = new Emp();
                emp.setId(id);
                emp.setEname(ename);
                emp.setJob_id(job_id);
                //装载集合
                list.add(emp);

            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (res != null) {
                try {
                    res.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

        }
    return list;
    }
}

输出结果为:
    [Emp{id=1001, ename='孙悟空', job_id=4}, Emp{id=1002, ename='卢俊义', job_id=3}, Emp{id=1003, ename='林冲', job_id=3}, Emp{id=1004, ename='唐僧', job_id=2}, Emp{id=1005, ename='李逵', job_id=4}, Emp{id=1006, ename='宋江', job_id=2}, Emp{id=1007, ename='刘备', job_id=2}, Emp{id=1008, ename='猪八戒', job_id=4}, Emp{id=1009, ename='罗贯中', job_id=1}, Emp{id=1010, ename='吴用', job_id=3}, Emp{id=1011, ename='沙僧', job_id=4}, Emp{id=1012, ename='李逵', job_id=4}, Emp{id=1013, ename='小白龙', job_id=4}, Emp{id=1014, ename='关羽', job_id=4}]


Spring JdbcTemplate

Spring JdbcTemplate(使用详解) (biancheng.net)

用原生的jdbc API进行开发太繁琐了,例如我们要手动控制数据库连接的开启,异常处理,事务处理,最后还要关闭连接释放资源。

Spring帮我们提供了一个JDBC模块,它对Jdbc API进行了封装,目的就是为了更简洁的使用JDBC API。

使用SpringJDBC,开发人员只需要定义必要的参数、指定需要执行的sql语句,即可对数据库进行访问。

至于驱动的加载、数据库连接的开启与关闭、SQL 语句的创建与执行、异常处理以及事务处理等繁杂乏味的工作,则都是由 Spring JDBC 完成的。

简单的说就是,Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。

为什么不用Spring JdbcTemplate

功能简单;

sql语句编写在java代码里;

硬编码高耦合

Hibernate?

全自动ORM框架,将jdbc的操作再次封装

只需要将一个javaBean交给它,它就能自己从数据库中取数据,全自动映射,不用自己写sql

如果要自己写sql,需要专门学习HQL

image-20220606222245430

Mybatis?!

解决了Hibernate的问题,把编写sql这一步提取出来,把sql写在配置文件中

让程序员自己写sql

image-20220606223918780

这节主要是简单了解下mybatis和jdbc,jdbctemplate他们的概念和他们之间的联系