12_复杂查询01_Mapper代理实现

【工程截图】

【代码实现】

【user.java】

package com.Higgin.Mybatis.po;

import java.util.Date;

public class User {
    //属性名和数据库表字段对应
        private int id;
        private String username;
        private String sex;
        private Date birthday;
        private String address;
    //对应的get、set方法
}    

【UserCustom.java】

package com.Higgin.Mybatis.po;

/*可以用于扩展用户的信息*/
public class UserCustom extends User{
      //如果需要可以在这里增加拓展的具体信息
}

【UserQueryVo.java】

package com.Higgin.Mybatis.po;

/**
 * 需求:
 *    完成用户信息的总和查询,需要传入查询条件很复杂(可能还包括用户信息、其他信息、比如商品、订单等)
 * 针对上述需求,建议使用自定义的包装类型的pojo
 * 在包装类中将复杂的查询条件包装进去
 */
public class UserQueryVo {
    //在这里包装所需的查询条件

    //用户查询条件
    private UserCustom  userCustom;  //这里对应着上边的UserCustomer变量

    public UserCustom getUserCustom() {
        return userCustom;
    }

    public void setUserCustom(UserCustom userCustom) {
        this.userCustom = userCustom;
    }
}

【UserMapper.xml】   //配置非常重要!!!!!,namespace必须对应相应的接口名称:com.Higgin.Mybatis.mapper.UserMapper

 <mapper namespace="com.Higgin.Mybatis.mapper.UserMapper">
    <!--
          用户信息的综合查询(复杂查询)
         #{userCustom.sex}:取出pojo包装对象中的"性别"值
         #{userCusotm.username}:取出pojo包装类中用户名称
      -->
     <select id="findUserList" parameterType="com.Higgin.Mybatis.po.UserQueryVo"
                               resultType="com.Higgin.Mybatis.po.UserCustom">
         SELECT * FROM USER WHERE user.sex =#{userCustom.sex} AND user.username LIKE ‘%${userCustom.username}%‘
     </select>
 </mapper>

【UserMapper.java】接口,UserMapper.java接口中的方法:findUserList和UserMApper.xml中的方法名要一致

package com.Higgin.Mybatis.mapper;

import java.util.List;

import com.Higgin.Mybatis.po.User;
import com.Higgin.Mybatis.po.UserCustom;
import com.Higgin.Mybatis.po.UserQueryVo;

public interface UserMapper {

    //用户信息综合查询findUserList
    public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;}

【SqlMapperCongfg.xml】  //添加一个加载文件,这个文件会在测试类中被加载

<!-- 加载映射文件 -->
    <mappers>
        <mapper resource="sqlmap/user.xml"/>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>

【UserMapperTest.java】  //测试类

public class UserMapperTest {

    private SqlSessionFactory sqlSessionFactory ;

    @Before
    public void setUp() throws Exception {
        //创建sqlSessionfactory
        //MyBatis配置文件
        String resource="SqlMapConfig.xml";
        //得到配置文件流
        InputStream inputStream=Resources.getResourceAsStream(resource);
        //创建会话工厂,传入MyBatis的配置文件信息
        sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
    }
/**
     * 用户信息的综合复杂查询
     * @throws Exception
     */
    @Test
    public void testFindUserList() throws Exception {

        SqlSession sqlSession =sqlSessionFactory.openSession();

        //创建一个UserMapper对象,Mybatis自动生成mapper代理对象
        UserMapper userMapper=sqlSession.getMapper(UserMapper.class);

        //创建包装对象,设置查询条件
        UserQueryVo userQueryVo=new UserQueryVo();
        UserCustom userCustom=new UserCustom();

        userCustom.setSex("1");
        userCustom.setUsername("6");

        userQueryVo.setUserCustom(userCustom);

        //调用UserMapper的方法
        List<UserCustom> list=userMapper.findUserList(userQueryVo);

            System.out.println(list.size());
    }

}

【运行结果】

【debug的list的数据,所有性别为“1”,username中包含"6"的数据组】

时间: 2024-10-12 04:20:30

12_复杂查询01_Mapper代理实现的相关文章

Github for windows设置代理

