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的映射文件相关推荐

  1. Mapper.xml映射文件---Mybatis学习笔记(八)

    Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. parameterType(输入类型) 1.#{}与${} #{}实现的是 ...

  2. 前几天用AnnotationSessionFactoryBean 注解方式代替*.hbm.xml时扫描映射实休文件后报错

    吐操一下.Hibernate真心配置麻烦.不是VO. 是sessionFactory Hibernate版本 支持 hibernate-jpa-2.0-api-1.0.0.Final.jar hibe ...

  3. Mybatis3 (2)xml映射文件

    SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置. cache-ref – 其他命名空间缓存配置的引用. resultMap – 是最复杂也是 ...

  4. MyBatis自动生成实体类、DAO接口和Mapping映射文件的代码(逆向工程)

    MyBatis属于一种半自动的ORM框架,它需要程序员自己编写sql语句和映射文件,但是编写映射文件和sql语句很容易出错,所以mybatis官方提供了Generator生成器,自动生成DAO接口.实 ...

  5. 如何用MyBatis-Generator自动创建代码(映射生成实体类、DAO接口和Mapping映射文件)

    如何用MyBatis自动生成实体类.DAO接口和Mapping映射文件 引言: 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBa ...

  6. mysql如何配置hbm.xml_配置数据库映射文件hbm.xml

    在数据库映射方面,guzz支持类似hibernate的领域对象class-table映射.也支持ibatis类似的在guzz.xml中映射. hibernate的hbm.xml映射 guzz兼容hib ...

  7. 用Hibernate Tools生成Hibernate Mapping映射文件

    用Hibernate Tools生成Hibernate Mapping映射文件 Eclipse中要集成安装Hibernate Tools组件 如果没有,请查看:Eclipse juno 中安装 JBo ...

  8. 实体类dao接口mysql_利用MyBatis生成器自动生成实体类、DAO接口和Mapping映射文件...

    解决问题: 可利用MyBatis生成器自动生成实体类.DAO接口和Mapping映射文件. 测试环境准备: 新建一个mysql数据库,例如mungerzTest. 生成一张主键为自增ID的学生表: C ...

  9. Mybatis学习--Mapper.xml映射文件

    简介 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 映射文件中有很多属性,常用的就是parameterType(输入类型 ...

最新文章

  1. html标签的赋值与取值
  2. 一年成为emacs高手
  3. python—多线程之守护线程
  4. imu与gps之间的时间戳_一个时间戳精度问题,引发了一个MySQL血案
  5. uniSWF使用注意事项
  6. linux 杀掉php,Linux_在Linux系统中使用xkill命令杀掉未响应的进程,我们如何在Linux中杀掉一个资 - phpStudy...
  7. java 语法 泛型_java-解密泛型语法
  8. c# abstract抽象类与继承类子类的构造函数_base
  9. 如何查看xbox账号所在服务器,Xbox账号绑定教程
  10. 01.Dem数据提取高程
  11. 【字符编码】Unicode字符集与字符编码方式
  12. html视频播放错误怎么办,如何解决播放视频错误代码0xc00d36c4
  13. 纯css实现各种箭头图片效果
  14. 用accelstepper库控制28BYJ-48步进电机(快慢运动切换)
  15. 如何进bios设置ssd固态硬盘为第一启动
  16. uniapp授权登录微信支付宝小程序获取code和基础信息
  17. 我亲爱的朋友们_亲爱的lazyweb-我该如何处理所有电子邮件?
  18. mysql转化为GaussDB_gaussDB数据库常用操作命令
  19. 创维linux怎么连接wifi,创维酷开电视多屏互动Miracast玩法详解
  20. 为机器学习模型设置最佳阈值:0.5是二元分类的最佳阈值吗

热门文章

  1. Excel 如何间隔N行取数
  2. android壁纸和手机屏幕之间要怎么对应,android手机壁纸
  3. 深度剖析ConcurrentHashMap
  4. 训练好的深度学习模型是怎么部署的?
  5. outlook附件无法打开_通过键盘在Outlook 2007中打开附件
  6. 2010互联网第一件大事件——谷歌退出中国内地
  7. 将字符串的一部分拷贝到另一个字符串
  8. 逻辑回归(logistic regression)原理理解+matlab实现
  9. 数据结构 - 逻辑结构和存储结构
  10. 安防工程商前期收集客户信息15种方法与详细流程