01_SqlMapConfig.xml配置文件解释

A.官方说明文档
http://www.mybatis.org/mybatis-3/zh/configuration.htmlB.SqlMapConfig.xml中配置的内容和顺序如下:

  • properties(属性)
  • settings(设置)
  • typeAliases(类型别名)
  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
  • environments(环境配置)
    environment(环境变量)
    transactionManager(事务管理器)
    dataSource(数据源)
  • databaseIdProvider(数据库厂商标识)
  • mappers(映射器)

C.常用属性

  • properties
  • settings
  • typeAliases
  • mappers

02_Mybatis连接池

  • 在Mybatis中也有连接池技术,但是它采用的是自己的连接池技术。在 Mybatis 的 SqlMapConfig.xml配置文件中,通过<dataSourcetype=“pooled”>来实现Mybatis 中连接池 的配置。
  • Mybatis连接池分类
  • springboot mybatis mysql yml 连接池 连接数量_sql

  • 可以看出 Mybatis 将它自己的数据源分为三类:
    1.UNPOOLED 不使用连接池的数据源
    2.POOLED 使用传统的javax.sql.DataSource规范中的连接池
    3.JNDI 使用 JNDI 实现的数据源
  • 具体结构如下:

springboot mybatis mysql yml 连接池 连接数量_连接池_02

  • 相应地,MyBatis 内部分别定义了实现了 java.sql.DataSource接口的 UnpooledDataSource,PooledDataSource 类来表示 UNPOOLED、 POOLED 类型的数 据源。
  • 在这三种数据源中,我们一般采用的是 POOLED 数据源(很多时候我们所说的数据源就是 为了更好的管理数据库连接,也就是我们所说的连接池技术) 。

03_environments标签

springboot mybatis mysql yml 连接池 连接数量_java_03

  • 在environments标签中,可以有多个environment子标签

transactionManager标签

  • 配置mybatis的事务管理器
  • JDBC:依赖于从数据源得到的连接来管理事务
  • MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个事务,而是让容器来管理事 务的整个生命周期.

dataSource标签

  • 设置数据源
  • UNPOOLED:没有使用连接池,每次使用时新建一个连接,使用完后销毁连接
  • POOLED:使用连接池 演示代码
<environments default="development1"> 
	<environment id="development1"> 
		<transactionManager type="JDBC"> 
		</transactionManager> 
		<dataSource type="POOLED"> 
			<property name="driver" value="${driverClass}"/> 
			<property name="url" value="${jdbcUrl}"/> 
			<property name="username" value="${user}"/> 
			<property name="password" value="${password}"/> 
		</dataSource> 
	</environment> 
	
	<environment id="development2"> 
		<transactionManager type="MANAGED"> 
		</transactionManager> 
		<dataSource type="UNPOOLED"> 
			<property name="driver" value="${driverClass}"/> 
			<property name="url" value="${jdbcUrl}"/> 
			<property name="username" value="${user}"/> 
			<property name="password" value="${password}"/> 
		</dataSource> 
	</environment> 
</environments>

04_properties标签

配置mybatis属性值配置

  • 方式一: 直接在properties标签中配置
  • 方式二: 在外部配置文件配置,通过properties标签加载
  • 方式一和方式二,方式二的优先级更高

方式一

<properties resource="jdbc.properties"> 
	<property name="driverClass" value="com.mysql.jdbc.Driver"/> 
	<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/day27"/> 
	<property name="user" value="root"/> 
	<property name="password" value="root"/> 
</properties>

方式二

<properties resource="jdbc.properties"> 

</properties>

不管是方式1还是方式2,都使用${}调用

<environments default="development"> 
	<environment id="development"> 
		<transactionManager type="JDBC"> 
		</transactionManager> 
		<dataSource type="POOLED"> 
			<property name="driver" value="${driverClass}"/> 
			<property name="url" value="${jdbcUrl}"/> 
			<property name="username" value="${user}"/> 
			<property name="password" value="${password}"/> 
		</dataSource> 
	</environment> 
</environments>

05_typeAliases标签

为 Java 类型设置一个别名

  • 方式一: 给指定类设置别名
  • 方式二: 给指定包下的所有类设置别名

方式一

