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映射文件基础

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

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

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

3)Student是别名

二、主键生成

三、参数传递

四、高级映射

ResultMap主要解决:

1)属性值和列名不一致

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

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

五、cache元素

六、动态SQL

七、resultMap元素

八、Collection元素

九、#和$的使用

获取更多资源请关注微信公众号:AKA程序王

mybatis的环境搭建以及问题的更多相关文章

  1. SSM(Spring+SpringMVC+Mybatis)框架环境搭建(整合步骤)(一)

    1. 前言 最近在写毕设过程中,重新梳理了一遍SSM框架,特此记录一下. 附上源码:https://gitee.com/niceyoo/jeenotes-ssm 2. 概述 在写代码之前我们先了解一下 ...

  2. 基于Maven的Spring + Spring MVC + Mybatis的环境搭建

    基于Maven的Spring + Spring MVC + Mybatis的环境搭建项目开发,先将环境先搭建起来.上次做了一个Spring + Spring MVC + Mybatis + Log4J ...

  3. mybatis学习:mybatis的环境搭建与入门

    一.mybatis的概述: mybatis是一个持久层框架,用java编写 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接登繁杂过程 它使用了ORM思想 ...

  4. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_1 回顾Mybatis的环境搭建-实现查询所有功能

    先回顾Mybits的环境搭建,. 直接next 直接点击finish 创建好的项目. 所有东西都自己写不现实,约束文件的头部还是拷贝过来 导入依赖坐标,Mybits mysql的驱动 log4j 单元 ...

  5. 项目SpringMVC+Spring+Mybatis 整合环境搭建(2)-> 测试Spring+Mybatis 环境

    测试前期准备 第一步:创建easybuy数据库,设置utf-8格式 第二步:创建表test_tb CREATE TABLE `test_tb` ( `id` int(11) NOT NULL AUTO ...

  6. mybatis的环境搭建

    mybatis是一个持久层框架,其主要思想就是想将程序中大量的SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置. 使得SQL与程序代码分离,即在不修改程序代码的情况下,直接在配置文件中修改S ...

  7. 【Mybatis】环境搭建

    SqlMapConfig.xml(MyBatis配置文件) <?xml version="1.0" encoding="UTF-8" ?> < ...

  8. Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能

    首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...

  9. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_06.mybatis的环境搭建

    创建实体类,实现Serializable接口 属性名和数据库的字段名保持一致 Date字段需要导入包 生成gettter和setter,再生成一个ToString的方法 创建持久层Dao 创建接口 里 ...

随机推荐

  1. 面试加分项-HashMap源码中这些常量的设计目的

    前言 之前周会技术分享,一位同事讲解了HashMap的源码,涉及到一些常量设计的目的,本文将谈谈这些常量为何这样设计,希望大家有所收获. HashMap默认初始化大小为什么是1 << 4( ...

  2. Fiddler 手机爬虫

    Fiddler抓包工具 配置Fiddler 添加证书信任,Tools - Options - HTTPS,勾选 Decrypt Https Traffic 后弹出窗口,一路确认 ...from bro ...

  3. 关于jpa的Specification自定义函数,实现oracle的decode;以及如何在静态方法中调用注入的service

    如何在静态方法中调用注入的service Public class ClassA{ public static ClassA classA; @Resource private Service ser ...

  4. Python学习之旅:用Python制作一个打字训练小工具

    一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...

  5. UGUI_关卡选项界面

    1.Image组件—“Source Image”,Set Native Size. 2.Image组件—“Image Type”——Sliced 编辑要放大缩小的图片,Sprite Editor,采用 ...

  6. Spring 7大模块的解说

    先看以下Spring的组成图: 7大模块包括:core.AOP.ORM.DAO.WEB.Context.WebMvc. 1:core:spring的容器,主要组成是BeanFactury.也是Spri ...

  7. Day 19 磁盘管理

    1.磁盘的基本概念 1.什么是磁盘 磁盘(disk)是指利用磁记录技术存储数据的存储器. 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失. *绝大多数人对硬盘都不陌 ...

  8. 29道Zookeeper面试题超详细(附答案)

    原文链接 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件 ...

  9. [Linux] CentOS 显示 -bash: vim: command not found

    转载自:https://www.cnblogs.com/wenqiangwu/p/3288349.html i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim ...

  10. github博客Hexo引流到微信

    相信有不少小伙伴都在github上创建了属于自己的博客,其中用Hexo的Next主题应该不少,那么,我们究竟该如何将博客的流量引流到微信呢?今天就来带你看一看. 如何引流 现在网上有一种套路,当你在看 ...