捋一下啊
记录一下我总结的经验
我的笔记记录的层次很烂
所以我要在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的方法![在这里插入图片描述](https://img-blog.csdnimg.cn/6008549c87cc433c8cb29c1e7938e182.png#pic_center)
啊!居然不会出错,map去get一个不存在的key,只会返回null
要写key