官网文档地址:mybatis – MyBatis 3 | 配置
一、xxxMapper.xml 的固定内容格式
<?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="dao.UserDao">
<!-- 配置 sql -->
</mapper>
二、配置
SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):
cache
– 该命名空间的缓存配置。cache-ref
– 引用其它命名空间的缓存配置。resultMap
– 描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。parameterMap
– 老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。sql
– 可被其它语句引用的可重用语句块。insert
– 映射插入语句。update
– 映射更新语句。delete
– 映射删除语句。select
– 映射查询语句。
1. 参数
<select id="findUserById" parameterType="int" resultType="user">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
这个语句名为 findUserById,接受一个 int (或 Integer)类型的参数,并返回一个 User 类型的对象,其中的键是列名,值便是结果行中的对应值。
parameterType : 参数类型
resultType :返回值类型
参数符号 :
#{id}
对应的 dao 接口方法 :
public interface UserDao {
/**
* 使用配置文件 查询所有
* @return
*/
List<User> findUserById(int id);
}
2. sql 片段
用于定义sql片段
<sql id="selectUser">select * from testMyBatis.user</sql>
使用
<select id="findAll" resultType="dao.UserDao">
<include refid="selectUser"></include>
</select>
3. 类型别名
<!-- mybatis-config.xml 中 -->
<typeAlias type="domain.User" alias="User"/>
<!-- SQL 映射 XML 中 -->
<select id="findAll" resultType="User">
<include refid="selectUser"></include>
</select>
4. resultMap 结果映射
<!-- 两种解决方式 -->
<!-- 一、起别名 -->
<!-- select id as userId, name as userName ... from ... -->
<!-- 二、配置对应关系 -->
<resultMap id="userMap" type="domain.User">
<!-- 主键字段对应 -->
<id property="userId" column="id"></id>
<!-- 非主键字段对应 -->
<result property="username" column="name"></result>
</resultMap>
<!-- 并将 resultType 改为 resultMap = { resultMap.id } -->
property :对象中的属性名
column :数据库中的字段名
5. 模糊查询
<!-- 模糊查询 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="domain.User">
select * from testMybatis.user where username like #{un}
</select>
三、表关系
一对一
创建 实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {
private int id;
private Date orderTime;
private int total;
// 对应的表对象
private User user;
}
编写 映射配置文件
<mapper namespace="dao.OrderDao">
<!-- resultMap -->
<resultMap id="orderMap" type="order">
<!-- 手动指定字段与实体属性的映射关系 -->
<id property="id" column="oid" />
<result property="orderTime" column="orderTime" />
<result property="total" column="total" />
<!-- 配置关联表 -->
<!-- 方式一 -->
<!-- property: 属性名称, column: 字段名称 -->
<!-- <result property="user.id" column="uid" /> -->
<!-- 方式二 -->
<!-- property: 属性名称, javaType: 当前实体属性的类型 -->
<association property="user" javaType="user">
<id property="id" column="uid" />
<result property="birthday" column="birthday" />
<result property="username" column="username" />
<result property="sex" column="sex" />
<result property="address" column="address" />
</association>
</resultMap>
<!-- sql-->
<select id="findAll" resultMap="orderMap">
select *,o.id oid from orders o,user u where o.uid = u.id
</select>
</mapper>
编写dao接口及测试类
一对多
添加实体类属性( 一的一方 )
private List<Order> orders;
编写 映射配置文件
<resultMap id="userMap" type="user">
<id property="id" column="uid" />
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="sex" column="sex" />
<result property="address" column="address" />
<!-- 配置集合信息 -->
<!--
property: 集合名称
ofType: 当前集合的数据类型
-->
<collection property="orders" ofType="order">
<id property="id" column="oid" />
<result property="orderTime" column="orderTime" />
<result property="total" column="total" />
</collection>
</resultMap>
<select id="findAllAndOrder" resultMap="userMap">
select *,o.id oid from user u, orders o where u.id = o.uid
</select>
编写dao接口及测试类
多对多
添加实体类属性( 需要的一方 )
private List<Role> roles;
编写 映射配置文件 ( 同一对多,多一个中间表 )
<resultMap id="userRole" type="user">
<id property="id" column="userId" />
<result property="username" column="username" />
<result property="birthday" column="birthday" />
<result property="sex" column="sex" />
<result property="address" column="address" />
<collection property="roles" ofType="role">
<id property="id" column="roleId" />
<result property="roleName" column="roleName" />
</collection>
</resultMap>
<select id="findAllAndRole" resultMap="userRole">
select * from user u, user_role ur, role r where u.id = ur.userId and ur.roleId = r.id
</select>
编写dao接口及测试类