总结一下我在学习与使用MyBatis的知识,以免忘记,也算是对学习过程的总结
一个能跑起来的例子
加入依赖
1 | <dependencies> |
建立一张表,并插入数据
1 | CREATE TABLE `country` ( |
实体类
注意:
实体类中要使用包装类型,不要使用基本数据类型,这一点很重要
1 | public class Country { |
Mapper 接口。MyBatis 使用 Java 的动态代理,直接通过 Mapper 接口调用相应的方法,不需要接口实现类
1 | public interface CountryMapper { |
Mapper 配置,放在 resources/mapper/CountryMapper.xml
<mapper>
标签的 namespace
指向 Mapper 接口的全名。<select>
的 id
属性指向 Mapper 接口的方法名
1 |
|
数据库连接配置,放在 resources/jdbc.properties
1 | driver=com.mysql.jdbc.Driver |
Mybatis的配置,放在 resources/mybatis-config.xml
1 |
|
测试类
1 | public class Test { |
一个BRAC系统的所需要的表
先建立一个BRAC系统的表为例子,有以下几张表:
1 | /* 用户表 */ |
重点知识
MyBatis 的重点知识,我觉得有以下几个:
- 输入映射
- 输出映射
- 动态SQL
- 关联查询
动态SQL —— WHERE
一句话说明:
用在 where 子句中,负责删除 and 和 or 关键词
有一个产品搜索功能,传入 productId 和 productName 进行搜索。根据 productId 和 productName 是否有值,SQL 语句会有这几种情况
1 | SELECT * FROM product |
这种情况的话,可以用 <where>
和 <if>
标签
1 | select |
<where>
标签遇到 SQL 拼接结果是 where and xxx
或者 where or xxx
的话,会自动将 and
或者是 or
给忽略掉
注意,这里的 and
不能省略,否则 <where>
标签不知道是要添加 and 还是 or
1 | <if test="productId != null"> |
动态SQL —— SET
一句话说明:
用在 set 子句中,负责删除查询语句末尾的逗号
1 | update |
根据 name 与 price 是否有值,有几种情况
1 | update mmall_product set name = 'xxx' where id = xxx; |
<set>
标签可以帮忙把 price = #{price},
和 name = #{name},
末尾的逗号去掉