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"的数据组】

12_复杂查询01_Mapper代理实现的更多相关文章
- 【源码】Python3使用Requests抓取和检测电光代理API,并查询ip代理是否成功
		电光代理成立后,做一篇笔记,记录我使用Requests抓取和测试电光代理的方法 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ... 
- Java代理模式之动态代理
		动态代理类的源码是程序在运行期间由JVM根据反射等机制动态生成的,所以不存在代理类的字节码文件.代理角色和真实角色的联系在程序运行时确定! Java中有两种动态代理,一种是JDK自带的,另一种的CGL ... 
- Hibernate多表查询、查询优化策略(四)
		多表HQL private static void innerJoin(){ //sql内连接 隐式内连接 select * from A,B where b.aid = a.id // 显示内连接 ... 
- git设置代理模式,仅为github设置代理
		设置代理: 全局代理 git config --global http.proxy 127.0.0.1:1087 局部代理,在github clone 仓库内执行 git config --local ... 
- 服务器上的 IPProxy代理设置
		1.window 平台 CCProxy 安装包 传送门: http://www.xue51.com/soft/2794.html 该页面详细的说明了ccproxy怎么安装.怎么破jie.... 下面老 ... 
- python爬取高匿代理IP(再也不用担心会进小黑屋了)
		为什么要用代理IP 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人 ... 
- python代理池的构建4——mongdb数据库的增删改查
		上一篇博客地址:python代理池的构建3--爬取代理ip 一.mongdb数据库的增删改查(Mongo_pool.py) #-*-coding:utf-8-*- ''' 实现代理池的数据库模块 ●作 ... 
- Flask 之 高可用IP代理网站
		高可用代理IP网站 目标:提供高可用代理IP 步骤一:通过爬虫获取代理IP 步骤二:对代理IP进行检测,判断代理是否可用 步骤三:将可用的代理IP写入mongodb数据库 步骤四:创建网站,从数据库获 ... 
- java时间计算,获取某月第一天和最后一天
		//获取前月的第一天 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); //获取当前月第一天: Calendar ... 
随机推荐
- java 小结1(static ,final,泛型)
			static,final. (1)final: final:属于“终态”,意思就是不可以改变.可以修饰非抽象类,非抽象类的方法等.反正就是不能够再改变赋值了. 注意:1)fina类不能被继承,所以它没 ... 
- java枚举enum
			http://www.cnblogs.com/wenruo/p/5349614.html java的枚举通过关键字enum实现.可以理解为一个类,不过这个类由编译器自动加了一些方法. static v ... 
- 读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点
			序言 在.NET开发中,List<T>是我们经常用到的类型.前段时间看到其他部门小伙伴讨论“两个List(10W个元素)集合求并集,list1.Where(p=>list2.Cont ... 
- php的fread函数的一个巨大的坑
			先看看fread的manual,如下: http://php.net/manual/en/function.fread.php fread() reads up to length bytes fro ... 
- thinkphp3.2.3 版本使用redis缓存的时候无法使用认证
			我在使用thinkphp3.2.3的时候 发现如果是使用redis缓存 设置了认证的redis能连接成功 却无法 set 操作 ,检查发现是没有认证导致的 $redis->auth这一步没有, ... 
- Android开发书籍推荐
			当你看到这些文字时,那么恭喜你,你可能选择了一个无限可能的方向. Android,Google出品,信誉保证,你值得深入研究. 学习一样新事物或许有多种方式,报培训班,看视频,向高手请教等等,但一本好 ... 
- WINFORM跟随WPF窗体移动
			<Window x:Name="mainWindow1" x:Class="WpfApplication9.MainWindow" xml ... 
- Callgrind 使用 2
			Callgrind是一款和gprof类似的性能分析工具,与gprof不同的是它不需要在编译源码时附加特殊选项,但推荐加上调试选项.Callgrind使用cachegrind的统计信息Ir(I cach ... 
- careercup-树与图 4.1
			4.1 实现一个函数,检查二叉树是否平衡.在这个问题中,平衡树的定义如下:任意一个结点,其两颗子树的高度差不超过1. C++实现代码: #include<iostream> #includ ... 
- 菜单类(CCMenu,CCMenuItem)
