一.配置Mybatis的全局配置文件sqlMapConfig.xml

上篇文章Mybatis-02-对数据库的基本操作中sqlMapConfig.xml文件的配置内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><properties resource="jdbc.properties"/><environments default="development"><environment id="development"><!-- 使用jdbc事务管理 --><transactionManager type="JDBC" /><!-- 数据库连接池 --><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url"value="jdbc:mysql://localhost:3306/babasport?characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="123" /></dataSource></environment></environments><!-- Mapper的位置  Mapper.xml 写Sql语句的文件的位置 --><mappers><mapper resource="BbsEmployeeMapper.xml"></mapper></mappers></configuration>

配置了基本的配置信息,可以用来完成对数据库的增删改查

一个sqlMapConfig.xml文件最完整的配置内容按顺序排列如下:

1.properties(属性)
2.settings(全局配置参数)
3.typeAliases(类型别名)
4.typeHandlers(类型处理器)
5.objectFactory(对象工厂)
6.plugins(插件)
7.environments(环境集合属性对象)7.1 environment(环境子属性对象)7.1.1 transactionManager(事务管理)7.1.2 dataSource(数据源)
8.mappers(映射器)

其中1,7,8项为必须配置,其他项为可选配置

1.properties配置

1.1< properties >标签是sqlMapConfig.xml文件用来引用外部Java属性文件中的配置信息的标签

    <properties resource="db.properties"></properties>

上述代码引入了一个属性文件db.properties文件,加载了这个外部文件中的配置信息

    <environments default="development"><environment id="development"><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /></dataSource></environment></environments>

在7环境配置中调用了加载进来的配置信息

1.2< properties >< /properties >标签内也可以用字标签< propertie >< /propertie >定义属性,例如:

    <properties resource="db.properties"><property name="jdbc.username" value="root" /><property name="jdbc.password" value="root" /></properties>

如果外部配置文件有该属性,则内部定义属性被外部属性覆盖
Mybatis读取properties 配置信息的顺序:
先读取properties 元素体内定义的属性。
再读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。

2.typeAliases配置

2.1typeAliases配置的作用示例:

原mapper.xml中的SQL

    <select id="query1" parameterType="String"resultType="com.sandking.mybatis.pojo.BbsEmployee">SELECT * FROM `bbs_employee` WHERE username LIKE #{username}</select>

sqlMapConfig.xml中添加typeAliases配置

    <typeAliases><!-- 为一个持久化类定义别名 --><typeAlias alias="user" type="com.sandking.mybatis.pojo.BbsEmployee" /><package name="BbsEmployee" /></typeAliases>

sqlMapConfig.xml添加typeAliases配置后mapper.xml文件中做相应更改

    <select id="query1" parameterType="String"resultType="BbsEmployee">SELECT * FROM `bbs_employee` WHERE username LIKE #{username}</select>

从上述例子可以看出,typeAliases配置用来简化mapper.xml中SQL的结果集和参数配置(就是把名字改短一点)

2.2Mybatis默认支持的参数别名

2.3批量配置别名

    <typeAliases><!-- 批量别名定义,扫描整个包下的类,别名为类名(大小写不敏感) --><package name="cn.itcast.mybatis.pojo" /><package name="其它包" /></typeAliases>

3.mappers配置

用来配置mapper.xml文件,将其配置加载进sqlMapConfig.xml文件,共有3种方式

3.1< mapper resource=” ” />

使用相对于项目资源路径(不常用)
< mapper resource=”BbsEmployeeMapper.xml”>< /mapper>

3.2 < mapper class=” ” />

使用mapper接口类路径
< mapper class=”com.sandking.mybatis.mapper.BbsEmployeeMapper”/>
此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。(不常用)

3.3 < package name=”“/>

注册指定包下的所有mapper接口
< package name=”com.sandking.mybatis.mapper”/>
此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。(常用)

二.Mybatis的主要API

1.SqlSessionFactoryBuilder

SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory创建的。所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
SqlSessionFactoryBuilder部分源码:

public class SqlSessionFactoryBuilder {public SqlSessionFactory build(Reader reader, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);} finally {ErrorContext.instance().reset();try {reader.close();} catch (IOException e) {// Intentionally ignore. Prefer previous error.}}}public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {try {XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);return build(parser.parse());} catch (Exception e) {throw ExceptionFactory.wrapException("Error building SqlSession.", e);} finally {ErrorContext.instance().reset();try {inputStream.close();} catch (IOException e) {// Intentionally ignore. Prefer previous error.}}}}

SqlSessionFactoryBuilder类中全是build方法,它们的参数不同,都返回一个SqlSessionFactory对象。以上两个方法是SqlSessionFactoryBuilder类最重要的两个方法,其他方法都调用了这两个方法中的一种。所以说SqlSessionFactoryBuilder类有两种创建SqlSessionFactory的方式,即Reader或InputStream加载配置文件创建SqlSessionFactory

2.SqlSessionFactory

SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory

SqlSessionFactory接口源码:

public interface SqlSessionFactory {SqlSession openSession();SqlSession openSession(boolean autoCommit);SqlSession openSession(Connection connection);SqlSession openSession(TransactionIsolationLevel level);SqlSession openSession(ExecutorType execType);SqlSession openSession(ExecutorType execType, boolean autoCommit);SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);SqlSession openSession(ExecutorType execType, Connection connection);Configuration getConfiguration();}

DefaultSqlSessionFactory类是SqlSessionFactory接口的一个实现类,它的部分源码:

public class DefaultSqlSessionFactory implements SqlSessionFactory {private final Configuration configuration;public DefaultSqlSessionFactory(Configuration configuration) {this.configuration = configuration;}public SqlSession openSession() {return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}......

3.SqlSession

SqlSession是一个面向用户的接口,sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。

SqlSession接口的部分源码:

public interface SqlSession extends Closeable {//操作数据库的方法<T> T selectOne(String statement);<T> T selectOne(String statement, Object parameter);<E> List<E> selectList(String statement);int insert(String statement, Object parameter);int update(String statement, Object parameter);int delete(String statement, Object parameter);//和事务相关的方法void commit();void rollback();....<T> T getMapper(Class<T> type);Connection getConnection();
}

Mybatis-03-配置文件及Mybatis主要API详解相关推荐

