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

 

posted @ 2016-08-07 23:17  HigginCui  阅读(707)  评论(1编辑  收藏  举报