Mybatis框架知识点

************20210402_am************ 

1、mybatis介绍: 

1)说明: 

a、原名ibatis,是一个基于java的持久层框架;是对jdbc的上层封装; 

b、核心包括SQL Maps和DAO; 

c、ORM:对象关系映射;类--表、类的属性--表的列、类的对象--表的记录 

d、mybatis是半自动化的框架:程序员写sql语句(更灵活)、框架自动封装结果; 

e、hibernate是全自动化的框架:框架生成sql语句、框架自动封装结果; 

f、sql语句可以放置在xml配置文件中(常用),也可以通过注解写到java的接口类中; 

2)mybatis框架的工作流程:课件第1章第14页;--请自行整理; --一般没人问 

2、第一个mybatis项目: 

1)过程: 

a、创建maven的java项目,修改jdk版本配置; 

b、引入数据库驱动程序依赖、mybatis相关依赖; 

c、创建实体类与表对应; 

d、创建全局配置文件mybatis.xml,里面配置数据库连接信息、框架的配置信息; 

e、创建工具类MybatisUtil.java,用于获取SqlSession对象; 

f、创建映射文件UserMapper.xml,里面配置各个sql语句; 

g、创建测试类进行测试; 

2)示例:mybatis_01_wdr项目的test01包; 

3)mybatis中两种事务管理方式:JDBC、MANAGED; --了解 

4)mybatis中三种数据源方式:POOLED、UNPOOLED、JNDI; --了解 

************20210402_pm************ 

--继续完成第一个例子; 

************20210406_am************ 

3、补充知识点: 

1)插入数据时,自动获取数据库生成的主键值; 

a、我们在插入数据时,通常不直接提供主键值,而是通过数据库支持的方式来生成; 

b、mysql数据库支持自动生成主键值,Oracle数据库通过序列来生成主键值; 

c、我们有时候需要使用刚刚插入数据的主键值,就可以通过mybatis框架来获取; 

示例:mybatis_01_wdr项目的test02包; 

2)java代码对表中date类型列的处理: 

a、方式1:在java中使用String来对应date类型的列; 

b、方式2:在java中使用java.util.Date来对应date类型的列; 

示例:mybatis_01_wdr项目的test03包、test04包; 

3)java代码对表中下划线分隔的列名的处理: 

a、方式1:使用标签,手动对应类的属性和表的列; 

b、方式2:在全局配置文件mybatis.xml中,配置来自动对应(要求两边名称要符合标准); 

c、方式3:在查询语句中给列起别名; 

示例:mybatis_01_wdr项目的test05包; 

@补充:标签用来映射表的列和类的属性,主要用在两种情况: 

a、表的列名与类的属性名不能自动匹配时,使用本标签进行映射; 

b、多表关联查询时,使用本标签映射结果;--后面讲 

4、mybatis的核心配置文件: 

1)两种配置文件: 

a、全局配置文件:设置框架的基本信息、数据源信息等; 

b、映射文件: 

2)全局配置文件(mybatis.xml): 

a、根标签是; 

b、有多个子标签: 

 

 

 

 

 

 

 

 

3)映射文件(XxxMapper.xml): 

a、根标签是; 

b、有多个子标签: 

 

 

 

 

 

 

 

 

5、Mybatis的核心接口和类: 

1)说明: 

a、框架会针对每个数据源创建一个SqlSessionFactory对象; 

b、可以通过SqlSessionFactory对象来获取多个SqlSession对象; 

c、所有针对数据库的操作,都是通过SqlSession对象进行的; 

2)SqlSession的常用方法: 

a、T selectOne(String, Object) 

b、List selectList(String, Object) 

c、int insert(String, Object) 

d、int update(String, Object) 

e、int delete(String, Object) 

f、void commit() 

g、void rollback() 

************20210407_am************ 

6、mybatis开发dao: 

1)说明: 

a、两种方式:原始dao开发、mapper代理开发; 

2)原始dao开发: 

a、需要我们写映射文件、dao接口类、dao实现类; 

b、示例:mybatis_01_wdr项目的test06包; 

3)mapper代理开发: 

a、只需要我们写映射文件和dao接口类,具体的dao实现类对象由框架动态生成; 

b、注意:在项目中,代码实现会更简单(现在学习过程中,需要手写多一点代码); 

c、要求(背下来): --可能的笔面试题 

映射文件名与接口类名必须一致; 

映射文件中的sql语句的id、参数类型、返回值类型,要与接口类中方法名称、参数类型、返回值类型一致; 

映射文件的标签的namespace属性值必须是接口类的全类名; 

d、示例:mybatis_01_wdr项目的test07包; 

7、逆向工程:--了解即可 

1)说明: 

a、我们把根据模型(或者数据库表等)生成java代码的过程,称为逆向工程; 

b、根据java代码生成模型(或者表)的过程,称为正向工程; 

c、mybatis框架可以根据表,生成实体类、映射文件、mapper接口类;--代码比较乱,wdr说不实用 

2)mybatis的逆向工程的实现: 

a、引入相关依赖; 

b、编写配置文件; 

c、执行逆向工程的那个类; 

示例:mybatis_01_wdr项目的test08包; 

************20210408_am************ 

8、动态sql: 

1)说明: 

a、在针对查询条件不确定的情况时,可以使用动态sql根据值来动态生成查询语句;包括插入、修改也可能涉及到动态sql的使用; 

b、mybatis框架提供了各种标签,可以实现动态sql的效果;支持OGNL方式; 

2)+的使用: --掌握 

a、用来生成动态的查询语句;判断传入的参数是否为有效值,来决定是否生成该条件; 

