MyBatis学习笔记 (第1刷, 2021.01)(2/4 基本讲解)

8 篇文章 0 订阅

目录

MyBatis笔记

基本讲解

基本MyBatis的5个步骤

标签释义

代理接口开发

typeHandler标签

plugin/pagehelper

END


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>

类型别名
在核心文件sqlMapConfig.xml中,根标签为,二级标签依次为.其中.这套标签写完,相关的类可以不写全限定名了.

<typeHandlesrs>

类型处理器

例如:[需求]支持在java程序中输入一个毫秒值作为生日,存储到数据库后可转换为年月日日期格式,故新建列时选择数据类型为bigint
alter table user add birthday 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);
方案B:手动提交事务

openSession();sqlSession.commit();

操作事务

void commit();
void rollback();

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语句抽取

<select>

<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插件

测试分页数据获取

END

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值