【自用】Mybatis的学习笔记(第一天)

捋一下啊

记录一下我总结的经验

我的笔记记录的层次很烂

所以我要在xmind上把层次记录下来

然后按着xmind 层次去敲代码

哪里出了问题,直接去ctrl+f

好了,他妈的开始学习了

ORM 框架

O是Object R是 relation关系 M mapping 映射
对象关系映射
把数据库里面的表 和 代码里面的一个类 给他对照起来的这个过程 就叫做映射、

卧槽,这个老师将的也太好了吧,原来面向对象 是这个意思,我把数据库表中的字段 提取出一个对象出来 ,用来操作,这个就是面向对象

如果公司选型 是小众技术 甚至是自己封装的,快跑,会把人玩费的

在尚马学得东西,只有工作用的1/3

学习新的东西,先看官网,再看博客

下载jar包的地址 mvnrepos

建一个空壳project 然后里面一个一个moudle 是maven的格式 叫父子项目

隐藏.iml 和 .idea 文件,这个应该是自己机器的配置文件

在这里插入图片描述
在这里插入图片描述

id不允许用int ,因为如果后期涉及分库分表,一个功能,比如订单,给他拆分了。拆分成两个表,你的字段用的是int 那就会 两张表的id 自增后 一样的,这就麻烦了

时间类的用这个

在这里插入图片描述

这个老师,没讲怎么用数据库建实体类,等会去那个老师那里学一下

如果是低版本的idea 记得自己这么建包

自己建mybatis模板

在这里插入图片描述

这样选项里面就有了

在这里插入图片描述

mabtis的xml也是有层次的,记得自己建立

在这里插入图片描述

我要理解mabtis里面标签的含义,千万不要再现之前那样,就是看那里不一样,然后改个数了

mapping的声明信息

在这里插入图片描述

mapping里面的标签意思

在这里插入图片描述
在这里插入图片描述

拷贝路径

在这里插入图片描述

命名空间随便写

在这里插入图片描述

设计者模式中的构建者模式

在这里插入图片描述

类加载器 getClassLoader 就是去类下面找文件

老师是这么读配置文件的

我他吗看错了,我以为老师用的是项目的class,唉,有些东西自己是懂的,别把自己搞不懂了

在这里插入图片描述

在这里插入图片描述

我是这么读配置文件的

在这里插入图片描述

sqlSessionFactor 这一步是最耗时的

在这里插入图片描述

selectOne

类似于 类名 和方法名

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据查不到,是因为名字不一样

在这里插入图片描述

打断点里面看不懂的东西,原来是这个意思

在这里插入图片描述

这个对象里面的标签

这个是数据库绑定

在这里插入图片描述

对象里面还有mapping的变量

在这里插入图片描述

原来是这么保存的

在这里插入图片描述

原来那行代码

在这里插入图片描述

就是通过key去value里面去找sql语句,把参数传进去,然后执行代码

日志 箭头的含义

我不懂为什么要用columns代表 字段??

在这里插入图片描述

setting 标签

在这里插入图片描述
在这里插入图片描述

输出运行日志代码

在这里插入图片描述

日他妈的,我之前还像个SB去手打

在这里插入图片描述

日期类映射居然建议使用 String 老师说在springMvc 可能会有问题

前端接收到的日期是字符串,如果用data接收要进行转换
不要用lombok, 之后可能会在set方法里面打断点,用了lombok不仅项目组的其他人也要用这个插件,而且你的断点打到哪里啊

不要sql 用这种名字 uName 在Idea 自动生成get set 方法的时候会生成这样的方法名,我之前遇到过

setuName 这个可能会导致 框架的自动映射,映射不上去,mybatis最新版本可以,不代表其他的框架就可以

配置文件里的网址是可以打开的

在这里插入图片描述

他描述了里面可以用什么标签,已经标签有什么属性

在这里插入图片描述

标签的顺序不能错,要按照顺序来
因为有他,所以才有提示功能

