【工程截图】
【代码实现】
【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