mapping.xml POJO的映射文件
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心。
1、parameterType(输入类型)
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型。
占位符#{}:
#{}可以防止sql注入。在使用时不需要关心参数值的类型,mybatis会自动进行java类型和jdbc类型的转换。
可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。
sql语句中#{}表示一个占位符即?。
<select id="findUserById" parameterType="int" resultType="user">select * from user where id = #{id}
</select>
占位符${}:
不能防止sql注入。通过{}不能防止sql注入。通过不能防止sql注入。通过{}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,括号中只能是value。有时用{}括号中只能是value。有时用括号中只能是value。有时用{}会非常方便。
<select id="selectUserByName" parameterType="string" resultType="user">select * from user where username like '%${value}%'
</select>
使用#{}则传入的字符串中必须有%号,而%是人为拼接在参数中,显然有点麻烦,如果采用${}在sql中拼接为 %的方式则在调用mapper接口传递参数就方便很多。
如果使用#{}原始符号则必须人为在传参数中加%。
List list = userMapper.selectUserByName("%管理员%");
如果使用%${value}%则不用人为在参数中加%。
Listlist = userMapper.selectUserByName(“管理员”);
parameterType也可以传递pojo对象。Mybatis使用ognl表达式解析对象字段的值,如下例子:
<!—传递pojo对象综合查询用户信息 --><select id="findUserByUser" parameterType="user" resultType="user">select * from user where id=#{id} and username like '%${username}%'</select>
上边%${username}%中的username就是user对象中对应的属性名称。
parameterType还可以传递pojo包装对象(也就是将多个对象包装为一个对象)。开发中通过pojo传递查询条件 ,查询条件是综合的查询条件,不仅包括用户查询条件还包括其它的查询条件(比如将用户购买商品信息也作为查询条件),这时可以使用包装对象传递输入参数。
例如下面的包装对象:
public class QueryVo {private User user;private UserCustom userCustom;
}
在映射文件中的使用
<!—传递pojo包装对象综合查询用户信息 --><select id="findUserByUser" parameterType="queryVo" resultType="user">select * from user where id=#{user.id} and username like '%${user.username}%'</select>
可以看出通过使用类似java中对象访问属性的形式来进行参数传递。
parameterType也可以传递hashmap类型的参数
在xml映射文件中使用形式如下:
<select id="findUserByHashmap" parameterType="hashmap" resultType="user">select * from user where id=#{id} and username like '%${username}%'
</select>
在代码中的调用形式如下:
Public void testFindUserByHashmap()throws Exception{//获取sessionSqlSession 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);//关闭sessionsession.close();
}
这样,可以把参数以key-value的形式传给Mybatis。如果传递的map中的key和xml映射文件的sql语句中解析的key不一致,系统不会报错,但是通过key获取值为空。
2、resultType
使用resultType可以进行输出映射,只有查询出来的列名和pojo中的属性名一致,才可以映射成功。如果查询出来的列名和pojo中的属性名全部不一致,就不会创建pojo对象。但是只要查询出来的列名和pojo中的属性有一个一致,就会创建pojo对象。
resultType可以输出简单类型。例如查询用户信息的综合查询列表总数,通过查询总数和上边用户综合查询列表才可以实现分页。
<!-- 获取用户列表总数 --><select id="findUserCount" parameterType="user" resultType="int">select count(*) from user</select>
resultType可以输出pojo对象和pojo列表。当使用动态代理时,输出pojo对象和输出pojo列表在xml映射文件中定义的resultType是一样的,而生成的动态代理对象中是根据mapper方法的返回值类型确定是调用selectOne(返回单个对象调用)还是selectList (返回集合对象调用 )。
3、resultMap
mybatis中可以使用resultMap完成高级输出结果映射。如果查询出来的列名和定义的pojo属性名不一致,就可以通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。然后使用resultMap作为statement的输出映射类型。resultMap可以实现将查询结果映射为复杂类型的pojo,比如在查询结果映射对象中包括pojo和list实现一对一查询和一对多查询。这里先不做具体详述,有兴趣的可以参看Mybatis的官方文档。
mapping.xml POJO的映射文件相关推荐
- Mapper.xml映射文件---Mybatis学习笔记(八)
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. parameterType(输入类型) 1.#{}与${} #{}实现的是 ...
- 前几天用AnnotationSessionFactoryBean 注解方式代替*.hbm.xml时扫描映射实休文件后报错
吐操一下.Hibernate真心配置麻烦.不是VO. 是sessionFactory Hibernate版本 支持 hibernate-jpa-2.0-api-1.0.0.Final.jar hibe ...
- Mybatis3 (2)xml映射文件
SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是 ...
- MyBatis自动生成实体类、DAO接口和Mapping映射文件的代码(逆向工程)
MyBatis属于一种半自动的ORM框架,它需要程序员自己编写sql语句和映射文件,但是编写映射文件和sql语句很容易出错,所以mybatis官方提供了Generator生成器,自动生成DAO接口.实 ...
- 如何用MyBatis-Generator自动创建代码(映射生成实体类、DAO接口和Mapping映射文件)
如何用MyBatis自动生成实体类.DAO接口和Mapping映射文件 引言: 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBa ...
- mysql如何配置hbm.xml_配置数据库映射文件hbm.xml
在数据库映射方面,guzz支持类似hibernate的领域对象class-table映射.也支持ibatis类似的在guzz.xml中映射. hibernate的hbm.xml映射 guzz兼容hib ...
- 用Hibernate Tools生成Hibernate Mapping映射文件
用Hibernate Tools生成Hibernate Mapping映射文件 Eclipse中要集成安装Hibernate Tools组件 如果没有,请查看:Eclipse juno 中安装 JBo ...
- 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...
解决问题: 可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件. 测试环境准备: 新建一个mysql数据库,例如mungerzTest. 生成一张主键为自增ID的学生表: C ...
- Mybatis学习--Mapper.xml映射文件
简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...
最新文章
- html标签的赋值与取值
- 一年成为emacs高手
- python—多线程之守护线程
- imu与gps之间的时间戳_一个时间戳精度问题,引发了一个MySQL血案
- uniSWF使用注意事项
- linux 杀掉php,Linux_在Linux系统中使用xkill命令杀掉未响应的进程,我们如何在Linux中杀掉一个资 - phpStudy...
- java 语法 泛型_java-解密泛型语法
- c# abstract抽象类与继承类子类的构造函数_base
- 如何查看xbox账号所在服务器,Xbox账号绑定教程
- 01.Dem数据提取高程
- 【字符编码】Unicode字符集与字符编码方式
- html视频播放错误怎么办,如何解决播放视频错误代码0xc00d36c4
- 纯css实现各种箭头图片效果
- 用accelstepper库控制28BYJ-48步进电机(快慢运动切换)
- 如何进bios设置ssd固态硬盘为第一启动
- uniapp授权登录微信支付宝小程序获取code和基础信息
- 我亲爱的朋友们_亲爱的lazyweb-我该如何处理所有电子邮件?
- mysql转化为GaussDB_gaussDB数据库常用操作命令
- 创维linux怎么连接wifi,创维酷开电视多屏互动Miracast玩法详解
- 为机器学习模型设置最佳阈值:0.5是二元分类的最佳阈值吗