A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

快速了玩转MybatisMybatis是什么?
是JDBC封装的持久层框架,是apache旗下一个顶级项目
Mybatissql集中进行维护,利于sql语句优化,适合与需求变化快的项目。
Mybatis架构
基础支持层:数据源,事务管理,缓存处理。
数据处理层:接受参数,处理参数,查询结构映射。
接口层mybatis提供接口给程序员使用。
Mybatis执行流程

Mybatis:
l JDBC频繁开启连接和关闭连接,造成的资源浪费。
l 解决JDBC对sql语句的硬编码,sql直接写在java代码。Sql语句分散,不易维护。
l 解决JDBC对输入参数只能安装顺序进行传入
l 解决JDBC查询结构进行循环映射javabean
Mybatis入门创建java工程

导入 jar文件

Mysql驱动:


创建mybatis全局配置文件

Mybatis的映射文件


创建javabean

测试代码

Mybatis的入门程序根据ID进行查询用户映射文件

测试代码

根据用户名进行模糊查询映射文件

测试代码


删除
映射文件

测试代码

更新
映射文件
测试代码
添加映射文件

测试代码

自增返回主键
第一种
]

第二种



Uuid返回主键

Oracle返回主键

总结ParameterTYpe
l 基本类型:int ,long,float,string等等
l PojoUser对象,包装类型对象。
l Map
ResultType
l 基本类型:int ,long,float,string等等
l Pojojavabean对象
#{}${}
#{}:占位符
           如果传递参数是基本类型,括号里面可以是任意值。
           如果pojo对象,使用ognl表达式进行获取
           如果传递参数是字符:自动加引号。
           如果传递参数是非字符:原样获取
${}:sql拼接
          如果传递参数是基本类型,括号里面只能value.
          如果pojo对象,使用ognl表达式进行获取
          无论传递是字符还是非字符都是原样获取
SelectOneselectList
这是mybatis的底层调用方法,不能使用selectOne查询selectList
Mybatishibernate
Hibernate优点:
        Hibernate是一个完全ORM框架。完全面向对象的,不需要自己写hql语句。
        Hibernate进行数据库移植比较方便,不需要改写代码,只需要改写方言。
Hibernate缺点:
        由于hibernate使用面向对象开发,使用hql语句,不能开发业务特别复杂的项目。
        Hibernate会对hql语句进行翻译,翻译成sql语句进行执行
        Hibernate对维护的关系比较复杂。
        Hibernate生成sql语句格式比较复杂不利于优化sql语句。
Mybatis
        MybatisJDBC封装的一个轻量级框架。他只需要我们关系sql语句,不需要关系太多业务。有利于sql语句优化。提高性能。
Mybatisdao开发普通dao开发方式
自己定义接口,自己写接口实现类。
工程结构

定义接口

定义实现类

测试

接口开发方式
只需要定义接口
普通接口开发模式:
l 接口方法名和映射文件的StatementID必须一致。
l Namespace必须是接口的全类路径名
l 输入参数类型必须和Statement参数类型一致
l Statement的返回值类型必须和接口的返回值类型一致。
定义接口


测试


SqlMapConfig配置内容
SqlMapConfig.xml中配置的内容和顺序如下:
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
properties
引入外部资源:引入外部的properties文件可以引入JDBC.properties
typeAliases(定义别名)定义单个别名

映射文件使用别名改写

批量定义别名Mybatis默认支持别名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

typeHandlers(类型处理器)
通常mybatistypeHandlers完成jdbc类型和Java类型的转换
通常情况下,mybatis提供的类型处理器满足日常的需求,不需要自定义
mybatis支持类型处理器:
类型处理器
Java类型
JDBC类型
BooleanTypeHandler
Booleanboolean
任何兼容的布尔值
ByteTypeHandler
Bytebyte
任何兼容的数字或字节类型
ShortTypeHandler
Shortshort
任何兼容的数字或短整型
IntegerTypeHandler
Integerint
任何兼容的数字和整型
LongTypeHandler
Longlong
任何兼容的数字或长整型
FloatTypeHandler
Floatfloat
任何兼容的数字或单精度浮点型
DoubleTypeHandler
Doubledouble
任何兼容的数字或双精度浮点型
BigDecimalTypeHandler
BigDecimal
任何兼容的数字或十进制小数类型
StringTypeHandler
String
CHARVARCHAR类型
ClobTypeHandler
String
CLOBLONGVARCHAR类型
NStringTypeHandler
String
NVARCHARNCHAR类型
NClobTypeHandler
String
NCLOB类型
ByteArrayTypeHandler
byte[]
任何兼容的字节流类型
BlobTypeHandler
byte[]
BLOBLONGVARBINARY类型
DateTypeHandler
Datejava.util
TIMESTAMP类型
DateOnlyTypeHandler
Datejava.util
DATE类型
TimeOnlyTypeHandler
Datejava.util
TIME类型
SqlTimestampTypeHandler
Timestampjava.sql
TIMESTAMP类型
SqlDateTypeHandler
Datejava.sql
DATE类型
SqlTimeTypeHandler
Timejava.sql
TIME类型
ObjectTypeHandler
任意
其他或未指定类型
EnumTypeHandler
Enumeration类型
VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。
mappers(映射器)引入映射文件第一方式
<mapper resource=”Mapper.xml映射文件的路径




第二种引入映射文件方式(只针对接口开发)
开发规范
l 映射文件必须和接口同名,且在同一个目录
l 接口方法名必须和StatementID相同
l 映射文件的namespace名称必须是接口的全类路径名
l Statement的输入参数必须和接口的参数类型一致
l Statement的输出参数必须和接口的返回值类型一致。Mybatis底层是根据接口返回值类型来绝是调用selectOne还是selectList
扫描单个接口:
<mapper class=”接口路径”/>
检测开发规范
第三种扫描映射文件


ParameterType传递基本类型参数
传递javabean


传递包装类型pojo
需求业务比较复杂,传递参数比较多。使用包装类型传递参数
查询用户性别为男并且姓张的用户
包装类


映射文件


测试代码

传递Map类型参数

测试代码


resultType
注意ResultType返回值类型的属性名必须和数据库列名相同。如果相同,查询数据就映射不到javabean对象。
基本类型
需求查询用户性别为男,并姓张用户总记录数(int)
Pojo
ResultMap(返回map)
需求
Sql映射:
SELECT id _id,username _username FROM USER
定义ResultMap

查询语句

测试代码


动态sql
Mybatis可以在映射文件中自由判断参数为null或者为空串,不参与sql语句拼接。
需求:分页映射文件

测试代码

Sql片段
公共的sql片段抽取出去
映射文件

引入sql片段


测试代码

Foreach
SELECT * FROM USER WHERE id =12 OR id=34 OR id=49
SELECT * FROM USER WHERE id IN (12,34,49)
OR传递集合QueryVo定义集合变量

映射文件


测试代码

传递数组

IN映射文件


测试代码

单独传递集合或者数组传递集合

传递数组

%

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马