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

时间:2024-04-07 18:37:07

【工程截图】

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());
} }

【运行结果】

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

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

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