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<T> 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>标签会被解析为ParameterMap对象,其每个子元素会被解析为ParameterMapping对象。
<resultMap>标签会被解析为ResultMap对象,其每个子元素会被解析为ResultMapping对象。
每一个<select>、<insert>、<update>、<delete>标签均会被解析为MappedStatement对象,标签内的sql会被解析为BoundSql对象。
2、认识mybatis-config.xml配置文件
1)标签,读取properties类型的配置文件
2)为类指定别名,以便在其他地方引用,例如在mapper.xml里面引用。
有两种方式为类取别名:
第一,单个取:<typeAlias alias="Address" type="dashuju.mybatis.pojo.Address"/>
第二,批量取:<package name="dashuju.mybatis.pojo"/>
3)environments和environment标签
配置程序的运行环境,例如生产环境、测试环境等。
如何切换运行环境?更改<environments default="test">中的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标签
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
注意name的值区分大小写并且不能改变,变量的引用是${}格式,不是#{}
7)mappers标签
加载映射文件,有3种方式:
第一,<mapper resource="dashuju/mybatis/mapper/StudentMapper.xml" />
第二,<mapper class="dashuju.mybatis.mapper.StudentMapper"/>
第三,<package name="dashuju.mybatis.mapper"/>
第一种方式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映射文件基础

- resultType="Student"和resultMap="ResultMapStudent"的区别和注意事项:
1)区别,后者会走resulmap并且会执行assiction等语句
2)resultType即使返回是list也是可以处理的
3)Student是别名
二、主键生成

三、参数传递

四、高级映射

ResultMap主要解决:
1)属性值和列名不一致
2)一对一、一对多、多对多
通常,使用ResultType即可,不要滥用ResultMap

五、cache元素

六、动态SQL

七、resultMap元素

八、Collection元素

九、#和$的使用

获取更多资源请关注微信公众号:AKA程序王
mybatis的环境搭建以及问题的更多相关文章
- SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)
1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...
- 基于Maven的Spring + Spring MVC + Mybatis的环境搭建
基于Maven的Spring + Spring MVC + Mybatis的环境搭建项目开发,先将环境先搭建起来.上次做了一个Spring + Spring MVC + Mybatis + Log4J ...
- mybatis学习:mybatis的环境搭建与入门
一.mybatis的概述: mybatis是一个持久层框架,用java编写 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接登繁杂过程 它使用了ORM思想 ...
- 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_1 回顾Mybatis的环境搭建-实现查询所有功能
先回顾Mybits的环境搭建,. 直接next 直接点击finish 创建好的项目. 所有东西都自己写不现实,约束文件的头部还是拷贝过来 导入依赖坐标,Mybits mysql的驱动 log4j 单元 ...
- 项目SpringMVC+Spring+Mybatis 整合环境搭建(2)-> 测试Spring+Mybatis 环境
测试前期准备 第一步:创建easybuy数据库,设置utf-8格式 第二步:创建表test_tb CREATE TABLE `test_tb` ( `id` int(11) NOT NULL AUTO ...
- mybatis的环境搭建
mybatis是一个持久层框架,其主要思想就是想将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置. 使得SQL与程序代码分离,即在不修改程序代码的情况下,直接在配置文件中修改S ...
- 【Mybatis】环境搭建
SqlMapConfig.xml(MyBatis配置文件) <?xml version="1.0" encoding="UTF-8" ?> < ...
- Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能
首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建
创建实体类,实现Serializable接口 属性名和数据库的字段名保持一致 Date字段需要导入包 生成gettter和setter,再生成一个ToString的方法 创建持久层Dao 创建接口 里 ...
随机推荐
- Python 之父的解析器系列之五:左递归 PEG 语法
原题 | Left-recursive PEG grammars 作者 | Guido van Rossum(Python之父) 译者 | 豌豆花下猫("Python猫"公众号作者 ...
- NOIP2003[提高组] 加分二叉树 题解
题意 给出一个有n个节点的二叉树的中序遍历,以当前节点为根的树的分数等于左节点分数* 右节点分数+根节点分数,叶子节点的分数等于它本身,求最大分数,以及分数最大的树的先序遍历 一道区间dp题,因为要求 ...
- 阿里《JAVA实习生入职测试题—2019最新》之答案详解(连载一)
力争清晰完整准确(逐步完善,持续更新) 1.String类为什么是final的 首先分析String的源码: public final class String implements java.io. ...
- stm32f10x基于freeRTOS的低功耗实现
0. 写在前面 没有太多时间更新,可能偶尔有时间就更新一些. 因为突然有项目用到了stm32f10x系列并且是电池驱动的,所以需要对功耗进行优化,其他CM3核心系列应该也同样适用. 1. 背景 Stm ...
- 014 Python基本图形绘制小结
目录 一.Python基本语法元素 1.1 温度转换 二.Python基本图形绘制 2.1 Python蟒蛇绘制 一.Python基本语法元素 缩进.注释.命名.变量.保留字 数据类型.字符串. 整数 ...
- try(){}自动释放资源,AutoCloseable
我们在使用资源的时候,必须关闭资源,比如使用jdbc连接或者inputStream的时候,必须在finally中将资源关闭.然而有的时候我们会忘记关闭资源.那么有没有更好的方法呢? SqlSessio ...
- 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0, Culture=neutral, PublicKeyToken=……”
emmmm~ 这是一个让人烦躁有悲伤的问题~ 背景 我也不知道什么原因,用着用着,正好好的,就突然报了这种问题~ 未能加载文件或程序集“Renci.SshNet, Version=2016.1.0.0 ...
- Android数据列表展示之 RecylerView
一.概述 1.RecyclerView是什么? RecyclerView是一种新的视图组,目标是为任何基于适配器的视图提供相似的渲染方式.该控件用于在有限的窗口中展示大量数据集,它被作为ListVie ...
- zookeeper伪集群
Zookeeper运行需要java环境,需要安装jdk,建议本地下载好需要的安装包然后上传到服务器上面,服务器上面下载速度太慢. 上传 [root@192 ~]# java -version java ...
- 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...