2021-03-16

第三章 认识Mybatis的组件

3.1 持久层概念和Mybatis的特点

3.1.1 什么是持久层?
可以将业务数据存储到磁盘,具备长期存储能力,只要磁盘不损坏(大部分的重要数据都会有相关的备份机制),在断电或其他情况下,重新开始任然可以读取这些数据。(缺点:比较慢)

3.1.2 Mybatis成功的主要的三个因素:

    * 不屏蔽SQL,意味着可以更为精确的定义SQL语句,可以进行优化和改造,有利于互联网性能的提高,符合互联网需要性能优化的特点。
    
    * 提供了强大灵活的映射机制,方便开发者使用。提供了动态SQL的功能,允许我们根据不同的条件组装SQL。
    
    * 在mybatis中,提供了提供了使用mapper的接口编程,只要一个接口和一个XML就能创建映射器,进一步简化我们的工作,是很多框架API在mybatis中消失,开发者能更集中于业务逻辑。

3.2 了解Mybatis的核心组件

  • SqlSessionFactoryBuilder(构造器):他会根据配置或者代码来生成SqlSessionFactory,采用的是分步构建的Builder模式。

  • SqlSessionFactory(工厂接口): 依靠他来生成SqlSession,使用的是工厂模式。

  • SqlSession(会话):一个既可以发送SQL执行返回结果,也可以获取Mapper的接口。使用MyBatis提供的SQL Mapper编程技术,可以提高代码的可读性和可维护性。

  • SQL Mapper(映射器):MyBatis新设计存在的组件,它是由Java接口和XML文件(或注解)构成,需要给出对应的SQL和映射规则。他负责发送SQL去执行,并返回结果。

注:(无论是映射器还是SqlSession都可以发送SQL到数据库执行。)

3.3 SqlSessionFactory(工厂接口)

3.3.1 SqlSessionFactory是什么及它的作用是什么?

 1.是mybatis的关键对象,他是个单个数据库映射关系经过编译后的内存镜像。
 
 2.SqlSessionFactory的唯一作用就是生产MyBatisd的核心接口对象SqlSession。

3.3.2 使用Mybatis的方法:

 1.首先是使用配置或者代码去生产SqlSessionFactory,而Mybatis提供了构造器SQLSessionFactoryBuilder。
   它提供了一个类org.apache.ibatis.session.Configuration作为引导,采用的是Builder模式。
   
 2.通过Configuration类对象构建整个MyBatis的上下文。
 (注:SqlSessionFactory是一个接口,在mybatis中存在两个实现类:SqlSessionManager和DefaultSqlSessionFactory。)

3.3.3 Mybatis使用XML和代码方式构建SqlSessionFactory?

 1.使用XML方式构建
   
   优点:有利于我们维护和修改,,避免了重新编译代码。
 
 2.使用代码方式构建
 
    缺点:代码冗长,不易修改

3.4 SqlSession

3.4.1 SqlSession是什么?

 1.是MyBatis的核心接口。在mybatis中有俩个实现类:DefaultSqlSession(单线程使用),SqlSessionManager(多线程使用)。

3.4.2 SqlSession的作用是什么?

 1.获取Mapper接口
 2.发送SQL给数据库
 3.控制数据库事务
 (注:SqlSession只是一个门面接口,他有很多方法,可以直接发送SQL。)

3.5 映射器

3.5.1 映射器是什么?

 是mybatis中最重要最复杂的组件,它是由一个借口和对应的XML文件(或注解)组成。

3.5.2 映射器主要配置内容是什么?

 1.描述映射规则
 2.提供SQL语句,并可以配置SQL参数类型,返回类型,缓存刷新等信息。
 3.配置缓存
 4.提供动态SQL

3.5.3 实现映射器的两种方式:
1.XML文件
2.注解形式

3.5.4 映射器主要作用什么?

 将SQL查询到的结果映射为一个POJO或者是将POJO的数据插入到数据库中,并定义一些缓存等的重要内容。

