首先先介绍下SQL映射下的几个顶级元素
SQL映射文件的几个顶级元素
- select – 映射查询语句
- insert – 映射插入语句
- delete – 映射删除语句
- update – 映射更新语句
- cache – 配置给定命名空间的缓存
- cache-ref – 从其他命名空间引用缓存配置
- resultMap – 用来描述数据库结果集和对象的对应关系
- sql – 可以重用的SQL块,也可以被其他语句引用
- mapper – namespace
resultType 和 resultMap有什么区别
- ResultType对应entity中的一个对象
ResultMap也是返回值类型,但是范围要大于ResultType,可以存键值对
MyBatis 核心对象的生命周期
- 工人 SqlSessionFatcoryBuilder 它的最佳生命周期在方法体内(局部变量)只要做完增删改查的操作就会销毁
- 工厂 SqlSessionFatcory 它的最佳生命周期是从应用服务启动开始到应用服务程序结束(整个应用内)
- 产品 SqlSession 一次会话的请求 每做一次查询都会开启一次 和销毁一次
查询的操作
单元测试依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
在 mybatis-config.xml里面配置打印日志可以在单元测试清晰看见SQL语句
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
查询所有用户
- 没有条件的时候的查询方法
UserMapper接口方法
/**
* 查询所有用户
* @return
*/
public List<SysUser> getUserList();
UserMapper.xml SQL
<select id="getUserList" resultType="sysuer">
select * from t_sys_user
</select>
- 有多个查询条件时候的查询方法
/**
* 根据用户名称和用户角色进行查询
* 多个参数的时候一定要加上@Param才能实现查询,不然会报错
* @return
*/
List<User> findByUserNameAndUserRole(@Param("userName") String userName,@Param("userRole") Integer userRole);
<select id="findByUserNameAndUserRole" resultType="User">
select * from smbms_user where userName like concat("%",#{userName},"%")
and userRole=#{userRole}
</select>
- 也可以用对象入参
/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole1(User user);
<select id="findByUserNameAndUserRole1" resultType="User" parameterType="User">
select * from smbms_user where userName like concat("%",#{username},"%")
and userRole=#{userrole}
</select>
- 还可以封装成map进行传参
/**
* 根据用户名称和用户角色进行查询
* @return
*/
List<User> findByUserNameAndUserRole2(Map<String,Object> map);
<select id="findByUserNameAndUserRole2" resultType="User">
select * from smbms_user where userName like concat("%",#{username},"%")
and userRole=#{userrole}
</select>