这篇文章给大家分享的是有关MyBatis与MycatDao如何实现外键查询的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
专注于为中小企业提供网站设计制作、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业沈丘免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
首先来看下表结构:
user(用户信息表)表的id是user_role(用户权限中间表)中的user_id的外键
使用MyBatis联结查询我们需要如下配置和代码: 实体对象:
// User
@Getter
@Setter
@TableName("user")
public class User extends BaseEntity {
private String name;
private String password;
private List roles;
}
//用户权限关系中间表
@Getter
@Setter
@TableName("user_role")
public class RoleRe {
private String userId;
private String roleId;
}
web层:
@GetMapping("/testFind")
public User testFind() {
return userService.testFind();
}
servre层:
public User testFind() {
return userMapper.leftJionRole();
}
mapper层:
User leftJionRole();
xml配置:
xml是MyBatis的一大优势,xml允许更自由的操作动态sql,但是在带来便利的同时也增加了相应的配置操作,我们如果要使用关联查询,如果返回的对象其中有一个是集合属性就必须配置collection
并且要指定类型ofType
查询结果:
{
"id": 3,
"name": "test",
"password": "111111",
"roles": [
{
"userId": null,
"roleId": "3"
},
{
"userId": null,
"roleId": "2"
}
]
}
这里的userId
为空是显而易见的,因为并没有在result
中配置userId
的映射字段,所以返回的结果为null
,这样的小失误也经常发生在开发中
实体对象
@Getter
@Setter
//mycatDao 会映射实体的大小写转为下划线
public class UserRole {
//需要告知mycatDao这个字段为外键
@ForeginKey(value = User.class)
private String userId;
private String roleId;
}
@GetMapping(value = "/test/user", produces = "application/json")
public JsonValue getUserInfoList() {
//分页对象及状态码
PageResultSet result = new PageResultSet();
JsonValue jsonRest = null;
try {
PagedQuery qry = new PowerDomainQuery()
//去除重复字段
.withAutoRemoveDupFields(true)
//添加第一个属性User,并忽略返回字段id
.addDomainFieldsExclude(User.class, new String[] { "id" })
//添加第二个属性 用户权限关联表
.addDomainFieldsExclude(UserRole.class, null);
//执行查询
jsonRest = leaderDao.exePagedQuery(qry);
} catch (Exception e) {
result.retCode = -1;
jsonRest = Json.createValue("error:" + e.toString());
}
return jsonRest;
}
响应结果
[
{
"name": {
"chars": "test",
"string": "test",
"valueType": "STRING"
},
"password": {
"chars": "111111",
"string": "111111",
"valueType": "STRING"
},
"roles": {
"chars": "user,admin1",
"string": "user,admin1",
"valueType": "STRING"
},
"userId": {
"integral": true,
"valueType": "NUMBER"
},
"roleId": {
"integral": true,
"valueType": "NUMBER"
}
},
{
"name": {
"chars": "test",
"string": "test",
"valueType": "STRING"
},
"password": {
"chars": "111111",
"string": "111111",
"valueType": "STRING"
},
"roles": {
"chars": "user,admin1",
"string": "user,admin1",
"valueType": "STRING"
},
"userId": {
"integral": true,
"valueType": "NUMBER"
},
"roleId": {
"integral": true,
"valueType": "NUMBER"
}
}
]
在操作上MycatDao简化了很多操作来方便开发者,这一点会在开发效率上得到明显的体现,但是MycatDao在响应结果上体验感逊色于MyBatis,这一点相信在未来的发展中会得到改善
感谢各位的阅读!关于“MyBatis与MycatDao如何实现外键查询”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!