33-MyBatis-2

1.标签(node)

Mybatis里面的各种标签,具体知道,了解几个就行了,特别是常见的,这里最好要培养可以熟读文档的水平

tips:

        这里标签也是有顺序的...这里需要注意下一啊,mybatis的config.xml的配置文件里面的一些配置信息,有不少也是有顺序的,顺序不一样,运行的结果也不一样,阅读英文文档...有好有坏吧...通过check的方式查找,比通篇读的好,拿来主义

2.具体的crud

<select>标签下面有一个resultType的属性,这里写这个查询sql的返回值类型,可以是基本类型,POJO,也可以是集合,具体的设置肯定是有相关规范的,之前老老实实看了一些关于select的sql只是,但是update,insert,delete都没学...之后mysql的那个视频,肯定是要全部都看完的,之后还有不少知识,虽然可能冷门了点

3.sqlSession这里是拿来处理数据库查询的核心类

这里注意关于sqlSession.commit()是可以设置自动commit的,也可以手动commit

4.bean的构造器

这里注意,如果需要给一个bean写有参构造器,必须也要同时写一个无参构造器,否则mybatis跑不起来

5.增删改

在增删改的时候,mybatis是可以不像select那样还搞自定义的bean,写什么resultType,这里增删改直接就是可以写:

void | Integer | Long | Boolean

6.主键

得增加数据的主键,这里在insert标签里面有一个属性:useGeneratedKeys,这里可以拿到插入的record的主键

然后后面有一个keyProperty=""这里就是把这个主键值封装给哪个bean的哪个属性

7.mybatis参数处理

单个参数:

                #{参数名}:取出参数,这时候大括号里面的参数名,随便写什么都不要紧因为就只有一个参数

多个参数:

                mybatis在多参数情况下,有特殊规则,多个参数会封装成功一个map,所以这里的#{}就是从map里面取值

                所以这里要写#{param1}或者写索引0,1

(推荐)命名参数:

                这里的命名参数就是明确指定封装参数值map的key,这里就是在interface下面的方法的,参数前面加上注解:

                @param("")这里直接就是注解名,这里就是明确指出

这里的参数,也可以直接传POJO或者map

POJO:

            -->直接传POJO,然后取的时候直接用POJO的属性值拿:#{属性名},比如#{param2.属性名}

map

            -->在使用map的时候,也是直接#{这里写map.put进去的key值}

如果多个参数不是业务模型中的数据,但是经常要使用,推荐来编写一个TO(数据传输对象)

Tips:

        这里要注意,如果是要传一个List<Integer>-->collection集合类型(list,set)或者是数组,mybatis也会把传入的集合或者数组封装在map中,Collection可以用collection小写key,而List也是可以用小写list作为key,数组的话,直接就是分装成一个array的key

所以,这里的要写#{list[0]}

关于具体的crud标签的代码的实现细节...这种东西肯定只有在实际写的时候才能积累

8.参数值的获取

之前一直用的#{}获取map | POJO 中的值

除了这个,还支持${}

但是有区别

                -->$是字符拼串,而#直接就是一个占位符...在使用上没啥区别...

                        #{}是以预编译的形式,将参数设置到sql中(防止sql注入)

                        ${}取出的值直接拼在sql语句中,会有安全问题,这里就是拼字符串

                        大部分情况下都应该是用#{},这里适合${}的场景,就是拼接......在需要比如分年份表,比如2016,2017的时候, 年份_表名

                        这个时候,就需要${},这样就可以把一个值传到sql实际的语句中...如果用#{}就没用了...

                        这里注意了...原生的jdbc....都是不支持占位符的.....我去...等于说之前传值那个,并不具备占位符的这个功能...

                        比如分表啊,排序啊啥的...

                        自己表述:一个是占位符,一个是相当于是传的参数

9.#{}的丰富用法

这里可以指定这个参数的很多数据类型==>javaType;jdbcType(有些数据库,比如oracle不支持mybatis的默认处理,这个时候就需要设置这个参数);mode(存储过程)等等

10.SELECT

如果需要返回的不是一个bean,而是一个list<>,那么resultType还是要写集合元素的类型,而如果查到的结果是一个list,那么mybatis还是会返回这个类型的元素的集合..这里上面说过,具体还是要写代码的时候再看...

需求:返回一个map对象

resultType=""这个里面不能写list,但是可以写map

这里返回了一个单条map

我靠:这里在interface下面的方法上,可以加注解@Mapkey("id"),这里告诉mybatis封装这个map的时候,用哪个属性作为主键

这个时候自动的就返回map了,不加的话,那返回的就是集合或者单个bean.

