1.动态sql-->dynamic sql
之前全部都是纯手写sql,这里用了一些标签
这里其实就是按照代码的方式,对sql查询结果之前进行条件判断...相当于高级查询吧,用mybatis的语言,而不是sql语言
这里<if>标签下面的是<test>就是OGNL表达式
这里其实就是,间接筛选了查询条件
2.在用OGNL进行查询的时候
WHERE后面是可以加1=1的...还可以通过两次判断来加and...这里还可以通过WHERE标签来查询
直接把之前的各种if标签圈起来
这里要注意,and不能写在where条件的后面,要写在前面,写在前面的and,WHERE标签是可以帮我们驱除的...
其实这里就是 用代码来控制流程的写sql
3.Trim()
当把之前写在后面的and的sql的各种if的sql语句放在trim标签里面
这里trim有很多属性:
prefix=""给拼完的字符串加前缀
prefixOverrides=""前缀覆盖
--同理--
suffix=""后缀
suffixOverrides=""后缀覆盖
其实这里的本质,就是根据查询结果,对sql语句的字符串进行操作...
在这里...trim()感觉没啥用...直接用WHERE标签就完事了,总之这里的东西,都是之后要熟练运用mybatis的时候遇到的...现在你确实是看懂了,看懂了你也写不出来才是正常的,了解一下
4.choose分支选择-->对应到java就是带了break的swtich case
用<when>标签
这里的<otherwise>就跟default差不多的
5.set-->封装修改条件
之前在update里面更新用的关键字就是set-->set var1=var2,这是mysql语法
之前的是全部更新,现在用if标签来进行筛选后更新...同时夜用到了<set>标签,这里类似之前的WHERE会自动
删除无关的更新符号
这里同样可以用trim来操作update语句
6.foreach
这里就是遍历传进来的值,再放到sql语句里面,当然,是动态sql(用标签)
在这里循环的时候,每次操作的时候,可以用separator标签来设置各个字段隔开的符号,这里有点类似按照某字符trim的那个分割符
open & close
open & close标签-->把每次遍历的结果,拼接一开头和结尾两个字符...
index:索引-->
遍历list的时候index就是索引,item就是当前值
map的时候,index就是key
tips:SELECT IN这里的in是指的一定的范围内;这里有一个Arrays.aslist()快速生成一个list
7.foreach批量插入的几种方式
INSERT INTO VALUES , 这里逗号就是插多条数据,之前没看insert,这里了解一下基本的sql语法
到了mybatis下面的mapper里面,就用<foreach>来遍历
这里所谓的两种方法,其实就是:
1.insert的values后面加多个数据
2.每一个单个的数据,都用insert,这里允许用多个分号来分割多个语句,来执行多条sql语句
8.内置参数
_parameter-->拿传入来的原对象,就是用_parameter,之前的全部都是直接去的传入对象的成员变量
_databaseId-->这里就是databaseIdProvider(当前数据库别名),这里就是那个区分不同数据库的标签,之前在对不同的数据库,进行筛选的时候,一个方法要写2个,后面要加databaseId,现在不用了,直接有内置参数...可以接收...
讲的太细致了...
9.bind绑定
查询里面like后面是拼一个整个参数的,不能随便拼...
这里的作用就是相当于用标签定义一个局部变量
10.抽取可以重用的sql片段
include标签,然后refid里面写标签id
与crud同级的标签-->sql标签
这里其实就是,一种文本替换用标签来替代sql语句的文本
include标签里面,还可以自定义一些porperty而且不能用#{},只能用${}...
11.MyBatis自带缓存
一级缓存(本地缓存)sqlSession级别的缓存
在MyBatis里面默认定义了2级缓存
二级缓存(全局缓存)
12.一级缓存
一个sqlSession对象,就拥有他的一个缓存,不通过的sqlSession对象,拥有不同的缓存...
如果两次查询中间,进行了增删改操作,那么缓存就可能会失效
还有就是手动清除了一级缓存,那么缓存就可能失效
13.二级缓存
基于namespace的二级缓存
如果会话关闭,一级缓存中的数据会被保存到 二级缓存中
二级缓存,是放在不同的mapper.xml下的,因为这里是按照namespace分的
14.二级缓存实现
tips:确认开启的配置,那么就要显示写出来
①加<cache>标签:一些属性-->
eviction:缓存回收策略
flushInterval:缓存多长时间清空
readOnly:是否只读,这里涉及到的 知识,实在不知道是否常用,只读不安全,速度快,非只读,慢但是安全
type:自定义缓存...实现cache接口
szie:缓存区大小...
这里就是实现了序列化接口...暂时不知道这里是干什么的...
这里特别注意,1.如果要开启缓存,需要实现序列化;2.之前的缓存是在一级缓存里面,只有会话关闭了以后, 二级缓存中才有数据...
15.缓存属性以及设置
①cacheEnable="",false-->关闭的二级缓存(一级缓存是一直可用的)
②每个select标签都有useCache属性,这里是设置是否使用二级缓存
③ flushcache每个增删改标签,都会有一个这个属性,并且设置为真,每次增删改以后,会自动清空缓存(1,2级都会被清空),其实查询标签也有flushcache,但是默认是false
④sqlSession.clearCache这里只清除openSession的一级缓存
⑤localCacheScope:本地缓存作用域(一级缓存,默认是当前会话的缓存中)STATEMENT可以禁用掉一级缓存
16. 第三方缓存
这里MyBatis自己做缓存,很简陋...所以提供了第三方的缓存接口
如果有第三方的缓存要接入,直接通过接口接入进来
现在主要流行,把缓存数据放在redis数据库里面
17.常见的第三方缓存这里涉及到了:
ehcache & redis...等于说原生的mybatis缓存...学了没卵用,还是用第三方的缓存...
这里先看ehcache的整合
18.ehcache整合
在别的mapper.xml也想使用ehcache,那么这里不用再写ehcache,而是用cache-ref
<cache-ref namespace=指定与哪个namespace下的缓存一样>
19.mybatis-spring整合
在这里,不光要下载mybatis的jar...spring的jar,当然都不是maven模式下,这里还要下一个整合包...mybatis-spring-1.x.x,我也是醉了...感觉整合方法可以写几种...
20.SSM整合
这里涉及到spring的各种配置文件,搞忘记了...在这里先小小总结一下:
一共有:
①springMVC的配置文件,配置各种context,视图解析器等,在这里,springMVC的配置文件只管controller
②spring主要配置文件-->扫描bean,配置数据源,配置事务管理器txManager,以及整个spring的各种配置(创建各种bean,这里写了创建了一个sqlSessionFactory的bean,注意一下这里的这个bean需要指定数据源,就是之前同样在spring里面配置的dataSource,不光是数据源,肯定要是要mybatis的config文件的 ...等于说要dataSource和mybatis的xml两个文件才能创建sqlSessionFactoryBean这个bean,这里还要mybatis的mapper配置文件,之前mybatis的时候数据源是配置在config文件里面,那个时候mapper是配置在mybatis的config文件里面,现在直接把可能>=1的mapper配置文件写在sqlSessionFactoryBean的property里面),在这里就是通过mapper扫描器scaner,把所有的mapper的dao接口扫出来,这里不是mapper配置文件,是扫mapper配置文件所对应的dao的接口
黑马里面,居然没有写mybatis的配置文件,而是直接把mybatis配置文件里面的bean,直接写在了spring的配置文件里面...
③mybatis的config配置文件
④>=1的mybatis的mapper配置文件
21.回顾Spring的一个最简单的请求的流程
①客户端写一个请求
②用@controller控制器类下的@RequestMapping获取
③用写的service层的下的某具体业务service来操作dao层的方法,这里注意...不需要写实现类...mybatis会用动态代理,自动生成一个实现了该接口的代理类,所以,业务处理都是写在service层里面的
22.mybatis逆向工程
代码生成器generator
之前都是正向来写一些代码,这里用mybatis的代码生成器,逆向的自动生成一部分代码
23.MGB配置文件
几种配置:
①jdbcConnection-->如何连到目标数据库,在这里对数据库的连接进行一些设置
②javaModelGenerator-->在这里设置到时候生成的javaBean的目录..
③sqlMapGenerator-->关于sql映射的...
④javaClientGenerator-->指定mapper的接口所在的位置
⑤table-->这里就是逆向分析...表的结构,然后生成对应的东西...
逆向工程,感觉...不知道有啥使用场景...这里用逆向工程可以返simple的mybaits也可以返回豪华版有dynamic sql的mybatis豪华版
24.复杂查询功能
这里进行复杂查询功能,不是写在mapper.xml里面的,而是写在java代码里面的..
这里用了example和criteria
example是封装查询条件的
criteria是example创建出来拼装的
这里就是用java代码操作sql...java代码的sql操作是模仿hibernate的qbc风格进行查询,具体到时候是写sql还是写qbc风格的....到时候再看