ssm学习笔记一-mybatis

                 							 Mybatis
									  (p 69-75完整项目实例)

P1-p4 框架、使用框架对应jdbc的好处,已经框架封装的对应关系,以mybatis对上述的具体描述。
P5-p7 具体小项目的搭建,5、主要是一个项目自身所建且所需的导包配置文件,6最重要,为两个配置文件的填写,6为注意事项,写项目的时候要特别记住

P8 p9 两p是基于上述环境搭建好后的三种不同方法使用mybatis将数据库表传入实体类中:
Xml方式
注释方式
基于以上两种任一方式后,实现dao层接口的实现类

P10 实现mybatis框架的测试类的核心代码基于软件工程设计模式知识的解析,每一条语句分别对应了哪些设计模式,以及使用这么多设计模式的目的(原本可以一行语句完成):为了更灵活,可操作性强

P11 基于两个xml配置文件中的核心代码解析,引出分别对应jdbc技术的哪些语句内容(没卵用),同时抛出selectList方法,引出下p基于该方法的解析

P12 获得selectList方法所需的代理对象的创建方法:getMapper的解析,如何自定义该方法的三个关键点:
类加载器
需实现的字节码数组
如何代理(关键)

P13-p17 自定义mybatis框架代理对象实现类

P19 总结上述从p10开始的mybatis完成数据库表封装至实体类的全过程。

P20 p5-p8的内容结合,完整的一次mybatis小项目环境搭建过程

P21-p26 为mybatis框架增删改查等操作的测试类编写,主要要注意p25中的模糊查询的两种不同的方法,一个是Preparedstatement占位符,一个是statement拼接,前者性能更好(都注意,如需使用%,则都要用”%”+字符串拼接的方式)。以及p26的插入id的select方法。

P27 参数parameterType深入类型的深入,除简单类型外的,额外介绍了pojo对象类型(即实体类)的传入,其中经过ognl表达式解析,特别讲解了ognl表达式。

P28 修改实体类属性致返回值不对应报错的深入研究,特别注意,在windows中mySQL数据库是不区分大小写的,但Linux严格区分。

P29 基于上述问题实体类属性致返回值不对应的一个解决方法:resultMap标签,同时需要在方法标签属性中,用resultMap替换resultType。

P30-32 再一次演示实现dao层接口类,比较得出还是不自己实现好。

P33 p34 解读上述dao层实现类的r方法(Retrieve查询方法)所调用的源码过程分析,

P35 解读上述dao层实现类的cud方法(增改删方法)所调用的源码过程分析

P36 解读使用代理对象dao实现crud方法所调用的源码过程分析
(这四p着重要注意学习使用断点来使用debug调试代码)

P37 38 配置文件中三个标签的使用和详解,36中的url讲解

P40 41 连接池,mybatis连接池介绍,引出三个mybatis的type属性:unpooled,pooled和jndi(拓展内容)

p42 43 mybatis中unpooled和pooled属性详解和对比

p44 mybatis中的事务原理和自动提交设置(自动提交最好不用,后续spring讲解中会再说明)

p45-47 mybatis动态SQL语句四个标签:

	<if>
	<where>
	<foreach> 内容中#{?} ?的值是由标签属性item的值来决定的
	<sql>  仅作了解,作用:抽取重复SQL内容

P48 mybatis表之间关系分析
一对一
一对多
多对一
多对多
//包含对方的一个集合引用即是对多,SQL语句中需使用left outer join而不是传统的’,’(inner),长SQL语句换行后记得加空格保证语句正确

