Mybatis 学习---基础知识

来源:互联网 发布:dm单设计软件 编辑:程序博客网 时间:2024/05/21 19:44

Mybatis 学习—基础知识

1. 原生JDBC存在的一些问题


  • jdbc 连接数据库的一般步骤


1、 加载数据库驱动

2、 创建并获取数据库链接

3、 创建jdbc statement对象

4、 设置sql语句

5、 设置sql语句中的参数(使用preparedStatement)

6、 通过statement执行sql并获取结果

7、 对sql执行结果进行解析处理

8、 释放资源(resultSet、preparedstatement、connection)
Connection connection = null;// 预编译的Statement, 使用preparedStatement能够为预先进行编译计划的执行,// 提高数据库性能,而且能够防止sql注入PreparedStatement preparedStatement = null;ResultSet resultSet = null;try {    //加载数据库驱动    Class.forName("com.mysql.jdbc.Driver");    //通过驱动管理类获取数据库链接    connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",            "root", "011152");    //定义sql语句 ?表示占位符    String sql = "select * from user where username = ?";    //获取预处理statement    preparedStatement = connection.prepareStatement(sql);    //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值    preparedStatement.setString(1, "王五");    //向数据库发出sql执行查询,查询出结果集    resultSet =  preparedStatement.executeQuery();    //遍历查询结果集    while(resultSet.next()){        System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));    }} catch (Exception e) {    e.printStackTrace();}finally{    //释放资源}


  • jdbc 连接数据库的缺点及解决方案设想

1.数据库连接使用时就连接,不使用时就释放,浪费了大量的资源,影响数据库性能

解读方案:使用数据库连接池

2.sql语句硬编码到Java代码中,一旦修改sql也需要修改Java代码,不利于维护

解决方案: sql 配置到xml中

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

设想:将sql语句及占位符号和参数全部配置在xml中。

4.从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。

设想:将查询的结果集,自动映射成java对象。

2. Mybatis 框架

Mybatis 是一个持久层的ORM的轻量级的框架,原来是Apach的开源项目,后来托管到google code,现在在github上。

让程序员将其主要精力放在sql上面,通过mybatis提供的映射方式,自由灵活生成sql语句
与hibernate不同,mybatis一般需要程序员自己写sql,比较灵活易控,而hibernate则自动生成sql

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

mybatis 与hibernate的对比

mybatis hibernate 特点 轻量级的ORM框架,需要程序员自己写sql,sql修改、优化比较方便 标准的ORM框架,提供了HQL语言,不需要程序员自己写SQL,全表映射 开发速度 简单相对容易上手,但是根据你的项目的内容来说,如果需要的查询语句比较复杂,则使用mybatis会会快些 相对掌握困难一些,如果项目是一些简单的增删查改,则项目开发会快一些 对象管理 需要维护SQL与对象,可移植性比较差 hibernate对象管理会更好一些,因为对象与底层数据库的映射关系已经建好,不需要考虑SQL语句,只需要关注对象就好,可移植性比较好 缓存 二级缓存要比hibernate差,Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置,而mybatis则在表-对象映射中进行配置,针对不同的表可以实现不同的缓存配置,可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现 hibernate 提供了二级缓存,一级缓存是Session缓存,二级缓存是SessionFactory级的缓存,分为内置缓存(SessionFactory对象的一些集合属性包含的数据,只读)和外置缓存(存放的是数据库中数据副本),它可以被所有session共享,Hibernate对查询对象有着良好的管理机制,如果在适应二级缓存查询时出现脏数据,程序会自动报错 应用场景 适用与需求变化较多的项目,比如:互联网项目 适用与需求变化不多的中小型项目,比如:后台管理系统,erp、oa

更多的一个对比可以查看博客 : https://www.cnblogs.com/inspurhaitian/p/4647485.html

Hibernate 消除了代码的映射规则(即与数据库中表的映射规则),它被分离到XML中去配置或者注解实现,而且数据库的连接也被配置在XML中,通过Session进行操作,消除了JDBC的大量代码,提高了可编程性和简洁性,而且提供了级联、缓存、映射、一对多等功能

mybatis 解决了hibernate的哪些痛点?
1. Hibernate屏蔽了SQl,是全表映射,带来性能问题,因为有时我们可能只关注表中的某些字段,例如更新修改时需要发送表中的所有字段
2. 虽然提供了HQL,但是封装了SQL,SQL修改与优化困难
3. 无法根据不同的条件组装不同SQL
4. 对于多表关联与复杂SQL查询支持差,不能支持存储过程


说明: 本文大部分内容都是跟随者传播智课的教学视频学习而来,可以看做是翻译文章,只是自己吸收之后又书写一遍,加深自己的知识理解。

原创粉丝点击