Github for windows设置代理 一:简介 在公司.常常为了某些原因会使用代理.所以要在有代理的环境下使用Github.就要为其设置代理.Github for windows提供了GUI和shell 版本.GUI没有提供设置代理的地方.可以通过shell设置.最终结果都是修改Github的配置文件.gitconfig.此文件一般都在用户目录下:C:\Users\andychen\.gitconfig.如以前的文章提到过.配置文件没有特殊必要的话.最好是放在用户目录下.而不是放在一个全

使用Jdk实现动态代理

一).创建动态代理的步骤 1.主题接口 2.代理类 3.真实类 4.使用类 1)主体接口中定义了代理类和真实类的的公共接口方法,代理类和真实类分别实现主体接口,真实类实现了接口方法的具体逻辑,代理类也实现了同样的接口方法,在方法中调用真实类的逻辑,相当于拿到了被代理人的授权,执行被代理人拥有的功能. 2)在实用类中,利用java的多态特性,使用公共接口,接收代理类,接收代理类对象,使用代理类调用公共方法,实现真实类的具体逻辑. 二).使用jdk实现动态代理 一.为什么要使用动态代理? 1).原有

MySQL ProxySQL读写分离使用初探

目的 在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异.具体的介绍可以看官网的相关说明,并且这个中间件也是percona推的一款中间件.其特性和其他读写分离的中间件差距不大,具体的会在文中介绍.本文大致简单的介绍在使用过程中的一些说明,也可以看官方的wiki获得使用帮助. 环境:  Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.

Effective Objective-C 2.0重读笔记---1

上次看这本书的时候匆匆走了一遍,最近不太忙,重温了一遍,把笔记写出来~.. 有兴趣的可以去买一本,感觉这本书还是挺不错的 由于大部分是在坐车的时候用手机写的,所以代码很少,图也很少 1. 尽量使用向前声明,延后引入头文件的时间,这样可以减少编译时间2. 使用arraywithobjects:....如果遇到为空的变量,就会自动终止,后面的变量便会添加不上,切不会报错,会造成数据不一致问题,所以尽量使用字面量语法创建相关对象,减少出错且减少代码量3. 使用字面量创建的对象都是不可变的,如果要获得可

ICE中间件说明文档

1       ICE中间件简介 2       平台核心功能 2.1        接口描述语言(Slice) 2.2        ICE运行时 2.2.1         通信器 2.2.2         对象适配器 2.2.3         位置透明性 2.3        异步编程模型 2.3.1         异步方法调用 2.3.2         异步方法分派 2.4        订阅/发布编程模型 2.5        动态服务管理(IceBox) 2.6       

读详解Linux配置iSCSI方法--学习笔记

http://tech.watchstor.com/storage-module-121394.htm http://blog.csdn.net/holandstone/article/details/7963822 iSCSI(互联网小型计算机系统接口)是一种在Internet协议网络上,特别是以太网上进行数据块传输的标准,是一种集成了IP和SCSI的技术.它最大的特点就是让标准的SCSI命令能够在TCP/IP网络上的主机系统(启动器)和存储设备(目标)之间传送.iSCSI是基于IP协议的技术

linux——网络情报收集(总结篇.干货+实战)

这里附上一篇 2cto.com上的干货,自己根据这些干货整理了一些实用工具   http://m.2cto.com/article/201309/245214.html 从攻击者的角度出发的几个简单步骤: 1.确定自己的目标,目标可以是一个网络,web应用程序,组织或个人.在我们的世界中,寻找信息也被称为踩点 2.各种不同目标上的有利收集技术: a.互联网 有效数据: 公司的归档数据 公司网站(网页) 在应用程序中使用的隐私政策 应用程序中使用的安全策略 客户信息 推荐/评论 精确的位置细节 员

java rpc

这两天看公司的一个server的源码. 然后看了下里面的rpc实现,感觉很有意思. 大概实现一个rpc工具需要做如下工作: 1.定义序列化的对象,用于在client和server之间传递(接口的参数可以是序列化的,也可以把所有信息封装到一个可序列化对象当中进行传递) 比如:有接口ISample,方法有test(T1 x1, T2 x2) 你可以选择设置T1和T2为可序列化的,client端就可以直接通过代理调用这个方法 也可以如下:test(Invocation invo)->test(T1 X

Snmp学习笔记

相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议”.SNMP是眼下最经常使用的环境管理协议.SNMP被设计成与协议无关,所以它能够在IP,IPX,AppleTalk,OSI以及其它用到的传输协议上被使用.SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方