mybatis入门

4 篇文章 0 订阅

mybatis入门

mybatis的下载

mybatis下载路径

mybatis介绍
    是一个优秀的持久层的框架,和关系型数据库进行交互,将数据持久化到数据中;原名ibatis,是apache的开源项目,目前被GitHub管理。
mybatis与ORM(Hibernate)框架的不同
    mybatis对jdbc的操作数据库的过程进行封装,与ORM(对象关系映射型框架)框架(Hibernate框架等)不同的是,ORM框架不需要开发者写sql语句,但是mybatis框架需要开发者自己编写sql语句。
mybatis的优点
    1、因为需要开发者自己编写sql语句,所以可以对sql语句进行相应的性能优化,使sql语句更加灵活
    2、mybatis同时也对jdbc访问数据库的过程 进行了封装,对创建connection、创建statement、手动设置参数、结果集检索等进行封装。
mybatis的核心功能
    mybatis可以通过xml或注解(不推荐)将statement进行配置,主要完成两个重要核心功能:
        a)输入映射,将java对象映射到statement中即sql语句的输入参数。
        b)输出映射,将sql语句执行的结果映射成java对象。
mybatis框架原理

这里写图片描述

1、SqlMapConfig.xml,mybatis全局配置文件,名称不固定。
    配置了:数据源、事务运行环境,最重要的是配置了mybatis运行所需要的一些配置(Mapper.xml映射文件可多个、全局运行参数、别名...)
    mybatis运行先找SqlMapConfig.xml,SqlMapConfig.xml会去找Mapper.xml映射文件
    Mapper.xml:mybatis的映射文件,配置了sql语句及sql语句输入参数类型、及sql语句结果集所映射的类型,在Mapper.xml配置文件中配置statement(支持各种statement)
2、SqlSessionFactory:会话工厂,通过SqlMapConfig.xml等配置文件构造一个会话工厂对象,要操作数据库,就要通过SqlSessionFactory创建SqlSession会话
    作用:创建SqlSession
3、SqlSession:会话,由SqlSessionFactory创建,在maybatis中操作数据库的会话接口,操作数据库的方法(CRUD)
    是一个面向用户(程序员)的接口
4、Executor:底层执行器,是一个接口,是底层操作数据库的封装对象,其实现类有基本执行器和缓存执行器两种
    SqlSessionFactory最终通过操作Executor操作数据库
5、MappedStatement:mybatis底层封装对象,封装了sql语句和输入参数类型,输出结果类型等信息

mybatis环境搭建

环境搭建

mybatis入门案例

入门案例

案例总结:

parameterType 和resultType

    parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中。
    resultType:指定输出结果类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。

selectOne和selectList

    selectOne查询一条记录,如果使用selectOne查询多条记录则抛出异常:
org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 3at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:70)

selectList可以查询一条或多条记录。

mybatis和hibernate的本质区别

mybatis:学习成本低,入门门槛低,mybatis需要程序员自己写sql,对sql修改和优化就比较灵活。
mybatis是不完全的ORM,mybatis需要程序员编写sql,但是mybatis也存在映射(输入映射、输出映射)
适用场景:需求变化较快的项目开发,比如:互联网项目、电商

hibernate:学习成本高,入门门槛高,hibernate是ORM框架,不需要程序员编写sql,自动根据对象映射生成sql。
适用场景:需求固定的中小型项目,OA系统(办公自动化系统)、ERP系统(企业资源计划)。

企业在技术选型考虑各各技术框架的特点去进行选型 。
企业要根据人力、物力等资源去衡量,以节省成本利润最大化为目标进行选型。

mybatis开发原始dao方法

开发原始dao案例

  • 通过上述案例所发现的问题

1.dao接口实现类方法中存在大量的重复代码,这些重复的代码就是模板代码。

  • 模板代码:
    • 先创建sqlsession
    • 再调用sqlsession的方法
    • 再提交sqlsession
    • 再关闭sqlsession

2.在调用sqlSession的方法时存在硬编码
调用sqlsession方法第一个参数是statement的id就是硬编码(下图中框中的内容)
这里写图片描述

mapper代理开发方法

程序员只需要编写dao接口(即mapper接口),由mybatis 框架自动生成接口实现的代理对象
代理开发实现

SqlMapConfig.xml配置文件

SqlMapconfig.xml是mybatis的全局配置文件,mybatis通过它创建SqlSessionFactory。

  • 配置内容:
    • properties(属性)
    • settings(全局配置参数)
    • typeAliases(类型别名)
    • typeHandlers(类型处理器)
    • objectFactory(对象工厂)
    • plugins(插件)
    • environments(环境集合属性对象)
    • environment(环境子属性对象)
    • transactionManager(事务管理)
    • dataSource(数据源)
    • mappers(映射器)
  • 属性properties
    属性
  • 全局配置参数settings
    全局配置参数
  • 类型别名typeAliases(重点)
    mybatis提供别名的定义,在mapper.xml中,指定输入参数类的全限定名不太方便,就可以定义一个别名代表参数类的全限定名。
    类型别名
    这里写图片描述
  • mapper配置(重点)
    这里写图片描述
    常用包扫描

输入映射

输入映射的案例

输出映射

resultType和resultMap介绍

  • resultType:
    指定输出映射类型,包括:java简单类型 string/int/float…、包括自定义的pojo。

    如果指定自定义pojo,表示单条记录所映射pojo类型。
    映射规则要求:sql查询列名和pojo的属性名一致方可映射成功。

    通过测试发现:当所有列名和pojo属性名不一致,映射的对象为null
    只要有一个 列名和pojo属性名一致,映射的对象不为null。
    重点掌握:只要一个列名和一个属性名一致,该列就可以映射成功。

  • resultMap
    当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射。

resultType案例

案例
- 总结
输出pojo对象和输出pojo列表在sql中定义的resultType是一样的。
返回单个pojo对象要保证sql查询出来的结果集为单条,内部使用session.selectOne方法调用,mapper接口使用pojo对象作为方法返回值。

返回pojo列表表示查询出来的结果集可能为多条,内部使用session.selectList方法,mapper接口使用List对象作为方法返回值。

resultMap案例

当列名和pojo属性名不一致时,可以通过resultMap定义列名和属性名的一个对应关系,完成映射。
resultMap还可以实现一些高级映射(一对一、一对多。)。
案例

动态sql

  • 什么是动态sql

    mybatis重点是对sql语句是灵活的组织,由程序员编写sql语句,通过配置方式完成输入、输出映射。
    mybatis通过标签拼接sql语句,去组织sql 语句。
    

    案例实现

关联查询(resultType和resultMap)

mybatis实现表与表之间的查询,将查询结果集进行映射,重点resultMap完成高级映射,了解resultMap的使用方法。
案例实现
- 总结

    如果没有特殊的要求,使用resultType是比较方便,只要能够保证sql查询的列和pojo属性名一致可以映射成功,如果pojo中属性少了,添加属性即可。

特殊的要求:
    如果需要将关联查询的信息映射到pojo的pojo属性中, 为了获取数据方便,可以使用resultMap。
    如果使用延迟加载,只能使用resultMap。

博主正在努力更新,敬请期待~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值