一 . XxxMapper.xml 映射器的使用
在MyBatis 中,将Dao层的接口与对应的Mapper.xml 配置文件进行组合使用,而不是以前的接口实现类处理。 这里着重讲解一下,这个配置文件的使用。 将XxxMapper.xml 放置在与接口XxxMapper.java 同级的目录下。
一.一 Schema约束
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
当然,前面不要忘记 xml文件的头部。
<?xml version="1.0" encoding="UTF-8"?>
一.二 Mapper 根节点
有一个根节点,是mapper, 里面只有一个属性, namespace, 命名空间。 后面跟的值一般为其所在的包路径,或者说是XxxMapper.java 接口所在的包路径。
<mapper namespace="com.yjl.mapper.UserMapper" >
一.三 下属节点
在根节点 mapper 下的节点有:
1.select 最常用,最复杂的元素之一, 可以自定义参数,返回结果集。
2.insert 插入语句 返回所影响的行数
3.update 更新语句 返回所影响的行数
4.delete 删除语句 返回所影响的行数
5.sql 定义一部分sql,构成sql 片段,然后在各个语句中引用。
6.resultMap 从结果集中来加载对象,最复杂也是最强大的元素,提供了映射的规则。
7.cache 给定命名空间的缓存配置
8.cache-ref 其他命名空间缓存配置的引用
其中,有一个parameterMap ,已经被放弃使用了。
二. Select 元素的配置
数据库数据为:
在以前的mapper 映射中:
<select id="getById" parameterType="int" resultType="user"> <!-- 设置别名 --> select * from user where id=#{id} </select>
select 下面有 id属性,parameterType 参数类型, resultType 结果类型属性等节点, 这些不同的节点表示不同的作用与意义。 除了这些之外,还有其他的节点属性。 只需要记住一些常见的节点即可。
二.一 所属节点
下面就开始讲解 select元素的常见使用。
二.二 like 的用法查询记录的数量
在UserMapper.java 接口中:
public int countByName(String name);
在UserMapper.xml 配置中其对应的配置语句为:
<!-- 传入参数查询数目 --> <select id="countByName" parameterType="string" resultType="int"> <!--单个的,可以用value 来接收--> select count(*) from user where name like '${value}' </select>
测试方法为:
@Test public void countByNameTest(){ SqlSession sqlSession=SqlSessionFactoryUtils.getSession(); UserMapper userMapper=sqlSession.getMapper(UserMapper.class); int count=userMapper.countByName("%蝴蝶%"); System.out.println("输出数目为:"+count); }
控制台显示为:
缺点, 上面传入的参数 需要自己手动拼接 %% 连接符, 用户只需要传入参数即可。 真正的拼接,应该放在数据库去完成。 每个数据库都有自己对应的字符串拼接方式。 mysql 可以使用 concat() 函数, oracle 可以使用 || .
<!-- 传入参数查询数目 --> <select id="countByName" parameterType="string" resultType="int"> select count(*) from user where name like concat('%',#{name},'%') </select>
上面是两个%%的形式,如果是前% 为 concat(’%’,#{name}), 后%为 concat(#{name},’%’);