之前入门程序中利用mybatis所做的这些增加、删除、修改、查询的操作中,传入参数的输入映射都是简单的Java类型,比如int、string等,稍微复杂一点的也就是一个简单的自定义的Java Bean对象即(POJO—Plain Ordinary Java Object),如果为了支持一个复杂的多表联合查询、嵌套子查询等,需要传入的参数可能不是针对一个表的查询条件,在这种情况下,就需要指定自定义包装类型的POJO或者传入一个hashMap对象。

>使用hashMap集合

如果在执行SQL语句时,传入的参数较为复杂,是针对好几个表的查询条件,而在开发时针对每张表都会定义一个与之对应的Java Bean对象。但现在却是多表的操作,而且条件也是针对不同表中的字段进行过滤查询,这时可以考虑使用HashMap集合作为parameterType类型传入,其中#{}中的字符为map的key值即可。

例如:

查询Role表中RoleName为普通用户,User表中含cname含有王的记录;

建立Pojo对象:

package com.langsin.pojo;public class User {private Integer userId;private String userName;private String password;private String roleCode;private String cname;private String telphone;private String address;private String isLogin;@Overridepublic String toString() {StringBuilder builder = new StringBuilder();builder.append("User [userId=").append(userId).append(", userName=").append(userName).append(", password=").append(password).append(", roleCode=").append(roleCode).append(", cname=").append(cname).append(", telphone=").append(telphone).append(", address=").append(address).append(", isLogin=").append(isLogin).append("]");return builder.toString();}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getRoleCode() {return roleCode;}public void setRoleCode(String roleCode) {this.roleCode = roleCode;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public String getTelphone() {return telphone;}public void setTelphone(String telphone) {this.telphone = telphone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getIsLogin() {return isLogin;}public void setIsLogin(String isLogin) {this.isLogin = isLogin;}}
package com.langsin.pojo;public class Role {private Integer roleId;private String roleCode;private String roleName;public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}public String getRoleCode() {return roleCode;}public void setRoleCode(String roleCode) {this.roleCode = roleCode;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}}
package com.langsin.pojo;public class RoleUser extends User {private Integer roleId;private String roleCode;private String roleName;public Integer getRoleId() {return roleId;}public void setRoleId(Integer roleId) {this.roleId = roleId;}public String getRoleCode() {return roleCode;}public void setRoleCode(String roleCode) {this.roleCode = roleCode;}public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}@Overridepublic String toString() {StringBuilder builder = new StringBuilder();builder.append("RoleUser [roleId=").append(roleId).append(", roleCode=").append(roleCode).append(", roleName=").append(roleName).append(", toString()=").append(super.toString()).append("]");return builder.toString();}}

Mapper对象:

<result column="user_name" property="userName"/><result column="role_code" property="roleCode"/><result column="user_pass" property="password"/><result column="is_login" property="isLogin"/></resultMap><select id="queryRoleUser" parameterType="hashMap" resultMap="roleUserMap"> SELECT r.*,u.*FROM role r JOIN user u ON  r.role_code=u.role_codeWHERE r.role_name=#{roleName} AND u.cname LIKE #{cname};</select>

Mapper接口:

public interface UserMapper {public List<RoleUser> queryRoleUser(Map<String, String> ruMap) throws Exception;}

测试类:

@Testpublic void queryRoleUser() throws Exception{Map<String, String> map=new HashMap<>();map.put("roleName", "普通用户");map.put("cname", "%王%");UserMapper mapper=session.getMapper(UserMapper.class);List<RoleUser> ruList=mapper.queryRoleUser(map);for (RoleUser roleUser : ruList) {System.out.println(roleUser);}session.close();}

>使用POJO自定义类型:
使用queryBean,在原有的pojo的基础上进行拓展(一般较为集中的表为基础拓展):

接上面的例子,拓展Bean:

package com.langsin.pojo;public class UserQueryBean extends User {private String roleName;public String getRoleName() {return roleName;}public void setRoleName(String roleName) {this.roleName = roleName;}}

Mapper配置:

