使用mybatis框架实现带条件查询-多条件(传入实体类)
在实际的项目开发中,使用mybatis框架查询的时候,不可能是只有一个条件的,大部分情况下是有多个条件的,那么多个条件应该怎样传入参数;
思考:

需求:根据用户姓名(模糊查询),和用户角色对用户表进行查询
UserMapper.xml
<!-- 按照名称查询,用户角色,查询用户列表 mybatis给最基础的数据类型都内建了别名,对大小写是不敏感的-->
<select id="getUserListByUserName2" parameterType="User" resultType="User" >
select * from smbms_user
where username like CONCAT ('%',#{userName},'%')
and userRole = #{userRole}
</select>
UserMapper.java
 public interface UserMapper {
     //查询用户表中的数据
     //特别要注意的一点是:Mapper接口中的方法名要和Mapper.xml文件中sql语句的id名称要相同,否则是不行滴
     public List<User> getUserList();
     //根据用户姓名模糊查询用户表  注意入参要和mapper.xml配置文件中入参保持一致
     public List<User> getUserListByUserName(String userName);
     //根据用户姓名模糊查询,用户角色,查询用户表  注意:现在的入参一定是对象
     public List<User> getUserListByUserName2(User user);
 }
User.java 实体类
 package cn.smbms.dao.pojo;
 import java.util.Date;
 public class User {
     private Integer id; //id
     private String userCode; //鐢ㄦ埛缂栫爜
     private String userName; //鐢ㄦ埛鍚嶇О
     private String userPassword; //鐢ㄦ埛瀵嗙爜
     private Integer gender;  //鎬у埆
     private Date birthday;  //鍑虹敓鏃ユ湡
     private String phone;   //鐢佃瘽
     private String address; //鍦板潃
     private Integer userRole;    //鐢ㄦ埛瑙掕壊
     private Integer createdBy;   //鍒涘缓鑰?
     private Date creationDate; //鍒涘缓鏃堕棿
     private Integer modifyBy;     //鏇存柊鑰?
     private Date modifyDate;   //鏇存柊鏃堕棿
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getUserCode() {
         return userCode;
     }
     public void setUserCode(String userCode) {
         this.userCode = userCode;
     }
     public String getUserName() {
         return userName;
     }
     public void setUserName(String userName) {
         this.userName = userName;
     }
     public String getUserPassword() {
         return userPassword;
     }
     public void setUserPassword(String userPassword) {
         this.userPassword = userPassword;
     }
     public Integer getGender() {
         return gender;
     }
     public void setGender(Integer gender) {
         this.gender = gender;
     }
     public Date getBirthday() {
         return birthday;
     }
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
     }
     public String getPhone() {
         return phone;
     }
     public void setPhone(String phone) {
         this.phone = phone;
     }
     public String getAddress() {
         return address;
     }
     public void setAddress(String address) {
         this.address = address;
     }
     public Integer getUserRole() {
         return userRole;
     }
     public void setUserRole(Integer userRole) {
         this.userRole = userRole;
     }
     public Integer getCreatedBy() {
         return createdBy;
     }
     public void setCreatedBy(Integer createdBy) {
         this.createdBy = createdBy;
     }
     public Date getCreationDate() {
         return creationDate;
     }
     public void setCreationDate(Date creationDate) {
         this.creationDate = creationDate;
     }
     public Integer getModifyBy() {
         return modifyBy;
     }
     public void setModifyBy(Integer modifyBy) {
         this.modifyBy = modifyBy;
     }
     public Date getModifyDate() {
         return modifyDate;
     }
     public void setModifyDate(Date modifyDate) {
         this.modifyDate = modifyDate;
     }
 }
编写测试类:
@Test
public void test6() {
String userNameString="赵";
Integer userRole=2;
User user=new User();
user.setUserName(userNameString);
user.setUserRole(userRole);
SqlSession sqlSession = null;
java.util.List<User> userList2 = new ArrayList<User>();
try {
sqlSession = MyBatisUtil.createSqlSession();
//使用mapper映射的方式实现
//userList2 = sqlSession.selectList("cn.smbms.dao.user.UserMapper.getUserListByUserName",userNameString);
//调用mapper接口的方式实现
userList2 = sqlSession.getMapper(UserMapper.class).getUserListByUserName2(user);
int size = userList2.size();
mlogger.info("获取到的记录数是:" + size); } catch (Exception e) {
// TODO: handle exception
} finally {
// 最后一定要注意:关闭会话
MyBatisUtil.closeSqlSession(sqlSession); } for (User user2 : userList2) {
mlogger.info("用户名:" + user2.getUserName() + ",密码:" + user2.getUserPassword());
} }
最终的运行结果:

这里要强调一下,以上的都是数据库字段的名称和实体类的名称是相一致的。
不一致的情况在下面会进行讨论。
使用mybatis框架实现带条件查询-多条件(传入实体类)的更多相关文章
- 通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件
		
通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件 文章目录 Ja ...
 - 使用mybatis框架实现带条件查询-单条件
		
之前我们写的查询sql都是没有带条件的,现在来实现一个新的需求,根据输入的字符串,模糊查询用户表中的信息 UserMapper.xml UserMapper.java 与jdbc的比较: 编写测试方法 ...
 - 使用mybatis框架实现带条件查询-多条件(传入Map集合)
		
我们发现我们可以通过传入javaBean的方式实现我们的需求,但是就两个条件,思考:现在就给他传入一个实体类,对系统性能的开销是不是有点大了. 现在改用传入Map集合的方式: 奥!对了,在创建map集 ...
 - mybatis高级(2)_数据库中的列和实体类不匹配时的两种解决方法_模糊查询_智能标签
		
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...
 - Mybatis自动生成xml文件、dao接口、实体类
		
Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...
 - mybatis  接口中定义方法、映射文件、实体类之间的关系?
		
一.定义实体类 ,注意需求 是一对多还是多对一. 这里用员工和部门 多对一的关系举例. package com.zs.entity; /* * /* * 多对一? * 多个员工 对应一个部门 一个 ...
 - SpringBoot JPA查询映射到自定义实体类
		
和 SegmentFault上的文章(https://segmentfault.com/a/1190000021869465)一样, 都是俺账号 场景 举一个简单的栗子: 比如有一个User实体类 @ ...
 - mybaitis查询 (数据库与实体类字段名不相同)
		
1.这是我的数据库字段名和实体类字段名 2.方法 方法一: 查询的结果标题 会跟实体类的属性一一匹配,一定要一致就算数据库字段和属性不一致,我们可以把查询结果设置一个别名,让别名=属性名 方法二:使用 ...
 - Mybatis框架六:关联查询
		
这里搞一个测试场景: 用户和订单,一位用户可以有多个订单,而每个订单只属于一位用户 以用户为中心,相对于订单:一对多 以订单为中心,当对于用户:一对一 两张表结构: 订单表: 用户表: 对应的POJO ...
 
随机推荐
- Word 插入目录详细教程 -- 视频教程(6)
			
>> 视频教程链接:B站,速度快,清晰 更多关于插入目录的方法,参看:Word插入目录系列 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
 - Android 系统架构 和 各个版本代号介绍
			
一.Android 系统架构: 1. linux内核层Android 基于Linux内核,为Android设备的各种硬件提供底层驱动 比如: 显示驱动.音频.照相机.蓝牙.Wi-Fi驱动,电源管理等 ...
 - System.InvalidOperationException:“寄宿 HWND 必须是子窗口。”
			
原文:System.InvalidOperationException:"寄宿 HWND 必须是子窗口." 当试图在 WPF 窗口中嵌套显示 Win32 子窗口的时候,你有可能出现 ...
 - Spring-Cloud之开篇
			
一.为什么会有spring-cloud.随着现代互联网的发展,以前很多传统的单体项目将不再满足于现在的互联网需求,而这个时候就诞生了另外一种说法,微服务.简单理解就是将软件应用程序独立部署的服务的一中 ...
 - java之aop
			
1.AOP:aspect orientied programming 面向切面编程.就是横向编程. 2.面向切面编程是在不改变原有代码的情况下增加新的功能. 3.在spring中面向切面编程有两种应用 ...
 - deppin Linux下安装docker
			
首先楼主用的是deppin15.11 docker 简介:Docker作为一个软件集装箱化平台,可以让开发者构建应用程序时,将它与其依赖环境一起打包到一个容器中,然后很容易地发布和应用到任意平台中. ...
 - C# vb .net实现焦距淡色特效滤镜
			
在.net中,如何简单快捷地实现Photoshop滤镜组中的焦距淡色效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...
 - 1 matplotlib绘制折线图
			
from matplotlib import pyplot as plt #设置图形大小 plt.figure(figsize=(20,8),dpi=80) plt.plot(x,y,color=&q ...
 - 百度地图 libBaiduMapSDK_base_v4_2_1.so" is 32-bit instead of 64-bit错误
			
20191111 集成android sdk,华为手机基本都启动报错,如下: W/System.err: java.security.NoSuchProviderException: no such ...
 - static 关键字在java语言中的特性
			
 一,将自己注入到一个静态变量中实现静态类,如下写法 以上方法的目的是要实现一个静态类,方便用类名获取对象实例,一般情况下调用普通方法需要对象实例.这对象要么new出来,要么spring的注入如下是 ...