Mybatis自学笔记

MyBatis   学习笔记第一天


      MyBatis底层也是封装的JDBC

      Apache出品

     Mybatis和Hibernate应用场景不同,都需要学

MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。


     1、Mybatis的介绍

     2、Mybatis的入门

          a)使用jdbc操作数据库存在的问题

          b)Mybatis的架构

          c)Mybatis的入门程序

     3、Dao的开发方法

           原始dao的开发方法

           动态代理

      4、Mybatis核心配置文件

 

补充

  •    pojo:不按MVC分层,只是Java Bean有一些属性,还有get  set 方法
  •    domain :不按MVC分层,只是Java Bean有一些属性,还有get  set 方法
  •    po:用在持久层,还可以再增加或者修改的时候,从页面直接传入action 中,他里面的Java bean类名等于表名,属性名等于表的字段名,还有对应的get  set方法,
  •    vo:全称,表现层对象,主要用于从页面传过来的各种参数,好处是扩展性强
  •    bo:用在service层,现在企业基本不用

这些po  vo   bo   pojo可以用在各种层面吗?

    语法不报错,po用在表现层,vo用在持久层不报错,因为都是普通的Java  bean

     但是在企业最好不要混着用,因为这些都是设计的原则,混着用比较乱,不利于代码维护

       vo一定要用在表现层

 

  1. jdbc问题总结如下:

  1. 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

  2. Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

  3. 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

  4. 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。

Hibernate比较重,SQL都不用写了

Mybatis需要我们去写sql

 

mybatis核心配置文件SqlMapConfig.xml,作用是我们通过会话工厂SqlSessionFac tory加载核心配置文件里面的内容,通过核心配置内容来创建会话sqlSession,拿到会话可以用会话对象.会话里面的方法(增删改查),它去调用映射文件mapper.xml里面的sql语句来执行SQL。在mybatis内部有个执行器Executor这个对象,在mybatis内部还有内部封装对象Mapped Statement,作用是将映射里面的sql语句输入参数类型、返回结果集类型封装成Java对象,输入参数类型也叫输入映射可以有map、基本类型、pojo。返回结果集类型map、基本类型、pojo、list。

  1. mybatis配置

   SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

   mapper.xml文 件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

  1. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

  2. 会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

  3. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

  4. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

  5. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数

  6. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。


步骤 

   第一步:导包

          

        我们需要导入核心包和依赖包。。。。。。。所有的包都不许替换的

第二步:创建核心配置文件SqlMapConfig.xml

            

第三步:

#{}和${}区别

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

 

动态代理Dao实现方法——mybatis特有的写起来非常爽,只写接口,不写实现类,mybatis自动生成

主要就是写接口我们要注意四点要求

测试一下,我们的接口

到这开始运行的话

运行出错,是因为我们没有把映射文件写入核心类

Mybatis加载Mapper配置的四种方式,下面用了三种

使用包扫描的方式引入

       


核心配置文件

mybatis支持别名

别名

映射的类型

_byte

byte

_long

long

_short

short

_int

int

_integer

int

_double

double

_float

float

_boolean

boolean

string

String

byte

Byte

long

Long

short

Short

int

Integer

integer

Integer

double

Double

float

Float

boolean

Boolean

date

Date

decimal

BigDecimal

bigdecimal

BigDecimal

map

Map

 

也可以自定义别名

总结

     1、首先介绍mybatis是什么?

          mybatis是持久层框架,跟数据库交互完成增删改查。

  •  jdbc频繁创建释放资源      mybatis用连接池,

  • jdbc把传参、sql,解析结果集都写死了,在我们mybatis映射文件中很好的解决了,传参、sql、结果集都在里面,完美解决了jdbc缺陷

  2、元素Dao实现(需要接口和实现类) 

  3、代理方式(只需要接口)

           规则:

       mapper接口代理实现的编写规则

      1、映射文件中namespace要等于接口的全路径

      2、映射文件中SQL语句id要等于接口方法名称

      3、映射文件中传入参数类型要等于接口方法的传入参数类型

      4、映射文件中返回结果集类型要等于接口方法的返回值类型

4、#{}占位符,占位

                       如果传入的是基本类型,那么#{}中变量名称可以随意些

                       如果传入的参数是pojo类型,那么#{}的名称必须是属性.属性.属性

 

5、${}拼接符、字符串原样输出

                       如果传入的是基本类型,变量名必须是value,

                      如果传入的参数是pojo类型,那么#{}的名称必须是属性.属性.属性

                       注意:使用拼接符,有可能造成sql注入,在页面输入的时候可以加入校验,不可输入SQL关键字,不许输入空格

6、映射文件中

                   传入参数,通过parameterType指定

                   输出结果集类型通过resoultType指定

7、Hibernate和mybatis区别

            Hibernate是一个标准的orm框架,比较重量级,学习成本高

                           优点:高度封装,不用写sql,开发时时间短,会减少开发周期

                           缺点:sql语句自动生成无法优化

                           应用场景,OA(办公自动化系统)、   erp(企业流程系统)  、政府项目

                                    用户量不大,并发量小的系统

            mybatis   不是一个orm框架,是对jdbc一个轻量级封装,学习成本比较简单

                           优点:学习成本低,sql语句可以优化,执行效率高,速度快

                           缺点 :,编码量较大,会拖慢开发周期

                           应用场景:互联网开发项目,比如电商,p2p  总的来说用户量大,并发高的项目

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值