前言在
(想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!) 一、字段映射在 mybatis.type-aliases-package=com.xxx.entity
该路径下的所有类,就会被注册到
如果数据库中表的字段与 <select id='getUsers' resultType='User'> SELECT u.id, u.username, u.password, u.address, u.email FROM USER u</select>
当然,这是理想状态下,属性和字段名都完全一致的情况。但事实上,不一致的情况是有的,这时候我们的
那么,在结果集中,我们将会丢失id数据。这时候我们就可以定义一个 <resultMap id='getUserByIdMap' type='User'> <result property='id' column='uid'></result></resultMap>
然后,我们把上面的
二、构造方法如果你希望将结果注入构造方法里,就可以用到
我们需要在 <resultMap id='getUserByIdMap' type='User'> <constructor> <idArg column='id' name='id' javaType='string'></idArg> <arg column='username' name='name' javaType='string'></arg> </constructor></resultMap>
其中,
三、关联在实际的业务中,我们的用户一般都会有一个角色。那么在 @Datapublic class User { //省略用户属性... //角色信息 private Role role;}
我们在查询用户的时候,如果也希望看到它的角色信息,我们会这样来写查询语句:
如上,就要查询单个用户以及用户的角色信息。不过在这里,我们不能用 <resultMap id='userMap' type='User'> <id property='id' column='id'></id> <result property='username' column='username'></result> <result property='password' column='password'></result> <result property='address' column='address'></result> <result property='email' column='email'></result> <association property='role' javaType='Role'> <id property='id' column='role_id'></id> <result property='name' column='role_name'></result> </association></resultMap>
最后我们就可以将角色信息一块显示出来:
事实上,如果你确定关联信息是一对一的情况,有个更简便的方法可以替代 四、集合1、集合的嵌套结果映射 @Datapublic class User { //省略用户属性... //角色信息 private List<Role> roles;}
现在就变成了一个用户对应多个角色,所以就不是简单的
这样的话,即便你有多个角色也可以被正确显示: { 'id': '1003', 'username': '貂蝉', 'password': '123456', 'address': '北京市东城区', 'email': '510273027@qq.com', 'roles': [ { 'id': '1', 'name': '中单' }, { 'id': '2', 'name': '打野' } ]}
2、集合的嵌套 Select 查询
这里我们给菜单分为两级。我们给前端返回菜单的时候,也是需要分级的,不可能将这7条数据平级展示。那么,在这里我们的
一级菜单,包含一个二级菜单的列表,这里用 <select id='getMenus' resultMap='menusMap'> SELECT m.id, m.name, m.url, m.parent_id FROM m_menu m where 1=1 <choose> <when test='parent_id!=null'> and m.parent_id = #{parent_id} </when> <otherwise> and m.parent_id = '0' </otherwise> </choose></select>
这个查询语句,在不传输任何参数的情况下,我们会得到两条一级菜单的数据。
重点来看 [ { 'id': '1', 'name': '系统管理', 'parent_id': '0', 'childMenu': [ { 'id': '1001', 'name': '用户管理', 'url': '/user', 'parent_id': '1' }, { 'id': '1002', 'name': '角色管理', 'url': '/role', 'parent_id': '1' }, { 'id': '1003', 'name': '单位管理', 'url': '/employer', 'parent_id': '1' } ] }, { 'id': '2', 'name': '平台监控', 'parent_id': '0', 'childMenu': [ { 'id': '2001', 'name': '系统监控', 'url': '/system/monitor', 'parent_id': '2' }, { 'id': '2002', 'name': '数据监控', 'url': '/data/monitor', 'parent_id': '2' } ] }]
五、自动填充关联对象我们知道,在
在这里,我们无需定义 <select id='getUserList' resultType='User'> SELECT u.id, u.username, u.password, u.address, u.email, r.id as 'role.id', r.name as 'role.name' FROM USER u LEFT JOIN user_roles ur ON u.id = ur.user_id LEFT JOIN role r ON r.id = ur.role_id</select>
这样,在 |
|
来自: 不忘初心g2x5dp > 《待分类》