SELECT的属性很多,这里再讲一个

resultMap:

                之前在解决,在数据库查到的字段跟在bean里面写的字段不一致时的解决方案:①在sql语句那里起别名,②设置那个下划线驼峰自动转的那个设置

这里的reultMap也可以解决上面的问题,叫做自定义结果集

之前有一个属性名:autoMappingBehavior:默认是PARTIAL,这里的意思是自动映射

我们可以自定义resultMap,实现高级结果集映射

11.resultMap

这里就是高级自动映射返回结果了

SELECT标签下面可以写自定义的结果集规则,这里写了一个resultMap="",但是在这里resultType和resultMap只能二选一

这里直接在mybatis的mapper的配置文件里面就可以写resultMap的标签了.

这里有<id column="id" property="id" / >,colunm对应的就是数据库的列,然后后面的property就是resultMap的type里面声明的全类名bean,这里的主键,就是用 的<id >,普通列是用<result >

这里涉及到外键关联...ALTER ....日...Mysql没看完...这里的外键关联,我猜,就是一张表单非主键,作为一个外键,这个外键是另一张表的主键

这里的联合查询,用级联属性,在map标签里面点出来,进行封装map

12.association

紧接着上面的,还有一个...association

这个标签的property=""就是指哪个属性是联合的对象,这里必须要要写javaType,表明属性对象的类型

<association>标签里面写的id,表示的就是关联表的主键...

总结:这里称之为-->嵌套结果集...也就是说,返回的结果里面还有别的类,那么association里面就是联表查询的另一个表

13.association分步查询

果然,这里到时候肯定要写很多张mapping的配置文件

之前的用association是用sql的联合查询,用级联属性的方式直接查出另一个表的数据,在这里,就是一步一步的分步来查询

这里的分布查询...还要在association里面加一个属性...select,这个select就是查另一个表的时候要写的sql语句

然后这里就是自然而然的操作...

14.resultMap-->延迟加载

当进行连表查询的时候,我们可以在需要的时候,再对分表进行查询,这个时候可以节约数据库资源

在config的xml文件里面写setting的一个lazyLoadingEnabled设置为true

15.这个雷丰阳老师主要就是按照官方文档来讲的,所以如果想全部精通使用框架,肯定是要看文档的...但是在这里,绝对不适合我来看全部文档,而是只学习主流的一些基本功能,拓展功能在实际应用各种再check文档,这样对于学习整个完整流程框架来说才是应该的

这里有:

            Configuration XML

            Mapper XML files

            Dynamic SQL

            Java API

            Statement Builders

            Logging

tips:这里有一个思想:

只要是显示的指定每个我们需要更改的配置的值,即使他是默认的.也要写出来,目的-->防止版本更替可能带来的问题(不愧是老程序员)

16.=插一下数据库的5大约束

#五大约束

  1、主键约束(Primay Key Coustraint) 唯一性,非空性

  2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个

  3、检查约束 (Check Counstraint)对该列数据的范围、格式的限制(如:年龄、性别等)

  4、默认约束 (Default Counstraint)该数据的默认值

  5、外键约束 (Foreign Key Counstraint)需要建立两表间的关系并引用主表的列

17.resultMap

之前讲的关于在resultMap下面有

①id:主键

②result:一般字段

③collection:这里是定义的关联的bean里面的集合属性-->自然,在collection标签里面设置property,然后里面有一个叫做ofType :这里就是集合里面的类的类型了,然后再在collection标签中定义集合里面的单个对象...跟之前一样.

collection里面自然,也是可以延迟加载的

18.这里然后又是用collection来搞分步查询,这里还是要

...注意一点,在一个mapping配置文件中,是可以调别的mapping配置文件中的方法的的,这里前面要写哪个mapping的xml的命名空间

.association是定义单个查询,collection是定义集合查询的

在这里,如果要多列值封装map传过去,这里 column的写法就是:

column="{key1=column1,key2=column2}",这里还有一个属性fetchType="lazy | eager"这里表示延迟加载 | 立即加载

19.mybatis的鉴别器-->discriminator

通过判断某列的值,从而来改变封装行为

<discriminator javaType="" colum="" >指定需要鉴定的列

用字标签<case value="" resultType="">来进行分类封装

小结一下:

必须要在实际项目中,多使用一下具体的主流的一些操作,然后把这些操作熟练的掌握,这样再做一些高级操作的时候再check文档等,这样是比较科学的,这里讲了一些稍微进阶一点,高阶一点的配置方式,确实讲的时候你听懂了,但是你用的时候还是不会用,会忘记.

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值