<resultMap type="roleUser" id="roleUserMap"><id column="role_id" property="roleId"/><id column="user_id" property="userId"/><result column="role_code" property="roleCode"/><result column="role_name" property="roleName"/><result column="user_name" property="userName"/><result column="role_code" property="roleCode"/><result column="user_pass" property="password"/><result column="is_login" property="isLogin"/><select id="queryUserRoleName" parameterType="userQueryBean" resultMap="roleUserMap">SELECT r.*,u.*FROM role r JOIN user u ON  r.role_code=u.role_codeWHERE r.role_name=#{roleName} AND u.cname LIKE #{cname} and u.address like #{address};</select>

Mapper接口:

public interface UserMapper {public List<RoleUser> queryRoleUser(Map<String, String> ruMap) throws Exception;public List<RoleUser> queryUserRoleName(UserQueryBean bean) throws Exception;
}

Mapper测试类:

@Testpublic void queryUserQoleName() throws Exception{UserQueryBean bean=new UserQueryBean();bean.setAddress("%济南%");bean.setRoleName("普通用户");bean.setCname("%王%");UserMapper mapper=session.getMapper(UserMapper.class);List<RoleUser> ruList=mapper.queryUserRoleName(bean);for (RoleUser roleUser : ruList) {System.out.println(roleUser);}session.close();}

Mybatis 输入映射相关推荐

  1. Mybatis输入映射和输出映射

    Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 输入参数映射 parameterType(输入类型) 传递简单类型: 如: ...

  2. mybatis入门(四)----输入映射和输出映射

    阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...

  3. 【Mybatis框架】输入映射-pojo包装类型

    下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: [html] view plaincopy <?xml versi ...

  4. mybatis入门基础(四)----输入映射和输出映射

    阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...

  5. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  6. xstream不映射字段_Mybatis_day03:输入映射和输出映射

    输入映射和输出映射 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. parameterType(输入类型) 传递简单类型 ...

  7. MyBatis 关系映射XML配置

    关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...

  8. Spring集成Mybatis配置映射文件方法详解

    Spring ORM模块集成Mybatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般不直接在Mybatis的配置文件里进行配置,而会在Spring的配置文件里使用M ...

  9. 【java学习之路】(java框架)004.Mybatis SQL映射文件详解

    02Mybatis SQL映射文件详解 ​ 在之前我们学习了mybatis的全局配置文件,下面我们开始学习mybatis的映射文件,在映射文件中,可以编写以下的顶级元素标签: cache – 该命名空 ...

最新文章

  1. Java基于对象基础 基于对象和面向对象的区别(转)
  2. 到底什么是生成式对抗网络GAN?
  3. java for 嵌套_Java中的for循环嵌套
  4. [JavaScript]牛人的JS是怎么玩的
  5. php 类 单例,PHP里的单例类写法实例
  6. 开发html5的共享单车,HTML5 SVG 共享单车(小蓝车)动画
  7. 浅析 Sunday 算法
  8. 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
  9. 计算机主板别称是什么城,上海别称什么城?
  10. 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
  11. 图片文字转换成word软件在线版
  12. Cocos Create 3.3 打包安卓apk
  13. 基于Proteus学习单片机系列(五)——定时器实现电子表
  14. 关于IOS设备window onscroll滚动条滚动事件不触发的问题
  15. java基于quasar实现协程池
  16. js中的设计模式之中介者模式
  17. 记一次js文件AES加密的key与iv逆向分析
  18. Java-面向对象 练习题
  19. hdoj4550 威威猫系列故事——打地鼠(java版)
  20. Gitee使用时TimeOut问题解决

热门文章

  1. Spring循环依赖源码剖析
  2. 单链表实现反转的三种方法
  3. 关于MySQL优化的几个问题
  4. 初识MyBatis-Plus
  5. 使用jxl来读取Excel中的数据
  6. Java会话技术之 —— cookie与session
  7. spring自定义生命周期的几种方法
  8. 详解MathType中如何插入特殊符号
  9. Ubuntu硬盘安装
  10. CI框架 CodeIgniter 伪静态 htaccess设置和Nginx伪静态方法