3.5.5 发送SQL的两种方式分别为:

 1.SqlSession发送(需要SQL id去匹配SQL,比较难懂)
 2.mapper接口发送(消除SqlSession带来的功能性代码,提高可读性)

3.6 生命周期

3.6.1 生命周期是什么?
每一个对象应该存活的时间(比如:一些对象用完之后就要关闭,使他们被Java虚拟机JVM销毁,以避免继续占用内存资源。)

3.6.2 生命周期的组件:

 1.SqlSessionFactoryBuilder(作用:创建SqlSessionFactory)
 
 2.SqlSessionFactory(作用:创建SqlSession接口对象;被认为是一个数据库链接池)
 
 3.SqlSession(作用:可以在一个事务里面执行多条SQL,然后通过他的commit、rollback等方法提交或者回滚事务;相当于数据库连接池。)
 
 4.mapper(是一个接口,由SqlSession所创)

3.7 实例

实例的内容主要是处理角色表的增、删、改、查,涉及文件及其作用。

3.7.1 文件的作用:

 1.ChapterMain.java:程序入口拥有main方法
 
 2.RoleMapper.java:映射器接口
 
 3.RoleMapper.xml:映射器XML文件,描述映射关系、SQL等内容
 
 4.Role.java:POJO的对象
 
 5.SqlSessionFactoryUtils.java:一个工具类,用于创建SqlSessionFactory和获取SqlSession对象
 
 6.mybatis-config.xml:MyBatis配置文件

3.8 Java基础语法

1.权限修饰符:旨在Java中用于限定使用范围的关键字
2.java的四个关键字:public、protected、default、private(他们决定了紧跟其后被定义的东西可以被谁使用)
适用范围<访问权限范围越小,安全性越高>

     访问权限   类   包  子类  其他包

public ∨ ∨ ∨ ∨ (对任何人都是可用的)

protect ∨ ∨ ∨ ×    (继承的类可以访问以及和private一样的权限)

default ∨ ∨ × ×    (包访问权限,即在整个包内均可被访问)

private ∨ × × ×    (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)

3.关键字:其实就是某种语言赋予了特殊含义的单词。

4.标识符:其实就是在程序中自定义的名词,比如类名,变量名,函数名,包含1-9,a-z,$,_;
注意:9.1 数字不可以开头
9.2 不可以使用键字
10.常量:是在程序中的不变化的数据。

11.变量:其实就是内存中的一个存储空间,用于存储常量数据。
作用:方便运算,因为有些数据不确定,所以确定该数据的名词和存储空间
特点:变量空间可以重复使用。
什么时候定义变量:只要是数据不确定的时候
变量空间开辟需要什么要素:
1.这个空间要存储说明数据:数据类型

2.这个数据空间名字叫什么:变量名称

3.这个空间的第一次数据是什么:变量的初始化值

变量的作用域和生存期:
变量的作用域:作用域从变量定义的位置开始,到该变量所在的那个大括号结束。

生命周期:变量定义的位置开始就在内存中活了
变量到达它所在的作用域的时候就在内存中消失了

12.数据类型:
基本数据类型:byte,short,int,long,float,double,char,Boolean
引用数据类型:数组、类、接口

级别从低到高:byte,char,short(这三个平级),int,Folet,long,double

自动类型转换:从低级别到高级别,系统自动转换

强制类型转换:把一个高级别的数赋给一个比该数级别低的数

13.运算符号:

算数运算符:

      • / %
        %:任何整数除2不是0就是1,所以只要改变被除数就可以实现开关运算
        +:连接符:++,-

赋值运算符:
= += -= *= /= %=

比较运算符:运算完的结果要么是true要么是false

逻辑运算符:
& | ^ ! && ||

逻辑运算符除了!外都是用于连接俩个Boolean类型表达式
&:俩边为true结果为true,否则为false
俩边不一样就为true

