入门篇
编码流程
1. 编写全局配置文件:SqlMapConfifig.xml
2. 映射文件:xxxMapper.xml
3. 编写dao代码:xxxDao接口、xxxDaoImpl实现类
4. POJO类
5. 单元测试类
添加用户
#{}:是通过反射获取数据的---StaticSqlSource
${}:是通过OGNL表达式会随着对象的嵌套而相应的发生层级变化 --DynamicSqlSource
映射文件
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.kkb.mybatis.po.User">
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
OGNL
对象导航图语言
|---User(参数值对象)
|--username--张三
|--birthday
|--sex--男
|--dept -- Department
|--name
|--no
OGNL表达式去获取Department对象的name属性:dept.name
基础应用篇
mapper代理开发方式
此处使用的是JDK的动态代理方式,延迟加载使用的cglib动态代理方式
代理理解
代理分为静态代理和动态代理。此处先不说静态代理,因为Mybatis中使用的代理方式是动态代理。
动态代理分为两种方式:
基于JDK的动态代理--针对有接口的类进行动态代理
基于CGLIB的动态代理--通过子类继承父类的方式去进行代理。
XML方式
开发方式
只需要开发Mapper接口(dao接口)和Mapper映射文件,不需要编写实现类。
开发规范
Mapper接口开发方式需要遵循以下规范:
1、 Mapper接口的类路径与Mapper.xml文件中的namespace相同。
2、 Mapper接口方法名称和Mapper.xml中定义的每个statement的id相同。
3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相
同。
4、 Mapper接口方法的返回值类型和mapper.xml中定义的每个sql的resultType的类型相同。
mapper映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kkb.mybatis.mapper.UserMapper">
<!-- 根据id获取用户信息 -->
<select id="findUserById" parameterType="int"
resultType="com.kkb.mybatis.po.User">
select * from user where id = #{id}
</select>
</mapper>
mapper接口
/**
* 用户管理mapper
*/
public interface UserMapper {
//根据用户id查询用户信息
public User findUserById(int id) throws Exception;
}
全局配置文件中加载映射文件
<!-- 加载映射文件 -->
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
全局配置文件
配置内容
SqlMapConfifig.xml中配置的内容和顺序如下:
properties(属性)
settings(全局配置参数)
typeAliases(类型别名)
typeHandlers(类型处理器)--Java类型--JDBC类型--->数据库类型转换
objectFactory(对象工厂)
plugins(插件)--可以在Mybatis执行SQL语句的流程中,横叉一脚去实现一些功能增强,比如
PageHelper分页插件,就是第三方实现的一个插件
environments(环境集合属性对象)
environment(环境子属性对象)
transactionManager(事务管理)
dataSource(数据源)
mappers(映射器)
properties标签
SqlMapConfifig.xml可以引用java属性文件中的配置信息。
1、在classpath下定义db.properties文件,
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
2、在SqlMapConfifig.xml文件中,引用db.properties中的属性,具体如下:
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
properties标签除了可以使用resource属性,引用properties文件中的属性。还可以在properties标签
内定义property子标签来定义属性和属性值,具体如下:
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
</properties>
注意: MyBatis 将按照下面的顺序来加载属性:
读取properties 元素体内定义的属性。
读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
typeAlias标签
别名的作用:就是为了简化映射文件中parameterType和ResultType中的POJO类型名称编写。
默认支持别名
自定义别名
在SqlMapConfifig.xml中进行如下配置:
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="com.kkb.mybatis.po.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="com.kkb.mybatis.po"/>
</typeAliases>
mappers标签
<mapper resource=""/>
<mapper url="">
使用绝对路径加载资源
如:
<mapper url="file://d:/sqlmap/User.xml" />
<mapper class=""/>
使用mapper接口类路径,加载映射文件。
如:
<mapper class="com.kkb.mybatis.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
<package name=""/>
注册指定包下的所有mapper接口,来加载映射文件。
如:
<package name="com.kkb.mybatis.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
输入映射和输出映射
parameterType(输入类型)
parameterType属性可以映射的输入参数Java类型有:简单类型、POJO类型、Map类型、List类型
(数组)。
Map类型和POJO类型的用法类似,本课程只讲POJO类型的相关配置。
List类型在动态SQL部分进行讲解。
resultType(输出类型)
resultType属性可以映射的java类型有:简单类型、POJO类型、Map类型。
不过Map类型和POJO类型的使用情况类似,所以只需讲解POJO类型即可。
使用要求
使用resultType进行输出映射时,要求sql语句中查询的列名和要映射的pojo的属性名一致。