Mybatis Generator通用Join的实现

通常,我们使用Mybatis实现join表关联的时候,一般都是通过在xml或注解里写自定义sql实现。

本文通过Mybatis Generator的插件功能新增一个JoinPlugin插件,只要在配置文件里加上该插件就可以使用。无其他第三方依赖。如下图:

Mybatis Generator通用Join的实现

 

该插件符合mbg plugin即插即用的特点,不影响生成的实体类,只对生成的Example文件做少量变动(新增一个内部类)。

首选我们看一下使用效果,如果符合你的要求,请关注支持。 

 

/** * 简单join查询示例 * select t0.user_id as t0_user_id,t0.user_name as t0_user_name,t0.login_account as t0_login_account,t0.login_password as t0_login_password, * t0.user_sex as t0_user_sex,t0.user_email as t0_user_email,t0.user_mobile as t0_user_mobile,t0.user_avatar as t0_user_avatar, * t0.user_company as t0_user_company,t0.user_dept as t0_user_dept,t0.is_del as t0_is_del,t0.is_admin as t0_is_admin, * t0.system_type as t0_system_type,t0.last_login_time as t0_last_login_time,t0.create_time as t0_create_time,t0.create_user as t0_create_user, * t0.update_time as t0_update_time,t0.update_user as t0_update_user, * t2.role_id as t2_role_id,t2.role_name as t2_role_name * from auth_user as t0 * inner join auth_user_role as t1 on t0.user_id = t1.user_id * left join auth_role as t2 on t2.role_id = t1.role_id * where ( ( t0.user_id is not null and ( t0.create_time is not null or t0.create_user is not null ) ) ) and ( t1.user_id <>999999 and t1.role_id >=1 ) * order by t2.role_id desc,t0.create_time * limit 10,100 */ public void joinTable() { AuthUserExample authUserExample=new AuthUserExample(); AuthUserExample.Criteria criteria=authUserExample.createCriteria(); //where条件 criteria.andUserIdIsNotNull(); criteria.createOrCriteria().andCreateTimeIsNotNull().andCreateUserIsNotNull(); //关联user_role AuthUserRoleExample urExample=new AuthUserRoleExample(); //where中user_role表的条件 urExample.createCriteria().andUserIdNotEqualTo(999999).andRoleIdGreaterThanOrEqualTo(1); criteria.createJoinCriteria() .innerJoinTable(urExample) //使用User表的user_id关联user_role表的user_id .on(a->a.getUserId(), a->a.equalTo(b->b.tableInfo.getUserId())); //关联role AuthRoleExample roleExample=new AuthRoleExample(); criteria.createJoinCriteria() .leftJoinTable(roleExample) //使用role表的role_id关联user_role表的role_id .on(a->a.tableInfo.getRoleId(), a->a.equalTo(b->b.tableInfo.getRoleId()), urExample) //先按照role表的role_id降序 .orderByDesc(a->a.tableInfo.getRoleId()) //再按照user表的create_time升序 .orderByFirstTable(a->a.getCreateTime()) //跳过前10条 .skip(10) //取100条记录 .take(100) //只查询role表的role_id和role_name两个字段 .select(a->new String[] {a.tableInfo.getRoleId(),a.tableInfo.getRoleName()}); //执行查询 List<Tuple> userList=userDao.selectJoinByExample(authUserExample); int totalItemCount=(int) userDao.countJoinByExample(authUserExample); System.out.println(userList.size()+",total:"+totalItemCount); for(Tuple tuple:userList) { AuthUser authUser=tuple.getObject(AuthUser.class); AuthUserRole authUserRole=tuple.getObject(AuthUserRole.class); AuthRole authRole=tuple.getObject(AuthRole.class); totalItemCount++; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzszp.html