3)+的使用: --了解即可 

a、用来生成动态的插入语句;可以使用标签实现对代码前后增加前缀和后缀功能;不太常用; 

4)+的使用; --暂时了解即可,将来可能会使用; 

a、用来生成动态的修改语句; 

5)标签的使用:--暂时了解即可,将来可能会使用; 

a、用来生成in的条件; 

b、有collection属性,取值可以有三种:array、list、map的key值;(前两个是固定值) 

6)补充:使用mybatis框架,java代码调用sql语句时,给sql语句传参可以有下面两种情况: 

a、传入参数是单参数;类型可以是基本类型、包装类类型、String、数组或者List集合; 

b、传入参数是多参数;类型是实体类类型、Map类型;(表现为一个参数,只是把多个值封装到实体类对象中,或者Map集合中) 

7)标签的使用: --了解即可 

a、标签用于多选一的条件,需要配合、来使用; 

8)标签的使用:--掌握 

a、sql片段,使用把多条sql语句中共同的代码提取出来,方便维护; 

b、需要配合来引用sql片段; 

示例:mybatis_01_wdr项目的test09包; 

************20210408_pm************ 

@补充:mybatis框架会对查询结果进行自动的封装,前提是我们需要在标签中提供resultType属性或者resultMap属性; 

1)resultType属性对应我们的实体类类型; 

2)resultMap属性对应在映射文件中定义的标签的id值; 

3)这两个属性二选一使用,不能同时使用; 

9、mybatis的多表关联查询实现: 

1)说明: 

a、关系型数据库中的多表之间的联系:一对一(人口信息表--护照表)、一对多(班级表--学生表)、多对多(学生表--课程表,需要通过“选课表”实现关联); 

b、mybatis框架中多表之间的联系;一对一(员工表--部门表,一个员工只属于一个部门)、一对多(班级表--学生表)、多对多(学生表--课程表); 

2)一对一关联:--掌握 

a、概念:在查询emp表的数据时,级联查询出对应的dept表的数据;(查询一条员工信息,级联查询出一条该员工所在部门的信息) 

b、方式1:只创建一个实体类Emp,里面直接包含Dept表的列作为属性;使用resultType属性; 

示例:mybatis_01_wdr项目的test10包; 

c、方式2:创建两个实体类Emp、Dept,Emp里面包含Dept类型的属性;使用resultMap属性,配合映射文件中标签和子标签使用; 

示例:mybatis_01_wdr项目的test11包; 

************20210409_am************ 

9(续)、mybatis的多表关联查询实现: 

3)一对多关联:--了解即可 

a、概念:在查询dept表的数据时,级联查询出对应的emp表的数据;(查询一条部门信息,级联查询出该部门下多条员工的信息) 

b、实现:创建两个实体类Dept、Emp,Dept中包含Set类型的数学;使用resultMap属性,配合映射文件中的标签和子标签使用; 

示例:mybatis_01_wdr项目的test12包; 

@补充:自己百度 5W+2H 

10、分页功能: --建议掌握 

1)说明: 

a、如果查询结果有很多条记录,通常我们会采用分页功能,只显示第一页的数据;这样可以减轻服务器压力; 

b、mybatis框架有两种分页实现: 

数据库本身支持的分页实现(mysql使用limit关键字,oracle数据库使用rownum伪类和子查询); 

mybatis框架的RowBounds插件; 

2)mysql数据库的limit方式:--建议使用的方式 

a、通常需要两条sql语句:查询共有多少条记录、查询指定页数据; 

b、可以提供一个Pager类,专门存储分页相关信息;(不是必须的) 

示例:mybatis_01_wdr项目的test13包; 

3)mybatis框架的RowBounds插件方式: 

a、RowBounds插件是框架自带的api,默认查询出符合条件的最后一条记录之前的所有记录,然后截取指定页的记录来返回; 

b、缺点:性能没有limit方式好; 

c、优点:跨数据库; 

示例:mybatis_01_wdr项目的test14包; 

11、延迟加载(Lazy Load):--了解即可 

1)说明: 

a、概念:在数据真的被使用时,才查询数据库把数据映射到java的对象中,称为延迟加载(懒加载); 

b、在使用配合和时,才可能产生懒加载的效果; 

c、mybatis默认没有开启懒加载,需要我们手动配置(在标签中配置); 

lazyLoadingEnabled=true 

aggressiveLazyLoading=false 

12、mybatis的缓存:--记住概念,常见的面试题 

1)说明: 

a、概念:是一种以空间换时间的设计理念;利用内存空间资源占用来加快查询速度; 

b、mybatis框架直接支持缓存机制,支持手动配置; 

c、mybatis中有两种缓存: 

一级缓存:直接支持,不需要配置; 

二级缓存:需要在全局配置文件和映射文件中配置,才能开启;需要类实现序列化接口; 

2)mybatis的缓存机制: --大概背一下,可能的面试题 

a、MyBatis提供了一级缓存和二级缓存 

b、一级缓存:也称为本地缓存,用于保存用户在一次会话过程中查询的结果,用户一次会话中只能使用一个sqlSession,一级缓存是自动开启的,不允许关闭。mybatis和spring整合后进行mapper代理开发,不支持一级缓存。 

c、二级缓存:也称为全局缓存,是mapper级别的缓存,是针对一个表的查结果的存储,可以共享给所有针对这张表的查询的用户。也就是说对于mapper级别的缓存不同的sqlsession是可以共享的。 

3)示例:mybatis_01_wdr项目的test15包; 

4)mybatis支持与第三方的缓存框架整合;--了解即可 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容