&和&&区别:&:无论左边的结果是什么右边的都参与运算
&&:短路与,如果左边为false那么右边不参与运算

|和||区别:
|:俩边都运算
||:短路或,如果左边为true,那么右边不参与运算

位运算符:用于操作二进制的运算符。
& | ^
<< >> >>>(无符号右移)

语句:
if switch do while while for
这些语句什么时候用?
判断固定数的值得时候,可以使用if,也可以使用switch(效率高)
switch(变量){
case值:执行的语句;break;
……

default:执行的语句;

}
工作原理:用小括号中的变量的值一次和case后面的值进行比对,和那个case后面的值相同了,就执行那个case后面的语句,如果没有相同的则执行default后面的语句。

break是可以省略的,如果省略了就一直执行,直到遇到break为止
switch:后面的小括号中的变量应该是byte,short,char,int,四种类型中的一种
default:可以写在switch结构中的任意位置,如果将default语句放在第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。

2)当判断数据范围,获取判断运算结果boolean类型时,需要使用if。
当某些语句需要执行很多次时,就用循环结构。

while和for可以进行互换。

区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。

break:作用于switch ,和循环语句,用于跳出,或者称为结束。

break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
  
  continue:只作用于循环结构,继续循环用的。

作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
  
14.函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。

java中的函数的定义格式:

修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){

执行语句;

return 返回值;

}

当函数没有具体的返回值时,返回的返回值类型用void关键字表示。

如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。

return的作用:结束函数。结束功能。
  
  如何定义一个函数?

函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
    明确该功能的运算完的结果,其实是在明确这个函数的返回值类型
    在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
    
函数的作用:
保证该类的独立运行
因为他是程序的入口
因为她被JVM调用

函数定义名称是为了什么?
为了对该功能进行标示,方便于调用。
为了通过名称就可以明确函数的功能,为了增加代码的阅读性

重载的定义:在一个类中,如果出现俩个或俩个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了

如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系

15.数组:用于存储一类数据的容器
好处:可以对容器中的数据进行编号,从0开始。
如何在Java中表现一个数组呢?俩种表现型式

元素类型[] 变量名 = new 元素类型[元素的个数]
元素类型[] 变量名 = {元素1,元素……}
元素类型 [] 变量名 = new 元素类型[]{元素1,元素2……}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2021-03-26 20:54:33,596 - Model - INFO - Epoch 1 (1/200): 2021-03-26 20:57:40,380 - Model - INFO - Train Instance Accuracy: 0.571037 2021-03-26 20:58:16,623 - Model - INFO - Test Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Best Instance Accuracy: 0.718528, Class Accuracy: 0.627357 2021-03-26 20:58:16,623 - Model - INFO - Save model... 2021-03-26 20:58:16,623 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 20:58:16,698 - Model - INFO - Epoch 2 (2/200): 2021-03-26 21:01:26,685 - Model - INFO - Train Instance Accuracy: 0.727947 2021-03-26 21:02:03,642 - Model - INFO - Test Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Best Instance Accuracy: 0.790858, Class Accuracy: 0.702316 2021-03-26 21:02:03,642 - Model - INFO - Save model... 2021-03-26 21:02:03,643 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 2021-03-26 21:02:03,746 - Model - INFO - Epoch 3 (3/200): 2021-03-26 21:05:15,349 - Model - INFO - Train Instance Accuracy: 0.781606 2021-03-26 21:05:51,538 - Model - INFO - Test Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,538 - Model - INFO - Best Instance Accuracy: 0.803641, Class Accuracy: 0.738575 2021-03-26 21:05:51,539 - Model - INFO - Save model... 2021-03-26 21:05:51,539 - Model - INFO - Saving at log/classification/pointnet2_msg_normals/checkpoints/best_model.pth 我有类似于这样的一段txt文件,请你帮我写一段代码来可视化这些训练结果
02-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值