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连接池分类
- 可以看出 Mybatis 将它自己的数据源分为三类:
1.UNPOOLED 不使用连接池的数据源
2.POOLED 使用传统的javax.sql.DataSource规范中的连接池
3.JNDI 使用 JNDI 实现的数据源 - 具体结构如下:
- 相应地,MyBatis 内部分别定义了实现了 java.sql.DataSource接口的 UnpooledDataSource,PooledDataSource 类来表示 UNPOOLED、 POOLED 类型的数 据源。
- 在这三种数据源中,我们一般采用的是 POOLED 数据源(很多时候我们所说的数据源就是 为了更好的管理数据库连接,也就是我们所说的连接池技术) 。
03_environments标签
- 在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>