<typeAliases> 
	<typeAlias type="com.qzw.bean.User" alias="user"></typeAlias> 
</typeAliases>

方式二

<typeAliases> 
	<package name="com.qzw.bean"/> 
</typeAliases>

06_mappers标签

<mapper resource="" />:使用相对于类路径的资源

  • 如:<mapper resource="user.xml" />

<mapper class="" />:使用接口类路径

  • 如:<mapper class="com.qzw.dao.UserDao"/>
  • 注意:要求接口名称和映射文件名称相同,且放在同一个目录中。

<package name=""/>:注册指定包下的所有接口

  • 如:<package name="com.qzw.dao"/>
  • 注意:要求接口名称和映射文件名称相同,且放在同一个目录中。

07_核心配置文件之plugins插件

MyBatis可以使用第三方的插件对功能进行扩展,分页助手PageHelper是将分页的复杂操作进行 封装,使用简单的方式即可获得分页的相关数据

开发步骤

  • 1.导入PageHelper包
  • 2.在Mybatis核心配置文件中配置PageHelper插件
  • 3.测试分页数据

在Mybatis核心配置文件中配置PageHelper插件

<plugins> 
	<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin> 
</plugins>

代码测试
只需要在查询数据库之前,使用startPage(int pageNum, int pageSize)方法

... 

PageHelper.startPage(1,2); 

...

08_映射配置文件之parameterType属性

给sql语句传入参数。将会传入这条语句的参数类的完全限定名或别名。这个属性是可选的。默认值为未设置

paramType参数的类型

  • 简单数据类型
    包含int,String等。只能传入一个参数。
  • 复杂数据类型
    javaBean实体类, Map。可以传入多个参数

案例演示

  • 根据id查询用户
  • 根据账户和密码查询用户
//映射文件 
<select id="selectUserByUsernameAndPassword" parameterType="user" resultType="user"> 
	select * from tb_user where username = #{username} and password = #{password} 
</select> 

<select id="selectUserByUsernameAndPassword1" parameterType="map" resultType="user"> 
	select * from tb_user where username = #{username} and password = #{password} 
</select> 

//测试代码 
@Test 
public void selectUserByUsernameAndPassword() throws Exception { 
	...... 
	User user = new User(); 
	user.setUsername("wangwu"); 
	user.setPassword("wangwu"); 
	List<User> userList = userDao.selectUserByUsernameAndPassword(user); 
	...... 
}

@Test 
public void selectUserByUsernameAndPassword1() throws Exception { 
	...... 
	Map<String,String> map = new HashMap<>(); 
	map.put("username","wangwu"); 
	map.put("password","wangwu"); 
	List<User> userList = userDao.selectUserByUsernameAndPassword1(map); 
	...... 
}

09_映射配置文件之resultType属性

  • sql语句执行后返回结果类型。从这条语句中返回的期望类型的类的完全限定名或别名。
  • resultType参数的类型
    1.返回JavaBean类型
    2.返回List类型
    3.返回Map类型

案例演示

  • resultType为map,返回单条记录,key为属性名,值为属性值。
<select id="selectUserById" parameterType="int" resultType="map"> 
	select * from tb_user where id = #{id} 
</select>
  • resultType为map,返回多条记录,key为任意一属性,值为对象类型,不过key需要通过 @MapKey(“hotelName”)指定对象中一个属性名为key
//映射文件 
<select id="selectUserList" resultType="map"> 
	select * from tb_user 
</select> 

//dao代码 
@MapKey("id") 
Map<Integer,Object> selectUserList() throws Exception;

10_映射配置文件-resultMap属性

  • resultType可以将查询结果映射为pojo,但需要pojo类的属性名和sql查询的字段名称一致方可映射成功。
  • 如果sql查询字段名和pojo类的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系.
  • resultMap可以实现将查询结果映射为复杂类型的pojo,比如实现一对一查询和一对多查询。

11_映射配置文件-sql片段

在开发中,SQL的拼接很常见,有很多的sql具有重复性高的特点,这时最好把重复的sql抽取出来,作为公用的sql片段。

语法

  • 定义sql片段
<sql id="片段名"> 
	sql语句 
</sql>

引用sql片段

<include refid="片段名"></include>