mybatis编写POJO包装类型扩展parameterType字段
入门mybatis时,做的demo都是借助一个pojo类来传递参数到sql语句中,但现实的项目场景中,查询条件往往很复杂,比如:查询条件可以有user信息,商品信息,订单信息等。
一般不能随意改动po包下的pojo类(即逆向工程自动生成的),此时就需要我们来编写pojo的包装类型来封装更多的查询条件字段。
准备:1.原始pojo类 2.原始pojo的子类 3.包装类
1、先在mapper.xml中定义sql语句,如下:
<!-- 自定义查询条件查询,借助定义pojo包装类型实现
parameterType:指定包装类型,将不同的参数(可以是pojo,也可以是简单类型)传入进去
包装类型的好处:
-->
<select id="findUserList" parameterType="userQueryVo" resultType="user">
select * from user where username like '%${userCustom.username}%'
</select>
2、定义包装器类型,借助原pojo类的子类型(具体的字段扩展在子类中进行,避免pojo类和查询条件类型的过度耦合)
2.1原始pojo类:
public class User {
private int id;
private String username;
private String sex;}
2.2.原始pojo扩展类,也即子类:
/**
* User扩展对象
* 用于继承user类,直接获取user对象的字段
* 并添加一些扩展字段
* @author jiangs
*
*/
public class UserCustom extends User{
//可以添加一些user类中没有的字段
//...
}
2.3.pojo包装类(parameterType中使用此类):
/**
* pojo包装类型,将来在使用时从页面传到controller、service、mapper
* 用于扩展mapper接口单一的参数类型
*
*/
public class UserQueryVo {
private UserCustom userCustom;
//提供get set方法,作为参数传进来
public UserCustom getUserCustom() {
return userCustom;
}
public void setUserCustom(UserCustom userCustom) {
this.userCustom = userCustom;
}
}
3、编写测试用例(主要代码)
-
@Test public void testFindUserList()throws Exception{ SqlSession session = sessionFactory.openSession(); UserMapper userMapper = session.getMapper(UserMapper.class); //new UserQueryVo userQueryVo = new UserQueryVo(); //new UserCustom userCustom = new UserCustom(); userCustom.setSex("女"); userCustom.setUsername("小张"); //传对象 userQueryVo.setUserCustom(userCustom); List<User> userlist = userMapper.findUserList(userQueryVo); System.out.println(userlist); session.close(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!