Mybatis 输入映射
之前入门程序中利用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 输入映射相关推荐
- Mybatis输入映射和输出映射
Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. 输入参数映射 parameterType(输入类型) 传递简单类型: 如: ...
- mybatis入门(四)----输入映射和输出映射
阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...
- 【Mybatis框架】输入映射-pojo包装类型
下面说说关于mapper.xml文件中的输入映射 我们看一下之前为User配置的mapper文件UserMapper.xml: [html] view plaincopy <?xml versi ...
- mybatis入门基础(四)----输入映射和输出映射
阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- xstream不映射字段_Mybatis_day03:输入映射和输出映射
输入映射和输出映射 Mapper.xml映射文件中定义了操作数据库的sql,每个sql是一个statement,映射文件是mybatis的核心. parameterType(输入类型) 传递简单类型 ...
- MyBatis 关系映射XML配置
关系映射 在我看来这些实体类就没啥太大关联关系,不就是一个sql语句解决的问题,直接多表查询就完事,程序将它设置关联就好 xml里面配置也是配置了sql语句,下面给出几个关系的小毛驴(xml) 一对多 ...
- Spring集成Mybatis配置映射文件方法详解
Spring ORM模块集成Mybatis使用到了mybatis-spring,在配置mybatis映射文件的时候,一般不直接在Mybatis的配置文件里进行配置,而会在Spring的配置文件里使用M ...
- 【java学习之路】(java框架)004.Mybatis SQL映射文件详解
02Mybatis SQL映射文件详解 在之前我们学习了mybatis的全局配置文件,下面我们开始学习mybatis的映射文件,在映射文件中,可以编写以下的顶级元素标签: cache – 该命名空 ...
最新文章
- Java基于对象基础 基于对象和面向对象的区别(转)
- 到底什么是生成式对抗网络GAN?
- java for 嵌套_Java中的for循环嵌套
- [JavaScript]牛人的JS是怎么玩的
- php 类 单例,PHP里的单例类写法实例
- 开发html5的共享单车,HTML5 SVG 共享单车(小蓝车)动画
- 浅析 Sunday 算法
- 数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础
- 计算机主板别称是什么城,上海别称什么城?
- 微软云服务器的优点,探寻:微软私有云的优势究竟是什么
- 图片文字转换成word软件在线版
- Cocos Create 3.3 打包安卓apk
- 基于Proteus学习单片机系列(五)——定时器实现电子表
- 关于IOS设备window onscroll滚动条滚动事件不触发的问题
- java基于quasar实现协程池
- js中的设计模式之中介者模式
- 记一次js文件AES加密的key与iv逆向分析
- Java-面向对象 练习题
- hdoj4550 威威猫系列故事——打地鼠(java版)
- Gitee使用时TimeOut问题解决