在这里插入图片描述

多数据源开发技术。只有老项目会用了

在这里插入图片描述

第四阶段有中间件技术

我在学习的时候,如果哪个标签不明白 可以去看官方文档

就比如这个配置文件,environments

里面有什么标签,标签的属性是干什么的,都说的明明白白

在这里插入图片描述

这个文档居然写的这,这么详细

在这里插入图片描述

后面的框架里面只需要写setting里面的内容了

mabtis里面的数据库连接池选项

没看到druid
在这里插入图片描述

他是可以指定数据库连接池配置的信息的连接池对象

在这里插入图片描述
在这里插入图片描述

这东西说白了还是为了做 数据库多环境的。不重要
一般来说 只有一个,所以不重要,配成一样的就行

在这里插入图片描述

在实际开发中是不用 mabatis的 默认数据库连接池的

pooledDataSource 不用这个

要看懂框架报错

在这里插入图片描述

在这里插入图片描述

statement 声明

用mybatis工具类加载配置文件

在这里插入图片描述

源码里面用是用这个类加载器实现的

在这里插入图片描述

GoF 的 23 种设计模式

SqlSessionFactoryBuilder 是一种构造器模式

目的是为了创建其他复杂对象(工具人)

new 出来只是为了调用 其他方法,用完即销毁

在这里插入图片描述

我真的,哭死,好像他妈的我啊

这个东西是单例全局有效的

在这里插入图片描述

因为这里面有数据库连接池信息,有那个mapping 就是sql语句的那个信息 要是 configuration 的载体吗?数据库连接池不能用完即抛,而且生成这个对象也很费时间

局部变量 用完即销毁

因为那个构造器是局部变量,就是方法体里面的变量,用完了就没了

他的作用就是new 出来创造其他的复杂对象对象

创建完他就没用了,不用为了,创建一个成员变量

成员变量没在我自己的类里面,在那个jar包的类成员变量那里

我怎么知道谁实现了 这个接口呢

在这里插入图片描述

在这里插入图片描述

Closeable接口重点

Closeable接口继承自AutoCloseable接口,所以其实现Closeable接口类会在退出try-with resources块时会自动调用close()

defaultSqlSession

实现了 SqlSession
在这里插入图片描述

这里就是我不懂的地方,sqlSession 里面持有Executor 执行器对象

这个执行器,在连接池的基础上又封了一层,包装成了Executor对象

在这里插入图片描述

这里只是new了一个对象,并没有去执行打开操作

等方法执行的时候,就是selectOne 的时候再去sqlSession 里面的executor里面拿connection连接

设计模式

构造器 是用来 生产 工厂的 单例

会话工厂对象不停生产 sqlSession (大多多例对象)

sqlSession是会话对象 里面 的 openSession实际上是new了一个对象

在这里插入图片描述

mabtis的标签顺序要按照这个来

在这里插入图片描述

配置文件引入proterties 数据库配置信息

在这里插入图片描述

在这里插入图片描述

这行就会被加载进来了

在这里插入图片描述

这个表达符,我之前不会写,但是这东西和#{}好像啊

好像mabatis里面拼接字符串 的${}

mybatis Mapping里面的标签

1、命名空间 必须为一 想想成包名.类名

在这里插入图片描述

sql语句外面套的壳 的id也要唯一,这是否?

在这里插入图片描述

报错,卧槽

有时候我不能根据 报错信息 找到哪里出错了,一找就近源码里了

比如你看这个,因为我多个sql 配置了一个id ,所以他报这个错误

在这里插入图片描述

要是之前肯定不懂,但是点到第一行,它显示的时候加载配置文件的那一步出错,所以

在这里插入图片描述

我就回去找配置文件,一定要懂底层的原理,要看源码,加油

返回类型复杂怎么办

在这里插入图片描述

类型别名

在这里插入图片描述

哦,NB哦

在这里插入图片描述

