Mybatis 简介

mybatis

jdbc存在的问题:

1.简单的通过驱动来创建数据库会存在:数据库连接时就创建,不使用就立即释放,这样反复的创建与释放会导致资源浪费的问题。可以通过使用数据库连接池来管理数据库的连接。
2.将sql语句直接写入java代码中,耦合度极高。可以通过xml配置文件将需查询的sql语句分开存放便于维护。
3.从resultSet中获取结果时,结果集的结构与字段耦合度高。可以设想将结果集转化为java对象。

为什么要使用mybatis?

mybatis是一个持久层框架,是apache下的项目。mybatis让程序员将主要精力放在sql语句上,通过mybatis提供半自动化的映射方式生成sql。mybatis可以将jdbc的Statement输出参数自动输入映射,将查询结果集灵活的输出映射成java对象。下载地址:(https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.4.5

mybatis框架

SqlMapConfig.xml是mybatis的全局配置文件,配置了数据源、事务等mybatis的运行环境。
配置映射关系(配置sql语句):mapper.xml…

SqlSessionFactory会话工厂用来创建SqlSession。
SqlSession用于操作数据库,发出CRUD的sql语句。
Executor(执行器(基本执行器、缓存执行器))SqlSession内部通过执行器操作数据库。
mapped statement是一个低层封装对象,对操作数据库存储封装,包括sql语句,输入参数,输出结果类型。

SqlSessionFactory用单例模式来实现
SqlSession是线程不安全的,所以在方法体内使用定义为局部变量使用。

原始Dao开发与映射开发优劣

1 原始dao模版开发方法有很多重复代码。效率低。
2 调用sqlSession方法时与映射文件耦合度高。
3 调用sqlSession时因为参数类型为Object,理论上可以穿入任何类型数据,安全性差。

mapper 映射:
1 编写mapper.xml映射文件
2 编写mapper.java(UserMapper)接口
3 mybatis自动生成mapper接口实现类代理对象

开发方法:
1 mapper.xml中namespace应该是mapper.java接口的全称
2 mapper.java接口的方法名应该和mapper.xml中statement的id一致
3 mapper.java接口的方法输入参数类型应该和statement中parameterType指定类型一致
4 mapper.java接口的方法中返回值类型和statement中resultType指定类型一致
以上4步开发规范可以使得接口的方法实现自动生成。
注意事项:
1 尽量使用selectList方法调用
2 方法参数只能有一个,有局限性,解决方法是用不同类型多种包装的bean来作为参数

UserQueryVo 用于多个bean对象包装映射

resultMap:
如果你查询出来的列名和bean的属性名不一致,通过定义一个resultMap对列名和bean属性名之间做一个映射关系。
1 定义一个resultMap
2 使用resultMap作为statement和bean之间的输出映射

resultMap 可以进行延迟加载 resultType无法进行延迟加载

动态SQL

1 对查询条件进行判断是否为空
2 抽取出代码块,以便于重用
3 foreach标签 向sql中传递list可以用foreach解析

延迟加载

resultMap可以通过使用association,collection实现高级映射。association,collection具备延迟加载的功能。延迟加载表示先从单张表中查询,如果不能满足需求再去关联查询,可以提高数据库性能,因为查询单表要比关联查询多张表速度快。

spring和mybatis的整合

1 需要spring通过单例的方式管理SqlSessionFactory
2 持久层的mapper都需要spring来管理
3 spring和mybatis整合自动通过SqlSessionFactory创建SqlSession

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值