P49-52 对上述前三种表关系以项目实例讲解

  • 49 项目搭建,表的建立
  • 50-51 一对一查询实例,并介绍两种封装多表至实体类的方法:
    新建一个包含两个实体类属性的子类
    在配置文件中建立一个包含association(关系映射)标签的resultMap标签并使用,具体见视频(常用)
  • 52 一对多的查询实例,封装多表至实体类的方法:
    在配置文件中建立一个包含collection(集合映射)标签的resultMap标签并使用
    P53-56 对多对多表关系以项目实例讲解
  • 53 54 项目搭建,表的建立(多对多的关键是中间表
  • 56 57 两个不同的方向的多对多实例演示
    P58 59 JNDI
  • 58 JNDI MAVEN的war工程搭建
  • 59 查询方法实例应用,部署在Tomcat服务器上

P61 以上述所建表提出两个问题,引出延迟加载和立即加载的概念,并得出一个伪结论:通常:
X对多查询时,是延迟加载,X对一时是立即加载

P62 63 一对一和一对多两个案列讲解延迟加载,注意的是,最先一步需要修改的是SQL语句的查询,因为原查询语句直接全部查询完毕,无法实现延迟。所以需要在resultMap标签内的两个映射标签加一个select属性掉用一个其他查询方法来实现。
通过配置文件中的<settings>标签的两个属性来打开延迟加载:
lazyLoadingEnabled (开关)
aggressiveLazyLoading 3.4.1版本以后默认为false,不需要设置(按需加载)

然后在调用语句中自定义一个逻辑来实现延迟加载。

P64 缓存的基本概念和适用于缓存的条件
P65 66 一级缓存(SqlSession对象的缓存)案例讲解使用方法和注意事项
P67 二级缓存(SqlSessionFactory对象的缓存)案例简介开启二级缓存的三个步骤和使用方法,同时注意:
不同于一级缓存的以对象方式存放,二级缓存中存储的是数据类型数据,再次查询时以这些数据新建一个实体类对象

P68-75 mybatis注释开发综合案例

Pom.xml问题:
在按照视频讲解的步骤第一步就遇见了问题,org.mybatis包依赖获取不了,解决过程:

  1. 开始找到maven 下载包到本地仓库的方法:https://www.cnblogs.com/nbweber/p/11634109.htmlhttps://blog.csdn.net/Mountaingroup/article/details/107081650,没有成功,进度条消失的很快,并没有下载,

  2. 以为是maven仓库在C盘写入文件需要管理员权限的原因,把maven迁移至了D盘,配置重配花了一点时间,但还是失败了

  3. 把视频给的源码下载下来,重复进行第一步,失败

  4. 百度找的了这个解决方法:https://blog.csdn.net/weixin_41425956/article/details/107083940,但博文没有讲清楚,应该是增加这个依赖,而不是把原来的mybatis依赖覆盖(如果是增加mybatis依赖问题包括下面这个问题也解决了,只剩下了个Junit问题),不幸的是我选择了覆盖,引出了下一个问题

  5. 无法引入org.apache.ibatis.annotations.CRUD,找的以下博文,合并知晓解决这两个问题:https://blog.csdn.net/zqq_2016/article/details/88427519,运行后还出现了一个Junit问题

  6. !!! JUnit version 3.8 or later expected:异常解决,找的博文:https://blog.csdn.net/niuniu1994/article/details/82814132,结合左侧external libraries下没有Junit包,发现是版本号原因导致导入失败,根据博文修改版本号即可。
    IntellJ两个小细节:
    1、 修改包层级结构显示方式:在点击齿轮符号后,取消勾选Compact Empty Middle Packages即可
    2、 添加类注释以及方法注释:https://www.jianshu.com/p/d194e7a6e61c

    SqlMapConfig.xml 问题
    用idea第一次写MyBatis配置文件,发现报错URI is not registered (Settings | Languages & Frameworks | Schemas and DTDs)
    解决:https://blog.csdn.net/weixin_43367967/article/details/85198352,注册统一资源标识符

    IUserDao接口 @Select注释找不到符号 问题:
    没有导入org.apache.ibatis.annotations包,导入号提示Error:java: 程序包org.apache.ibatis.annotations不存在,原因:external libraries中没有导入pom.xml依赖中填写的包。解决:
    1、 重启intellj idea:https://blog.csdn.net/weixin_41231928/article/details/92073540?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase,(我遇到的就是这个)
    2、 检查设置中有没有忽略xml文件:https://blog.csdn.net/weixin_41529708/article/details/105443965?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-1.nonecase
    这个破问题找了我老半天没解决,给我气的。

    Build时提示警告:java: 源值1.5已过时, 将在未来所有发行版中删除
    https://blog.csdn.net/qq_28773851/article/details/81387722

    P69 再次对比注解和解析xml两种开发方式
    P69-71 单表查询的增删改查和总数(查询有三个)
    P72 注解开发方式下,遇到实体类名与数据库表映射对不上的解决方法:
    1、 xml方式也可以用的方法,修改SQL语句,采用别名的方式
    2、 添加一个**@Results{@Result}注释,类似于xml的resultMap表情,具体见视频。
    添加id属性标识,在需要的方法上添加
    @ResultMap(value={#id})来使用该映射
    P73 74 @Results{@Result}中的@One、@Many属性实现X对一和X对多的注解开发案例,以及上述两个属性中的fetchType属性实现立即或延迟加载。
    P75 一级缓存SqlSession两种方式都是默认开启的,使用
    .close()方法**后即清除一级缓存
    开启二级缓存:两个步骤(xml方式为三个步骤,两种方式第一步都默认开启了)第二步@CacheNamespace注解blocking属性值为true即可。

猜你喜欢

转载自blog.csdn.net/qq_43175022/article/details/108754339