mybatis的映射文件
映射文件
1.1输入映射
1.1.1简单类型
参考入门程序之根据用户ID查询用户信息的映射文件
1.1.2Pojo类型
参考入门程序之添加用户的映射文件
1.1.3包装pojo类型
1.1.3.1需求
综合查询时,可能会根据用户信息、商品信息、订单信息等作为条件进行查询,用户信息中的查询条件由:用户的名称和性别进行查询
1.1.3.2创建包装pojo
1.1.3.3映射文件
1.1.3.4Mapper接口
1.1.3.5测试代码
1.1.4Map
同传递POJO对象一样,map的key相当于pojo的属性。
1.1.4.1映射文件
<!-- 传递hashmap综合查询用户信息 -->
<select id="findUserByHashmap" parameterType="hashmap" resultType="user">
select * from user where id=#{id} and username like '%${username}%'
</select>
上边红色标注的是hashmap的key。
1.1.4.2测试代码
Public void testFindUserByHashmap()throws Exception{
//获取session
SqlSession session = sqlSessionFactory.openSession();
//获限mapper接口实例
UserMapper userMapper = session.getMapper(UserMapper.class);
//构造查询条件Hashmap对象
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("id", 1);
map.put("username", "管理员");
//传递Hashmap对象查询用户列表
List<User>list = userMapper.findUserByHashmap(map);
//关闭session
session.close();
}
异常测试:
传递的map中的key和sql中解析的key不一致。
测试结果没有报错,只是通过key获取值为空。
1.2输出映射
1.2.1resultType
1.2.1.1使用要求
使用resultType进行结果映射时,需要查询出的列名和映射的对象的属性名一致,才能映射成功。
如果查询的列名和对象的属性名全部不一致,那么映射的对象为空。
如果查询的列名和对象的属性名有一个一致,那么映射的对象不为空,但是只有映射正确那一个属性才有值。
如果查询的sql的列名有别名,那么这个别名就是和属性映射的列名。
1.2.1.2简单类型
注意,对简单类型的结果映射也是有要求的,查询的列必须是一列,才能映射为简单类型。
1.2.1.2.1需求
综合查询时,需要根据综合查询的添加查询用户的总数
1.2.1.2.2映射文件
1.2.1.2.3Mapper接口
1.2.1.2.4测试代码
1.2.1.3Pojo对象和pojo列表
参考入门程序之根据用户ID查询用户信息和根据用户名称模糊查询用户列表
1.2.2resultMap
1.2.2resultMap
1.2.2resultMap
1.2.2.1使用要求
使用resultMap进行结果映射时,不需要查询的列名和映射的属性名必须一致。但是需要声明一个resultMap,来对列名和属性名进行映射。
1.2.2.2需求
对以下sql查询的结果集进行对象映射
Select id id_,username username_,sex sex_ from user where id = 1;
1.2.2.3映射文件
1.2.2.4Mapper接口
1.2.2.5测试代码
1.2.3动态sql
在mybatis中,它提供了一些动态sql标签,可以让程序员更快的进行mybatis的开发,这些动态sql可以通过sql的可重用性。。
常用的动态sql标签:if标签、where标签、sql片段、foreach标签
1.2.3.1If标签/where标签
1.2.3.1.1需求
综合查询时,查询条件由用户来输入,用户名称可以为空,需要满足这种情况下的sql编写。
1.2.3.1.2映射文件
1.2.3.1.3测试代码
1.2.3.2Sql片段
Sql片段可以让代码有更高的可重用性
Sql片段需要先定义后使用
1.2.3.3Foreach标签
可以循环传入参数值
1.2.3.3.1需求
综合查询时,会根据用户ID集合进行查询
SELECT * FROM USER WHERE id IN (1,2,10)
1.2.3.3.2修改包装pojo
1.2.3.3.3映射文件
1.2.3.3.4测试代码
over~~~
还没有评论,来说两句吧...