目录
1.resulType:结果集的自动映射,必须写,对象属性明和查询结果的列名必须对上
2.parameterType:参数类型,可以自动解析,可以写不写,如果是我们自定义的引用数据类型,建议写上全类名
MyBatis:
1.resulType:结果集的自动映射,必须写,对象属性明和查询结果的列名必须对上
2.parameterType:参数类型,可以自动解析,可以写不写,如果是我们自定义的引用数据类型,建议写上全类名
3.设计思路***
尽量不要这么写(username,password)
4.测试类
(1)测试类的类名,以目标类开头,以Test结尾
(2)测试类中的测试方法,尽量以目标方法的方法名结尾,test目标方法名。
5.Param
(1)多个参数
param从1开始
arg从0开始
(2)单个参数
也可以用 param1
(3)param后面数的顺序
传入对象
报错
【1】如果传入的是对象,在mapper.xml映射文件中,必须和对象的属性名匹配
【2】如果传入的是java内置的数据类型的参数,string, Integer..,如果只传一个参数,直接使用#{参数名} ,#{parom1}, #{xxx}
【3】如果传入的是java内置的数据类型的参数,string, Integer ..,如果传入多个参数,必须使用#{ paramN} . #{(arg0},不能用#{参数名}
6.原理
Mybatis在封装参数的时候,封装成了一个Map集合,
(1)如果传入的是user对象,value: {"username" : "admin" , " password": "123456" , "id" :"1"
(2)l如果传入的是一个内置类型的参数,字面量【"xxxx " : "admin" 】
(3)如果从传入的是多个参数,【"param1 " : "admin" 】 , 【"param2" : "123456"】如果传入的是集合,【 "parami” :“{1,2,3,4,5}”】
需要掌握: mybatis传入参数的策略,封装成了一个map集合
7.@Param
可以使用注解@param来给参数命名
8.结论
(1)如果需要传入多个参数,我们希望在mapper .xmlL中和传入对象一样使用参数的名直接赋值,#(username},使用CParam注解起名
(2)我们还是希望通过传入对象来解决问题!! ! !
9.集合
10.主配置文件config.xml
给类起别名(也就是给实体类起别名):
(1):
(2):
正常:
别名:
场景:
实体类里加注解:@Alias()
注意事项:必须放在环境上面
11.环境environment
(1)新建一个实体类:
(2)实现接口,重写方法:
properties:读取参数
改成德鲁伊的数据源:
创建外部资源文件:
(3)才可以在环境里写全类名:
12.settings
(1)下划线转小驼峰
(2)日志实现
(3)第三方提供的日志框架
log4J:
日志为数据分析做准备,后期运营维护
13.多表查询
(1)使用SQL99语法
a.什么情况下使用左连接还是右连接?
答:无论主表中的数据是否和从表有关联关系,主表中的数据都需要显示出来
b.什么情况用内连接inner join?
答:如果两张表中的数据都是有关联的,推荐使用inner join,效率高于left join
c.规范:
* 规范:
* 如果我要的数据,只要有关联的数据,必须用inner join
* 如果我要的数据,某一张表的数据无论和另外一张表是否有关联,都需要展示,必须有left join
*
* 如果两张表中的数据都是有关联的,推荐使用inner join,效率高于left join
(2)多表查询结果集(一对一)
注意:提示不准确
(3)分布查询(另一种多表查询)
前提条件:在对应的对象的Mapper接口中,恰好有要查询的数据;
dept的封装策略:列名和属性名相同
优点:代码复用
缺点:两次数据库连接,两次单表查询;
(4)一对多:一个部门下多个员工
分布:
14.一级缓存
15.二级缓存
16.延迟加载
是调用时触发加载,而非初始化时就加载信息。
举例:调用 a. getB(). getName(),发现 a. getB() 的值为 null,此时会单独触发事件,先保存好的关联 B 对象的 SQL,查询出来 B,然后再调用 a. setB(b),于是再调用 a. getB(). getName() 就有值了,此为延迟加载的基本原理。