zoukankan      html  css  js  c++  java
  • 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"的数据组】

  • 相关阅读:
    laravel 创建自定义全局函数
    JAVA堆栈的区别
    项目经验-国家电网
    OO开发思想:面向对象的开发方法(Object oriented,OO)
    分层开发思想
    软件开发过程与思想
    json学习笔记
    UNIX网络编程——UDP 中的外出接口的确定
    UNIX网络编程——UDP缺乏流量控制(改进版)
    UNIX网络编程——UDP 的connect函数(改进版)
  • 原文地址:https://www.cnblogs.com/HigginCui/p/5747665.html
Copyright © 2011-2022 走看看