创建mybatis工程
- 配置mybatis的运行环境,数据源,事务等(sqlMapConfig.xml)
- 创建PO类
- 创建mapper映射文件、接口(名称一致,在同一个目录下)
- 在sqlMapConfig.xml中加载mapper映射文件
- 编写程序
#{}: 占位符 参数类型:简单类型 pojo hashmap
如果是简单类型,可以写成value
如果接收pojo对象值,需要写pojo里面对应的属性名 属性.属性…
${}: 拼接符号,会引起sql注入
参数类型:简单类型 pojo hashmap
如果接收简单类型,{}中只能写成value
如果接收pojo对象值,需要写pojo里面对应的属性名 属性.属性…
SelectOne selectList
SqlSession 线程不安全
最好的应用场景,定义在方法体里,定义成局部变量
Mapper代理开发规范
- mapper.xml中namespace等于mapper接口地址
- mapper.java接口文件中的方法名和mapper.xml中的statemet的 id一致
- 接口中方法输入参数类型和xml中statement中的parameterType指定的类型一致
- 接口中的方法返回值类型和xml中statement中的resultType指定的类型一致
用户综合查询(传入一些复杂条件操作方法)
Mybatis全局配置文件 sqlMapConfig.xml ,配置信息如下
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
一、properties 属性配置
需求:
把 数据库连接参数单独放在 jdbc.properties文件中,在sqlmapconfig.xml中加载jdbc.properties属性值,就不用再sqlmapconfig.xml中对数据库连接参数硬编码
其他xml文件也可以同时引用jdbc.properties,方便统一管理
注意:
Mybatis加载属性顺序
先加载property标签中配置的内容,
再加载外部properties文件中的内容,后面会覆盖前面同名属性
最后会读取 parameterType的属性值,也会覆盖前面的同名属性
属性名尽量做特殊化处理
二、settings(全局配置参数)
Mybatis框架在运行时可以调整一些运行参数
比如:开启二级缓存,开启延迟加载。。。
全局参数会影响mybatis运行行为
三、typeAliases(类型别名)
别名:statement对应的一些输入类型parameterType,输出类型resultType对应的属性映射类型
简化程序开发
用户自定义别名:
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(类型处理器)
Mybatis中通过typeHandlers完成jdbc类型和java类型的转换
Mybatis 支持的类型处理器
类型处理器 |
Java类型 |
JDBC类型 |
BooleanTypeHandler |
Boolean,boolean |
任何兼容的布尔值 |
ByteTypeHandler |
Byte,byte |
任何兼容的数字或字节类型 |
ShortTypeHandler |
Short,short |
任何兼容的数字或短整型 |
IntegerTypeHandler |
Integer,int |
任何兼容的数字和整型 |
LongTypeHandler |
Long,long |
任何兼容的数字或长整型 |
FloatTypeHandler |
Float,float |
任何兼容的数字或单精度浮点型 |
DoubleTypeHandler |
Double,double |
任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler |
BigDecimal |
任何兼容的数字或十进制小数类型 |
StringTypeHandler |
String |
CHAR和VARCHAR类型 |
ClobTypeHandler |
String |
CLOB和LONGVARCHAR类型 |
NStringTypeHandler |
String |
NVARCHAR和NCHAR类型 |
NClobTypeHandler |
String |
NCLOB类型 |
ByteArrayTypeHandler |
byte[] |
任何兼容的字节流类型 |
BlobTypeHandler |
byte[] |
BLOB和LONGVARBINARY类型 |
DateTypeHandler |
Date(java.util) |
TIMESTAMP类型 |
DateOnlyTypeHandler |
Date(java.util) |
DATE类型 |
TimeOnlyTypeHandler |
Date(java.util) |
TIME类型 |
SqlTimestampTypeHandler |
Timestamp(java.sql) |
TIMESTAMP类型 |
SqlDateTypeHandler |
Date(java.sql) |
DATE类型 |
SqlTimeTypeHandler |
Time(java.sql) |
TIME类型 |
ObjectTypeHandler |
任意 |
其他或未指定类型 |
EnumTypeHandler |
Enumeration类型 |
VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。 |
五、mappers(映射器)
输入映射
通过parameterType指定输入参数类型,简单类型,pojo类型,hashmap
输出映射
resultType 简单类型,pojo类型,hashmap
简单类型:
当查询的结果只有一行且是一列,可以用简单类型
Pojo对象
如果pojo对象跟查询出的结果属性名不一致,则不能映射成功
如果查询结果所有属性都不不一致,不会创建pojo对象。如果有一个一样的就会创建pojo对象,不一致的属性为默认值
resultMap使用方法
如果查询结果属性与pojo属性不一致,可以定义resultMap对属性和列名做一个映射
- 定义resultMap
- 使用resultMap作为statement的输出映射类型