1.mybatis概述
1.1mybatis发展过程:
- jdbc->dbutild(queryRunner)->jdbcttemplate:工具,过程:编写sql->预编译->设置参数->执行sql->封装结果
- 框架:整体解决方案
hibernate:全自动全映射orm(object relation mpping):旨在消除sql。全映射体现在:数据表中有100列,javabean就有100个字断,部分映射时困难,导致数据库性能下降。过程:javabean->(黑箱操作:编写sql->预编译->设置参数->执行sql->封装结果->)DbRecords。
这个框架不能按照自己的想法编写sql语句,以及不能sql优化等,由于这些缺点,则出现mybatis。过程:javabean->编写sql->(黑箱操作:预编译->设置参数->执行sql->封装结果->)DbRecords。
Sql与java编码分离,sql是开发人员控制,则mybatis是半自动、轻量级框架
1.2mybatis文档: https://github.com/mybatis-官方网址
mybatis引入包:mybatis-3.4.1(mybatis)
Mysql-connector-java-5.1.38.jar(mysql驱动包)
1.3之前的mybatis
1.3.1之前的mybatis1:
1.使用sqlSessionfactoryBuilder创建sqlSessionfactory
2.使用sqlSessionfactory创建sqlSession,使用sqlSession实例可以直接执行已经映射的sql语句
3.sqlSession中有相应的增删改查方法,以查询为例:
selectOne(第一个参数:sql的唯一标识,即为mapper.xml中namespace+id,第二个参数:执行sql时需要用的参数)
1.3.2之前的mybatis2:接口式编程
1.使用sqlSessionfactoryBuilder创建sqlSessionfactory
2.使用sqlSessionfactory创建sqlSession
3.使用sqlSsssin实例的getMapper(mapper.xml的类型:mapper.class)方法获取接口的实现类对象(sqlSession会为接口自动创建一个代理对象,代理对象执行相应的增删改查操作)
附加:
sqlSession代表和数据库的一次回话,用完必须关闭。它与connection一样,都不是线程安全的,每次使用都需要获取新的对象。
Mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。(将接口和xml文件进行绑定)
1.4Mybatis配置文件------两个重要配置文件:
mybatis的全局配置文件包含数据库连接池信息,事务管理器信息、系统运行环境信息,影响mybatis行为甚深的设置setting和属性properties信息等。(使用配置文件)
sql映射文件,保存了每一个语句的映射信息
1.4.1全局配置文件:
引入dtd约束文件(会有自动提示)http://mabatis.org/dtd/mybatis-3-config.dtd
文件结构如下:
configuration配置、properties属性、setting设置、typeAliases类型命名、typeHandlers类型处理器、objectFactory对象工厂、plugins插件、envrionments环境、envrionment环境变量、transactionManager事务管理器、dataSource数据源、databaseldProvider数据库厂商标识、mappers映射器
- <properties>标签:使用此标签来引入外部properties配置文件的内容;eg:数据源可以使用properties文件
resource:引入类路径下的资源
url:引入网络路径或者磁盘路径下的资源
- <settings>标签:包含很多重要的设置项,setting是用来设置每一个设置项,name是设置项的名称,value是设置项的取值
<settings>//是否开启自动驼峰命名规则映射,eg:A_COLUMN —— aColumn
<setting name=“mapUnderscoreToCamelCase” value=“true”/>
<settings>
- <typeAliases>类型命名:为java类型起别名,默认名称不区分大小写
1.<typeAliases>//为某一个类起别名默认别名是类名小写,eg:com.xxx.bean.Employee—>默认别名是employee,使用alias指定新的别名
<typeAlias type=“com.xxx.bean.Employee” alias=“emp”/>//指定命名之后在mapper.xml中使用
</typeAliases>
2.批量起别名:package为某个包下的所有类批量起别名,name指定包名(为当钱包以及下面所有的后代包的每一个类都起一个默认别名,即类名小写)
<typeAliases> <package name=“com.xxx.bean”/> </typeAliases>
2.1在批量起别名的情况下,使用注解方式@Alias(“emp”),在类上添加注解
--Mybatis为一些类已经取了别名,如下图,下图为部分别名:
--typeHandlers类型处理器:将java类中的属性类型对应数据库表中存储的类型
-----Plugins插件,相当于一个动态代理,以下是四大对象,括号中是各对象中含有的方法
1.执行器:增删改
2.参数处理器:设置参数,获取参数
3.结果集处理器:把查出来的数据处理成javabean对象
4.sql语句处理器
- environments标签:其中environment标签在编写时,必须加transactionManager(事务管理器)和dataSource;
eg:<environments default=“dev”>
<environment id=“”>
<transactionManager type=“”></transactionManager>
<dataSource type=“”></dataSource>
</environment>
</environments>
===事务管理器有两种类型,即有以下两种取值,这两个取值都是别名:
type=“JDBC”
type=“MANAGED”,
另外,自定义事务管理器,需实现TransactionFactory接口,此时type取值为该类的全类名
===数据源有三种取值:
另外,也可以使用自定义数据源,实现dataSourceFactory
- databaseIdProvider,支持多数据库厂商的,作用就是获得数据库厂商的标识(getDatabaseProductName()),mybatis根据数据库厂商标识来执行不同的sql:
有多商场支持的mapper中,编写的sql标签中需要写相对应的databaseId
- Mappers,将我们写好的sql映射文件一定要注册到mybatis的全局配置文件中
mapper:注册一个sql映射,
Resource:引用类路径下的sql映射文件;(注册配置文件)
<mappers><mapper resource=“mybatis/mapper/xxxmapper.xml”/></mappers>,该方式只需要写对配置文件的路径
还有一种url引用,引用网络路径或者磁盘路径下的sql映射文件(注册配置文件)
class:引用接口(注册接口),⚠️使用该方式,需要接口与xml必须在同一目录下,两个文件必须同名
<mappers><mapper class=“com.xxx.mybatis.dao.xxxmapper”/></mappers>
另:注解方式,不需要相应的mapper.xml的文件,所有的sql都是利用注解写在方法上面的,eg:
此时
=====批量注册 :<mappers> <package name=“”/> </mappers>
*******重要一点,
当该项目打包之后所有的源码会统一放在bin包下,如图一,同包名的也会在同一处地方,如图二: