mybtais-为什么使用mybatis

一、JDBC编程有哪些问题

方法是向blog表中查询一条数据
 @Test
    public void testJdbc() throws IOException {
        Connection conn = null;
        Statement stmt = null;
        Blog blog = new Blog();
        try {
            // 注册 JDBC 驱动
            // Class.forName("com.mysql.jdbc.Driver");
            // 打开连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/gp-mybatis", "root", "123456");

            // 执行查询
            stmt = conn.createStatement();
            String sql = "SELECT bid, name, author_id FROM blog where bid = 1";
            ResultSet rs = stmt.executeQuery(sql);

            // 获取结果集
            while (rs.next()) {
                Integer bid = rs.getInt("bid");
                String name = rs.getString("name");
                Integer authorId = rs.getInt("author_id");
                blog.setAuthorId(authorId);
                blog.setBid(bid);
                blog.setName(name);
            }
            System.out.println(blog);

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (stmt != null) stmt.close();
            } catch (SQLException se2) {
            }
            try {
                if (conn != null) conn.close();
            } catch (SQLException se) {
                se.printStackTrace();
            }
        }
    }
问题
  • 当我们要对数据库做操作,会有大量对重复代码
  • 资源的管理,需要我们手动创建和关闭资源
  • 结果集需要一个个的获取设置
  • java 代码和sql 耦合,硬编码

二、dbUtils解决哪些问题

jdbc产生的问题,促使2003年apache开发了一个dbutils(感兴趣可以去了解一下)我们看下dbutls的写法

 String sql = "select * from blog where bid = ? ";
        Object[] params = new Object[]{bid};
        BlogDto blogDto = queryRunner.query(sql, new BeanHandler<>(BlogDto.class), params);
        return blogDto;

它使用queryRunner来做查询,我们是通过传入数据用new创建它

QueryRunner queryRunner = new QueryRunner(dataSource);
  • 1.我们发现代码减少了,不需要重复代码
  • 2.不需要我们手动的管理资源
  • 3.通过 beanHander 传入泛型,可以直接返回我们想要的对象(实际还有很多的处理器,出处理成list map等)

问题

  • java和sql还是存在耦合
  • 参数的设置需要参照“?” 占位符顺序参入,不够灵活,比如不能传入对象等
  • 性能不够好,没有缓存等机制

三、mybaits解决了哪些问题

其实mybatis 就解决了上面的问题.

  • 1.java 代码 和sql 是解耦的,sql 都是写在配置文件当中
  • 2.不需要手动的管理资源
  • 3.绑定了双向的映射关系,参数可以传入对象,返回结果可以是一个对象.
  • 4.提供了一级缓存和二级缓存来提升我们查询的性能

mybatis的使用我们就不展开了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值