您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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<Role> 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配置:
<resultMap type="com.step.template.main.entity.User" id="UserAndRolesResultMap">
<!-- 先配置 User 的屬性 -->
<id column="id" property="id" />
<result column="name" property="name"/>
<result column="password" property="password"/>
<!-- 再配置 Role 集合 -->
<collection property="roles" ofType="com.step.template.main.entity.RoleRe">
<id column="role_id" property="roleId" />
</collection>
</resultMap>
<select id="leftJionRole" resultMap="UserAndRolesResultMap">
SELECT id,u.name,u.password, ur.role_id FROM user u, user_role ur WHERE u.id = ur.user_id
</select>
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如何實現外鍵查詢”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。