Mybatis小结

什么是框架?

可以理解为帮助我们实现了一部分功能,优点:减少代码量,提高开发效率

为什么使用框架?

每个优秀的框架都是对底层的代码做了轻量级的封装,目的是减少代码量,提高开发效率.

  1. JAVAEE三层结构:
    Web层: struts2框架、Springmvc
    Service层(业务逻辑层): spring框架
    持久化层(dao): hibernate、mybatis框架

主流框架介绍

SSH: Struts2 + spring + hibernate
SSM: Springmvc + spring + mybatis

jdbc问题总汇

 为什么要使用预编译的preparedStatement

1,避免sql注入
2,程序代码可读性更强,比使用sql拼接方法要可读!
3、使用预编译,数据库可以减少sql编译的次数,工作原理:
sql会发送到数据库,数据库会对sql进行编译,然后会存放进数据库缓存,下次遇见相同的sql语句就可以直接拿出来使用了。
jdbc的缺点总结
1、 将sql语句在java类中硬编码,不利于系统维护。这里的硬编码主要是指sql语句的写法, String sql=””;比如:由于需求变更,需要在数据库表中添加字段,要查询该字段的内容,需要修改java类中的sql变量。
2、数据库连接频繁出现创建、关闭,会对数据库资源造成浪费
3、向statement中设置参数时需要将占位符的位置序号硬编码。
4、遍历结果resultSet时,需要手动指定字段的名字,硬编码。如果添加表字段需要遍历,需要修改java代码

什么是Mybatis (是一个不完全的orm(对象关系映射)框架。)

 MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
ORM:(对象关系映射 )一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.
ORM技术,是在对象恶和关系之间建立了一个桥粱,数据库数据和java数据互相转化

Mybatis中的xml文件等

1、SqlMapConfig.xml (mybatis-config.xml)
          mybatis全局配置文件   文件中配置了数据源(连接池 c3p0 DBCP)、事务、全局变量等…重要的配置mapper.xml是sqlMapConfig.xml需要加载很多的mapper.xml。mapper.xml主要配置了sql语句,sql语句在Mapped statement中配置。
  2、SqlSessionFactory
           会话工厂,创建SqlSession/会话(内部有一个数据库连接),使用会话操作数据库(增、删、改、查)
  3、SqlSession 
            SqlSession是一个接口,此接口是一个面向用户的接口,程序员通过调用Sqlsession操作数据库,SqlSession是线程不安全的,所以每执行一次数据库操作都需要创建一个sqlSession,Sqlsession最佳的使用场合是方法体内(就是一个局部变量),每个线程对于同一个方法有单独的内存空间。

注意事项:面向用户接口和面向底层接口
面向用户接口:平时自己定义的接口,别人拿过来直接用你的接口里面的方法和成员变量
面向底层接口:用户看不到的底层源码
4、Executor
执行器,是一个面向底层接口,SqlSession底层通过Executor操作数据库,Executor有两个基本的实现:普通执行器、缓存执行器。
5、Mapped statement
是mybatis的一个封装对象,封装了Sql 语句,输入参数(将java对象映射到sql)、输出结果(将sql结果映射到java对象。)
Executor执行器,通过Mapped statement里的内容操作数据库。

Mybatis执行过程

1、 配置SqlMapConfig.xml、配置mapper.xml(配置了sql语句)
2、 创建SqlSessionFactory,目的是要得到Sqlsession
3、通过SqlSessionFactory创建Sqlsession,可以使用Sqlsession操作数据库
(Sqlsession底层使用Executor执行器操作数据库)
4、要知道Executor按照Mapped statement中的配置信息执行过程
首先需要将java对象信息映射到sql语句中,相当输入映射。
然后将sql结果信息映射到java对象 , 输出映射。

面试小结

mybatis与hibernate的不同
hibernate:是一个标准的ORM框架
mybatis:是一个不完全的ORM框架
hibernate 上手难,不需要自己写SQL语句,SQL语句自动生成,但是对sql语句进行优化、修改比较困难。
mybatis 专注sql本身,需要程序员自己编写sql语句,sql修改、优化比较方便
hibernate 适用需求变化不多的中小型项目,比如:后台管理系统,erp,orm,oa等
mybatis 应用场景:适用需求变化较多的项目,比如:互联网项目。

#{}和${}的区别
#{}表示的是变量
${}表示的是sql拼接
#{}里面写的是基本类型的话,可以写任意
${}只能写vlaue
#{}防sql注入
不 防 s q l 注 入 不 建 议 使 用 {}不防sql注入 不建议使用 sql使{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值