博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Mybatis框架】输入映射-pojo包装类型
阅读量:5811 次
发布时间:2019-06-18

本文共 2697 字,大约阅读时间需要 8 分钟。

  hot3.png

下面说说关于mapper.xml文件中的输入映射

我们看一下之前为User配置的mapper文件UserMapper.xml:

    
        
    
        
      SELECT * FROM USER WHERE id=#{id}            
    
       select * from user where username like '%${value}%'             
    
        
        
            SELECT LAST_INSERT_ID()                        
                insert into user(username,birthday,sex,address) value(#{username},#{birthday,jdbcType=DATE},#{sex},#{address})            
    
        delete from user where id=#{id}        
   
        update user set username=#{username},birthday=#{birthday,jdbcType=DATE},sex=#{sex},address=#{address}         where id=#{id}    

在mapper.xml中我们通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型

上面的查询语句输入的都是一个查询参数,当我们输入多个查询参数时应当怎么操作呢?这就要用到POJO的包装对象把大量的查询参数包装在对象中传递给只能接收单个参数的Mapper操作方法了,看看如何来定义POJO包装对象
1传递pojo的包装对象
1.1需求
完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息、其它信息,比如商品、订单的)
1.2定义包装类型pojo
针对上边需求,建议使用自定义的包装类型的pojo。
在包装类型的pojo中将复杂的查询条件包装进去。
写一个例子
首先我们前面定义了一个User类对象,如果对象中的值要发生拓展,在源代码上改是不合适的(因为我们后期要使用工具自动生成User类,里面的东西建议 不要改动),这里我们创建一个User的拓展类UserCustom,继承自User类,我们下面包装查询条件时使用的是UserCustom,特此说 明。
查询包装类UserQueryVo:

package cn.edu.hpu.mybatis.PO;public class UserQueryVo {    //在这里包装需要的查询条件        //用户查询条件    private UserCustom userCustom;    public UserCustom getUserCustom() {        return userCustom;    }    public void setUserCustom(UserCustom userCustom) {        this.userCustom = userCustom;    }        //包装其他的查询条件,订单、商品    //......}

1.3mapper.xml

在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)。

    select * from user where user.sex=#{userCustom.sex} and user.username like '%${userCustom.username}%'

在UserMapper类中定义综合查询方法:

//用户管理的Dao接口

public interface UserMapper {        //用户信息综合查询    public List
 findUserList(UserQueryVo userQueryVo) throws Exception;    ......}

之后进行测试:

//用户信息综合查询

@Test public void testFindUserList() throws Exception{        SqlSession sqlSession=sqlSessionFactory.openSession();        //创建UserMapper代理对象    UserMapper userMapper=sqlSession.getMapper(UserMapper.class);        //创建包装对象,设置查询条件    UserQueryVo userQueryVo=new UserQueryVo();    UserCustom userCustom=new UserCustom();    userCustom.setSex("男");    userCustom.setUsername("张三");    userQueryVo.setUserCustom(userCustom);        //调用userMapper的方法    List
 users=userMapper.findUserList(userQueryVo);        for (int i = 0; i < users.size(); i++) {        UserCustom user=(UserCustom)users.get(i);        System.out.println(user.getId()+":"+user.getUsername());    }}

测试结果:

1:张三
4:张三丰

转载于:https://my.oschina.net/hxsg/blog/507985

你可能感兴趣的文章
修改上一篇文章的node.js代码,支持默认页及支持中文
查看>>
Php实现版本比较接口
查看>>
删除设备和驱动器中软件图标
查看>>
第四章 TCP粘包/拆包问题的解决之道---4.1---
查看>>
html语言
查看>>
从源码看集合ArrayList
查看>>
spring-boot支持websocket
查看>>
菜鸟笔记(一) - Java常见的乱码问题
查看>>
我理想中的前端工作流
查看>>
记一次Git异常操作:将多个repository合并到同一repository的同一分支
查看>>
CodeIgniter 3.0 新手捣鼓源码(一) base_url()
查看>>
Chrome 广告屏蔽功能不影响浏览器性能
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
Android状态栏实现沉浸式模式
查看>>
让你的APP实现即时聊天功能
查看>>
iOS 绝对路径和相对路径
查看>>
使用Openfiler搭建ISCSI网络存储
查看>>
应用新安全组 - 每天5分钟玩转 OpenStack(116)
查看>>
iOS - UIViewController
查看>>
IntPtr 转 string
查看>>