目录
MyBatis笔记
第1刷,南湖立交2021.12,课程来源:B站up/黑马
基本讲解
[课程目标]使用MyBatis完成对数据的查增改删.
[各部分说明]一共2部分,1部分有10节,1.1-1.10,即查增改删,2部分仅1节,即注解实现CRUD.
[1部分说明]环境准备,查所有,查一行,多条件查,单条件查,加数据,改数据,删数据,批量删,参数传递.
[知识点]MyBatis基本步骤,MyBatisX,查询基本步骤,增基本步骤,改基本步骤,删基本步骤
[代码]xml代码,接口代码,sql语句,测试类代码
[!]JDBC自动提交事务,但是MyBatis默认不提交事务.
[!]MyBatis的CRUD有2种方式:xml配置\注解开发.xml配置较全面,注解开发用于简单CRUD比xml配置更简单,用于复杂的CRUD会需要非常复杂的代码.
基本MyBatis的5个步骤
[视频]黑马SSM
e149,6:30
开发环境:相关的实体类\测试类,在pom.xml添加依赖,包括但不限于mysql\jdbc\mybatis\junit\log4j...依赖
编写jdbc.properties
编写SQLMapConfig.xml
编写XxMapper.xml
编写XxMapper.java(这是interface)
(原文)MyBatis开发步骤-1-添加MyBatis的坐标,-2-创建user数据表,-3-编写user实体类,-4-编写映射文件UserMapper.xml,-5-编写核心文件SQLMapConfig.xml,-6-编写测试类
标签释义
标签 | 别名/描述 |
namespace | 是当前xml文件的命名空间,namespace+"."+id组成访问的唯一标识,,, |
<select id> | 有findAll\update\delete等,,,< |
<select resultType> | 一般写相应的类的全限定类名,是封装mysql执行结果的目的地,,, |
sqlMapConfig.xml | 核心文件 |
<mappers><mapper></mappers> | 映射器,适用于xml开发,引入XXMapper.xml到SQLMapperConfig.xml |
<mappers><package></mappers> | 映射器,适用于注解开发,引入XXMapper.java到SQLMapperConfig.xml |
<properties> | 属性,引入jdbc.properties |
settings | 设置 |
<typeAliases> | 类型别名 |
<typeHandlesrs> | 类型处理器 例如:[需求]支持在java程序中输入一个毫秒值作为生日,存储到数据库后可转换为年月日日期格式,故新建列时选择数据类型为bigint |
<plugins> | 插件,例如pageHlper |
<environments> | 环境,内含-1-事务管理器-2-数据源. -1-transactionManager事务管理器,作用是提交和回滚,有2种:JDBC\MANAGED,这里使用JDBC -2-dataSource,作用是打开和关闭连接,有3种:UNPOOLED\POLLED\JNDI,这里使用POOLED |
transactionManager | 事务管理器 |
dataSource | 数据源 |
databaseIdProvider | 数据库厂商标识 |
提交事务 | 方案A:系统自动提交事务 openSession(true); openSession();sqlSession.commit(); |
操作事务 | void commit(); |
id | 完成主键字段的映射 |
column | 表的列名 |
property | 实体类的属性名 |
result | 完成一般字段的映射 |
resultMap | 定义 字段 和 属性 的映射关系 |
属性占位符,要求 属性名 或map集合的键名和 参数占位符名称 一致 | |
parameterType | 参数类型 |
javaType | 实体类类型 |
if,choose,trim,foreach,where | 动态sql |
useGeneratedKeys,keyProperty | 主键返回 |
@select,@create,@update,@delete | 注解,使用了注解,就不需要再映射配置文件中书写对应的 statement,但不适合用于较复杂的CRUD |
<sql><include> | sql语句抽取 |
查 | |
<insert> | 增 |
<update> | 改 |
<delete> | 删 |
<where> | 条件 |
<if> | 动态sql/多条件 |
<foreach> | 动态sql/单选条件 |
<sql> | sql语句抽取 |
代理接口开发
[描述]代理开发方式介绍
采用MyBatis的代理开发方式实现dao层的开发,这种方式是我们后面进入企业的主流.mapper接口开发方式只需要程序员编写mapper接口(相当于dao接口),由MyBatis框架根据接口定义创建链接的动态代理对象,代理对象的方法体同上边dao接口实现类方法.
mapper进口开发需要遵循以下规范
mapper.xml文件中的namespace与mapper接口的全限定名相同.
mapper接口方法名和mapper.
xml中定义的每个statement的id相同.mapper进口方法的输入参数类型和mapper.
xml中定义的每个sql的parameterType的类型相同.
mapper接口方法名的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同.
sqlSession.xx();代理接口开发实现的是这一步,例如sqlSession.getMapper();
typeHandler标签
无论是MyBatis在Pstmt预处理语句中设置一个参数时,还是从结果集中取出一个值时,都会用类型处理器将获取的值以合适的方式转换成Java类型.例如下表
类型处理器 | Java类型 | JDBC类型 |
BooleanTypeHandler | java.lang.Boolean | boolean |
ByteTypeHandler | java.lang.Byte | numeric\Byte |
ShortTypeHandler | java.lang.short | numeric\short\int |
IntegerTypeHandler | java.lang.int | numeric\integer |
LongTypeHandler | java.lang.long | numeric\long\integer |
你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型.具体做法为:实现org.apache.ibatis.type.TypeHandler接口,或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler,然后可以选择性地将它映射到一个JDBC类型.
例如
[需求]
一个Java中的date数据类型,现在要存储到数据库的时候存成一个1970年至今的毫秒数,取出来时转换成Java的date数据类型,即Java的date与数据库的varchar毫秒值之间的转换.
[开发步骤]
-1-定义转换类继承类BaseTypeHandler
-2-覆盖4个未实现的方法,其中setNonNullParameter为java程序设置数据到数据库的回调方法,getNullableResult为查询时mysql的字符串类型转换为java的Type类型的方法
-3-在MyBatis核心配置文件中进行注册
-4-测试转换是否正确
[关键词]
TypeHandler
BaseTypeHandler
setNonNullParameter
getNullableResult
[步骤]
- 建包:com.it.handler
- 新建类:DateTypeHandler.java
-
- DateTypeHandler继承BaseTypeHandler
- 重写4个方法:setNonNullParameter()等
plugin/pagehelper
[需求]
查询一个表中的所有数据,以分页效果显示
[开发步骤]
导入通用pagehelper的坐标
在MyBatis核心配置文件中配置pagehelper插件
测试分页数据获取