1.SQL映射文件
SQL映射是MyBatis框架最具有特色的部分,功能强大且使用简单。
SQL映射文件中的几个顶级元素介绍:
- mapper:SQL映射文件的根元素。只有一个属性 namespace,用于区分不同的 mapper,必须全局唯一
- cache:为给定命名空间配置缓存
- cache-ref:引用其他命名空间中的缓存配置
- resultMap:用来描述查询结果集中的字段和Java 实体类属性的对应关系。
- sql:定义可重用的 SQL语句块,可以在其他语句映射中引用,提高编写和维护 SQL 语句的效率
- insert:映射 insert 语句
- update:映射 update 语句
- delete:映射 delete 语句
- select:映射 select 语句
注意:
MyBats 框架支持面向接口的 SQL 映射编程,这种情况下,SQL 映射文件的开发需要注意
以下规则。
- 习惯上,SQL 映射文件与该 Mapper 接口同名(实体类名+Mapper),并放置在同一包路径下。
- 以要映射的 Mapper 接口的完全限定名(即包含包名的完整名称)作为 namespace属性的值。
- 接口中的方法名与映射文件中SQL语句映射的ID 一一对应。MyBatis 框架通namespace+lD 确定和接口方法绑定的 SOL语句。
- 在不同的 SQL 映射文件中,子元素的 ID 可以相同。
2.MyBatis框架的条件查询
实际项目中的查询操作通常伴随各种条件,那么在MyBatis框架下如何为SQL语句中的查询条件赋值呢?
1.实现单一条件查询
根据用户的真实姓名模糊匹配查询用户信息。
关键代码:
①在SysUserMapper 接口中添加查询方法
/**
* 根据用户的真实姓名模糊查询
*
* @param realName
* @return
*/
List<SysUser> getUsersByRealName(String realName);
②在SysUserMapperxml中添加SQL语句映射:
<!-- 模糊查询用户姓名 -->
<select id="getUsersByRealName" resultType="SysUser" parameterType="String">
select * from t_sys_user where realName like concat('%',#{param},'%')
</select>
③在测试类中添加测试方法:
@Test
public void getUsersByRealName() {
List<SysUser> userList = null;
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(SysUserMapper.class).getUsersByRealName("李");
if (userList != null) {
for (SysUser user : userList) {
logger.debug("查询到的用户列表:" + user.toString());
}
MyBatisUtil.closeSqlSession(sqlSession);
}
}
运行测试方法,结果如图:
2.实现多条件查询
对于多条件查询,MyBatis 框架提供了多种方法实现条件赋值
1.将查询条件封装成 Java 对象作为入参
在 SysUserMapper 接口中添加査询方法,使用 SysUser 类作为参数,使用属性 realName 和roleld封两个查询条件。
关键代码:
/**
* 查询用户列表
*
* @param sysUser
* @return
*/
List<SysUser> getUserListByPojo(SysUser sysUser);
在 SysUserMapper.xml 中添加 SQL语句映射
添加 SQL 映射,使用 SysUser 类作为参数,绑定 realName 和 roleld 属性获取查询条件。
<!-- 查询用户列表 -->
<select id="getUserListByPojo" resultType="SysUser" parameterType="SysUser">
select * from t_sys_user
where realName like concat('%',#{realName},'%')
and roleId = #{roleId}
</select>
测试使用SysUser类型提供查询条件
/**
* 查询用户列表
*/
@Test
public void getUserListByPojo() {
SysUser user = new SysUser();
user.setRealName("李");
user.setRoleId(3);
List<SysUser> userList = null;
sqlSession = MyBatisUtil.createSqlSession();
userList = sqlSession.getMapper(SysUserMapper.class).getUserListByPojo(user);
logger.debug("userList-->" + userList);
if (userList != null) {
for (SysUser sysUser : userList) {
logger.debug("realName=" + sysUser.getRealName());
}
MyBatisUtil.closeSqlSession(sqlSession);
}
}
下次一定补阿巴阿巴!!!