SQL映射文件详解

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 映射文件的开发需要注意
以下规则。

  1. 习惯上,SQL 映射文件与该 Mapper 接口同名(实体类名+Mapper),并放置在同一包路径下。
  2. 以要映射的 Mapper 接口的完全限定名(即包含包名的完整名称)作为 namespace属性的值。
  3. 接口中的方法名与映射文件中SQL语句映射的ID 一一对应。MyBatis 框架通namespace+lD 确定和接口方法绑定的 SOL语句。
  4. 在不同的 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);
        }
    }

下次一定补阿巴阿巴!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值