MyBatis框架学习(四)-Mapper代理开发

前言:上次我们一起学习了MyBatis的Mapper代理开发以及原始Dao的开发,这节呢我们继续学习MyBatis的两大核心配置文件mybatis-config.xml和Mapper.xml文件

一、mybatis-config.xml主配置文件详解

1. properties

用于配置数据库的连接数据,这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。

2.setting

全局的配置参数。mybatis中的运行时行为设置 ,比如缓存的开启,驼峰命名的映射,延迟加载的设置等等。
MyBatis框架学习(四)-Mapper代理开发
MyBatis框架学习(四)-Mapper代理开发
在这属性比较多我是从官方文档中截图的,具体的用法不如延迟加载等我们在后面将会学习到

3.别名(typeAliases)

类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。
两种方法:
MyBatis框架学习(四)-Mapper代理开发

4.插件(plugins)

MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。除了用插件来修改 MyBatis 核心行为之外,还可以通过完全覆盖配置类来达到目的。只需继承后覆盖其中的每个方法,再把它传递到 SqlSessionFactoryBuilder.build(myConfig) 方法即可。再次重申,这可能会严重影响 MyBatis 的行为,务请慎之又慎。比如分页插件。

5.配置环境(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。
不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。
所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:
每个数据库对应一个 SqlSessionFactory 实例
为了指定创建哪种环境,只要将它作为可选的参数传递给 SqlSessionFactoryBuilder 即可。可以接受环境配置的两个方法签名是:
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment,properties);
事务管理器(transactionManager):
sqlSession.commit();
注意如何在spring+myBatis的开发环境,则没有必要配置,因为spring会用自带的事务管理器来覆盖前面的配置.
数据源(DataSource):
dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
有三种内建的数据源类型(也就是 type=”[UNPOOLED|POOLED|JNDI]”):
UNPOOLED– 这个数据源的实现只是每次被请求时打开和关闭连接。虽然一点慢,它对在及时可用连接方面没有性能要求的简单应用程序是一个很好的选择。 不同的数据库在这方面表现也是不一样的,所以对某些数据库来说使用连接池并不重要,这个配置也是理想的。但无连接池.UNPOOLED 类型的数据源仅仅需要配置以下 5 种属性:
• driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是JDBC驱动中可能包含的数据源类)。
• url – 这是数据库的 JDBC URL 地址。
• username – 登录数据库的用户名。
• password – 登录数据库的密码。
• defaultTransactionIsolationLevel – 默认的连接事务隔离级别。
作为可选项,你也可以传递属性给数据库驱动。要这样做,属性的前缀为“driver.”,例如:
• driver.encoding=UTF8
这将通过DriverManager.getConnection(url,driverProperties)方法传递值为 UTF8 的 encoding 属性给数据库驱动。
POOLED– 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这是一种使得并发 Web 应用快速响应请求的流行处理方式。有连接池
除了上述提到 UNPOOLED 下的属性外,会有更多属性用来配置 POOLED 的数据源:
映射器:
去哪里找执行的sql语句,一般有三种方式设置:
MyBatis框架学习(四)-Mapper代理开发
推荐用第三种方式

二、Mapper.xml配置文件

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。
Select、insert、update、delete的用法相对都差不多,在这主要讲解parameterType和resultType、resultMap
parameterType:
简单类型的单个参数,主要需求根据id查用户信息
简单类型的多个参数,需求主要通过登录名和密码验证用户是否存在
包装类对象作为输入参数进行查询,需求:根据界面输入的用户名或者登录名查询符合条件的用户名列表

1.多个参数查询:

在接口中添加如下
MyBatis框架学习(四)-Mapper代理开发
配置映射文件
MyBatis框架学习(四)-Mapper代理开发
编写测试文件:
MyBatis框架学习(四)-Mapper代理开发
结果:
MyBatis框架学习(四)-Mapper代理开发

2.包装类的查询

新创建一个UserDto类
MyBatis框架学习(四)-Mapper代理开发
编写接口方法:
MyBatis框架学习(四)-Mapper代理开发
编写映射文件
MyBatis框架学习(四)-Mapper代理开发
测试方法
MyBatis框架学习(四)-Mapper代理开发
结果:
MyBatis框架学习(四)-Mapper代理开发
这就是所谓的模糊查询

3.实现表数量的查询

编写接口方法
MyBatis框架学习(四)-Mapper代理开发
编写映射文件
MyBatis框架学习(四)-Mapper代理开发
测试方法
MyBatis框架学习(四)-Mapper代理开发
结果即为数据库中的数量.
hashMap和resultType对象

1.HashMap实列:

接口方法:
MyBatis框架学习(四)-Mapper代理开发
映射文件:
MyBatis框架学习(四)-Mapper代理开发
测试文件
MyBatis框架学习(四)-Mapper代理开发
结果是一个结果集;
MyBatis框架学习(四)-Mapper代理开发

2.resuletType实列

接口方法
MyBatis框架学习(四)-Mapper代理开发
映射文件
MyBatis框架学习(四)-Mapper代理开发
测试类
MyBatis框架学习(四)-Mapper代理开发
结果
MyBatis框架学习(四)-Mapper代理开发
  下节我们将继续学习MyBatis的动态sql