  1. Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解)(转载)

    Spring MVC+Spring+Mybatis实现支付宝支付功能(图文详解) 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将 ...

  2. EXT核心API详解(二)-Array/Date/Function/Number/String

    EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o )  Number object是否在数组中,找不到返 ...

  3. ext核心API详解

    http://hi.baidu.com/j2me/profile 1 EXT核心API详解(一)-Ext 1 EXT核心API详解(二)-Array/Date/Function/Number/Stri ...

  4. 百度PaddleOCR及云平台OCR API详解及示例

    百度PaddleOCR及云平台OCR API详解及示例 目录 百度PaddleOCR及云平台OCR API详解及示例 使用百度开源的PaddleOCR 多个开源代码库比较

  5. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java 8引入 ...

  6. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  7. Android复习14【高级编程:推荐网址、抠图片上的某一角下来、Bitmap引起的OOM问题、三个绘图工具类详解、画线条、Canvas API详解(平移、旋转、缩放、倾斜)、矩阵详解】

    目   录 推荐网址 抠图片上的某一角下来 8.2.2 Bitmap引起的OOM问题 8.3.1 三个绘图工具类详解 画线条 8.3.16 Canvas API详解(Part 1) 1.transla ...

  8. ServletFileUpload API详解

    ServletFileUpload1.ServletFileUpload upload=new ServletFileUpload(factory);创建一个上传工具,指定使用缓存区与临时文件存储位置 ...

  9. DiskFileItemFactory API详解

    核心API介绍1.DiskFileItemFactory作用:可以设置缓存大小以及临时文件保存位置. 默认缓存大小是 10240(10k).临时文件默认存储在系统的临时文件目录下.(可以在环境变量中查 ...

  10. java nio详解,Java NIO API详解

    Java NIO API详解 在JDK 1.4以前,Java的IO操作集中在java.io这个包中,是基于流的阻塞(blocking)API.对于大多数应用来说,这样的API使用很方 便,然而,一些对 ...

最新文章

  1. Linux 入门记录:六、Linux 硬件相关概念(硬盘、磁盘、磁道、柱面、磁头、扇区、分区、MBR、GPT)...
  2. php access control allow origin,js请求跨域问题--Access-Control-Allow-Origin
  3. AD9910高速集成DDS芯片(verilog篇-串行模式篇-22个寄存器SPI通信周期控制)
  4. 网工路由基础(3)RIP原理与配置
  5. FileUpload路径
  6. Spring Boot –适合您的靴子!
  7. 视达配色教程2 好的配色的第一条件是什么
  8. mt950报文解析_MT700报文升级的内容分析及对信用证实务操作的影响
  9. 根据JAVA实体生成SQL建表语句
  10. 第三方支付清算的信息流与资金流
  11. 工作效率的提升——如何高效沟通,有效降低沟通成本
  12. uva1391Astronauts【2-SAT】
  13. photo cs6 2018破解教程
  14. ubuntu 下启用ipv6
  15. dex2oat导致机器很卡的问题分析
  16. Swing实现动画效果(实现Loding动画)【转载】
  17. R三星463无线网卡驱动,声音驱动程序,FN快捷键驱动,Easy_Display_Manager
  18. canvas实现流星特效
  19. 复旦大学教授张军平:极端情况下,人工智能的尽头就是人工
  20. Python-一行输出列表元素

热门文章

  1. 注入dll到explorer.exe中无反应_【干货】制鞋大底生产中常见问题及解决
  2. linux搭建禅道_linux下搭建禅道项目管理系统
  3. git rm -r --cached_程序员一定能用到的git命令:分支+暂存+回退+标签+创建项目仓库...
  4. vs不能调试_20200717调试记录(五十四)
  5. C#:访问web.config中的常量
  6. gifrecord可以卸载吗_频繁安装卸载 App,手机真能受得了吗?!
  7. ChartType 属性 excel图表类型
  8. 触发器的创建和使用(sql2005)
  9. 从零开始搭二维激光SLAM --- 基于g2o的后端优化的代码实现
  10. AO*算法详解,附例子和算法详细步骤