当前位置: 首页 > news >正文

boolean mybatis_mybatis的环境搭建以及问题

这是我老师当时我们毕业班整理的基础架构 知识点 以及思维导图。有什么想了解下面我老师的联系方式,我以获得老师授权,因为有小伙伴加老师QQ问了,老师问了我这个事情。

毕业班复习用 mybatis必知必问  

1、mybatis中3个重要的类或者接口

1)SqlSessionFactoryBuilder类

用它来创建工厂对象,它重载了9次build()方法,我们常用build(inputstream)来创建工厂.

该类通常在项目中以单例的形式存在。

API列表:

build(Reader reader)

build(InputStream inputStream)

build(InputStream inputStream, String environment)

2)SqlSessionFactory接口

用它来创建对指定数据库的一个连接对象,即sqlsession。

它重载了8次openSession()方法,这些方法都可以用来产生sqlsession连接对象。

该类通常在项目中以单例的形式存在。

API列表:

openSession() 默认非自动提交事务

openSession(boolean autoCommit) 指定true或者false提交事务

openSession(Connection connection); 通过一个JDBC连接对象构建sqlsession

openSession(TransactionIsolationLevel level); 指定事务隔离级别

getConfiguration()方法 返回Configuration对象

4)SqlSession接口

用它可以执行增删改查的命令,还可以用它获取mapper接口,还可以管理JDBC事务(例如手动或者自动提交、回滚)。

一句话,它代表了一次跟数据库的连接会话,跟JDBC中的Connection对象相似。另外,事务就是一个不可分割的原子性的业务行为,即要么都成功,要么都失败。

该类通常在项目中以多例的形式存在,并且要注意线程安全问题,不能声明为实例变量,否则一个线程关闭了sqlsession会导致其他线程无法使用。

API列表:

insert()

delete()

update

selectXXX()系列

commit()

rollback()

close()

getMapper()

clearCache()

flushStatements()

getConnection() 返回JDBC的一个Connection对象

getConfiguration() 返回Configuration对象

2、和配置相关的类

1)Configuration类

用它封装mybatis-config.xml和mapper.xml里面所有的信息,另外还给出了一些默认配置,例如:

safeRowBoundsEnabled = false;

safeResultHandlerEnabled = true;

mapUnderscoreToCamelCase = false;

lazyLoadingEnabled = false;

aggressiveLazyLoading = true;

multipleResultSetsEnabled = true;

useGeneratedKeys = false;

useColumnLabel = true;

cacheEnabled = true;

defaultStatementTimeout

resultMaps

keyGenerators

有关事务设置的........

JDBC

    MANAGED

    有关连接池设置的........

    JNDI

    POOLED

    UNPOOLED

    有关缓存设置的........

    PERPETUAL

    FIFO

    LRU

    SOFT

    WEAK

..........等等。

API列表:

属性的get/set方法

addMapper(Class type) 向配置对象中添加指定的mapper接口到MapperRegistry中

addMappers(String packageName) 向配置对象中添加指定包下的mapper接口到MapperRegistry中

包含的一些重要的工具类:

MapperRegistry

TypeAliasRegistry

TypeHandlerRegistry

CacheRefResolver

ResultMapResolver

JdbcTransactionFactory

ManagedTransactionFactory

JndiDataSourceFactory

PooledDataSourceFactory

UnpooledDataSourceFactory

ParameterHandler

ResultSetHandler

StatementHandler

SimpleExecutor

BatchExecutor

ReuseExecutor

CachingExecutor

InterceptorChain

Transaction

JdbcType

Environment

MappedStatement

举例:config.getMappedStatement("selectByNameAndClass").getTimeout()获得id为“selectByNameAndClass”对应的SQL设置中的timeout的值。

可见,Configuration类封装了整个项目中所有的xml配置信息,包括mybatis-config.xml和mapper.xml,这些信息都是在项目启动的时候就读进去的,运行时由于配置错误,会导致看似不相关的SQL执行失败。

映射详情:

标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。

标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。

每一个、、、标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。

2、认识mybatis-config.xml配置文件

1)标签,读取properties类型的配置文件

2)为类指定别名,以便在其他地方引用,例如在mapper.xml里面引用。

有两种方式为类取别名:

第一,单个取:

第二,批量取:

3)environments和environment标签

配置程序的运行环境,例如生产环境、测试环境等。

如何切换运行环境?更改中的default值即可。

4)transactionManager标签

指定事务的管理方式,每一种方式都有对应的处理类,type的值有如下两个,不分大小写,不能写错否则报找不到对应的类:

JDBC

MANAGED

5)dataSource标签

连接池类型,type的值有如下三个,每一种方式都有对应的处理类,不分大小写,不能写错否则报找不到对应的类:

POOLED:会从连接池取一个连接,用完后再放回连接池,见日志

UNPOOLED:会每次产生一个新连接,用完后直接关闭,见日志

JNDI:需要容器支持,配置方式跟上述两种方式不同,见源码JndiDataSourceFactory类,建立一个properties文件,并且包含如下键:

data_source=xxxxxxx

env.xxx=xxxxxxx

initial_context=xxxxxxx

6)property标签

注意name的值区分大小写并且不能改变,变量的引用是${}格式,不是#{}

7)mappers标签

加载映射文件,有3种方式:

第一,

第二, 

第三,

第一种方式XXXmapper.xml的文件名称可以跟mapper接口的文件名称不一致,即只要能找到该xml就可以。

第二、第三种由于扫描的是类,所以要求xml和mapper名称要一致,否则运行mapper接口方法时报找不到方法的异常。

3.xxxMapper.xml配置文件

1)namespace命名空间

namespace是用于绑定Dao接口的,即面向接口编程,它的值是mapper接口的完全限定名也可以是任意取的名称。

绑定后,mapper接口中的方法就可以与xml映射文件中的SQL语句的ID一一对应。

例如dashuju.mybatis.mapper.StudentMapper。

2)缓存移除机制eviction的值:

PERPETUAL

    FIFO

    LRU

    SOFT

    WEAK

4、mybatis中的常量,见源码DynamicContext类、DefaultSqlSession类

_parameter

_databaseId

list

array

5、mybatis中的数据类型对照表,见源码TypeAliasRegistry类

string—String

byte—Byte

long—Long

short—Short

int—Integer

integer—Integer

double—Double

float—Float

boolean—Boolean

byte[]—Byte[]

long[]—Long[]

short[]—Short[]

int[]—Integer[]

integer[]—Integer[]

double[]—Double[]

float[]—Float[]

boolean[]—Boolean[]

_byte—byte

_long—long

_short—short

_int—int

_integer—int

_double—double

_float—float

_boolean—boolean

_byte[]—byte[]

_long[]—long[]

_short[]—short[]

_int[]—int[]

_integer[]—int[]

_double[]—double[]

_float[]—float[]

_boolean[]—boolean[]

date—Date

decimal—BigDecimal

bigdecimal—BigDecimal

object—Object

date[]—Date[]

decimal[]—BigDecimal[]

bigdecimal[]—BigDecimal[]

object[]—Object[]

map—Map

hashmap—HashMap

list—List

arraylist—ArrayList

collection—Collection

iterator—Iterator

ResultSet—ResultSet

6、标签

sql

include

foreach

where

if

一、SQL映射文件基础

84b7c3e62ef6788416d00daf8f12926d.png

1. resultType="Student"和resultMap="ResultMapStudent"的区别和注意事项:

1)区别,后者会走resulmap并且会执行assiction等语句

2)resultType即使返回是list也是可以处理的

3)Student是别名

二、主键生成

69ae74931580b94671b03a0b7d3d8391.png

三、参数传递

ebfeed821db79bce47cdb4a6ac23607e.png

四、高级映射

9dc0d16e83ff886b5b5e7fb3de35a15e.png

ResultMap主要解决:

1)属性值和列名不一致

2)一对一、一对多、多对多

通常,使用ResultType即可,不要滥用ResultMap

五、cache元素

17e3ebcfcb788f211219555406e5dba8.png

六、动态SQL

bdc185596df2b0f5462cfaf6c4c2f2ca.png

七、resultMap元素

1e843db7da2f48a9aeb0672c52bb0e27.png

八、Collection元素

7050a6706cc2a1d465be9d92f4974135.png

九、#和$的使用

f6897eadb63122e116e1789cb3f4e943.png

相关文章:

  • 软件工程实践2017第二次作业
  • python django步骤_python - django (创建到运行流程)
  • CODEVS——T 1004 四子连棋
  • linux查看显卡信息_如何查看linux系统的相关信息
  • 华宇笔试题总结
  • system.objectdisposedexception: 已释放该集合_集合啦!动物森友会夏季更新第 2 弹!烟火大会、梦境参观、复原储存资料即将来袭...
  • JS中innerHTML、outerHTML、innerText 、outerText、value的区别与联系?jQuery中的text()、html()和val() ?...
  • python 逗号作用 语句间_python逗号作用
  • SDUT_2116 数据结构实验之链表一:顺序建立链表
  • 华三模拟器hcl实验手册_Caffeinated 6.828:实验 1:PC 的引导过程
  • WEB API 版本控制
  • 阿里云轻量服务器 外网卡_腾讯云轻量应用服务器(免费内测)开箱测评
  • mixbox工具箱_让小米路由回归智能,3款第三方工具箱以及插件评测
  • mysql 学习笔记
  • 华为杯数学建模优秀论文_数学建模经典例题(2006年国赛A题与优秀论文)
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CentOS7 安装JDK
  • CSS实用技巧干货
  • Date型的使用
  • Docker容器管理
  • gf框架之分页模块(五) - 自定义分页
  • IDEA 插件开发入门教程
  • Java基本数据类型之Number
  • leetcode388. Longest Absolute File Path
  • Next.js之基础概念(二)
  • PHP的Ev教程三(Periodic watcher)
  • QQ浏览器x5内核的兼容性问题
  • springboot_database项目介绍
  • Vue小说阅读器(仿追书神器)
  • 大型网站性能监测、分析与优化常见问题QA
  • 前端_面试
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 我建了一个叫Hello World的项目
  • 系统认识JavaScript正则表达式
  • 译有关态射的一切
  • 自制字幕遮挡器
  • ​ArcGIS Pro 如何批量删除字段
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (1)STL算法之遍历容器
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (4)logging(日志模块)
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (区间dp) (经典例题) 石子合并
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)基于IDEA的JAVA基础1
  • (转载)Google Chrome调试JS