configuration 里面 的 类型别名注册

在这里插入图片描述
在这里插入图片描述

那么要是我们自己定义的类型,他肯定没有,那我又想不写那一大嘟噜,怎么办呢

在这里插入图片描述
在这里插入图片描述

包扫描

包扫描的模式 可以把类的首字母小写后当做别名

不用担心写错别名,它会在底层把大小写都转成小写

在这里插入图片描述

缺点。不同包下面的类不能重名,不然会报错

?就是填参数类型的那里,老师说mabtis直接受单参数传递

???

参数类型可以不写

练习的时候要写上,我们要理解这个东西

工作的时候不要写,多写多错

我去查数据库东西,数据库里面是int类型的,但是我mytatis里面 查询的时候 id传的是string ,居然没错,老师说 不用管数据库层面的, 只有代码能对照上就行,是说 string 和 int 类型都能查到东西吗,我去试试

还真能查我我次奥

在这里插入图片描述

????卧槽??

resultType 是把查询结果的单行记录封装成目标类型

比如这一行我应该封装成实体类类型

在这里插入图片描述

但是!!老师居然能封装成map类型

在这里插入图片描述

能直接返回一个map

在这里插入图片描述

我只前遇到的问题

问什么查询多个结果 返回类型 不写List List 而写String

因为List是框架的事,你查询两个参数,他帮你把两个参数封装成List,他是知道的

list与否是看你调的方法的事

你要做的是告诉他要返回什么类型的数据类型

卧槽,我才发现老师没写dao类,而是直接用的dao.xml

用的时候直接。。哦哦也来和我用的一样的,只是没写dao

在这里插入图片描述

selectList

在这里插入图片描述

总结就是,返回类型指的是单行数据封装的类型,具体是list还是啥的,是mabtis帮你管的

#{}

prepateStatement 对sql语句进行预编译

在这里插入图片描述

简单类型可以直接写

在这里插入图片描述

参数是实体对象

#{实体当中的属性名}

在这里插入图片描述

在这里插入图片描述

我说它是怎么实现 我传个对象进去,他能直接把参数给我扔进去的

原来他是调用了get方法(原来入此),按照我写的成员变量名,给我拼了一个get方法上去

在这里插入图片描述

参数是map

在这里插入图片描述
在这里插入图片描述

它肯定会出错,map又没有getxxx的方法在这里插入图片描述

啊!居然不会出错,map去get一个不存在的key,只会返回null

要写key

在这里插入图片描述
在这里插入图片描述

getmapper

原始的ibatis 的是字符串拼接的方式

在这里插入图片描述

现在变成了getmapper这种方式

我以为有多高端呢,说白了就是把配置文件变成了impl给了dao

在这里插入图片描述

要求命名空间 nameSpace必须是 dao接口的包名,类名,方法名和 返回值类型

在这里插入图片描述

如果我在接口里面写了方法,但是我的配置文件里面没写的话,运行起来会怎么样

BindingException

绑定异常(以后会非常常见)

SqlSession里面的getMapping 方法

多参数传递

我操了,当初讲过传参的,我还实验过,突然想起来,那个也晚了

在这里插入图片描述

在这里插入图片描述

map的key是下面这四个

在这里插入图片描述

他的底层是这么存的

在这里插入图片描述

所以我的括号里面可以这么写

在这里插入图片描述

参数类型写的map,因为存的是map

还可以自己指定param (有dao接口才可以使用)

在这里插入图片描述

在这里插入图片描述

多参数从不写参数类型,写的话就是map

!!!我操,学新东西的时候有意识 的把错误踩踩,还可以他妈的这样

这样下回就不会被傻逼错误绊倒了

记住jar包的名字,要知道他是干什么的

比如我,现在都没记住tomcat 连接数据库的那个maven依赖叫什么。。。servlet什么的

在实际项目中不会出现int型的主键,真的假的?

多id查询 参数是数组(我好想没有用过这个)

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值