update docs

This commit is contained in:
开源海哥 2023-07-07 10:25:26 +08:00
parent 217b79b74a
commit 125335f544
7 changed files with 313 additions and 11 deletions

View File

@ -54,9 +54,37 @@ public class IDCard implements Serializable {
`@RelationOneToOne` 配置描述: `@RelationOneToOne` 配置描述:
- selfField 当前实体类的属性 - selfField 当前实体类的属性selfField 是主键属性,且当前实体类对应的表只有 1 个主键时,可以不填写)
- targetField 目标对象的关系实体类的属性 - targetField 目标对象的关系实体类的属性
假设数据库 5 条 Account 数据,然后进行查询:
```java
List<Account> accounts = accountMapper.selectAllWithRelations();
System.out.println(accounts);
```
其执行的 SQL 如下:
```sql
SELECT `id`, `user_name`, `age` FROM `tb_account`
SELECT `account_id`, `card_no`, `content` FROM `tb_idcard`
WHERE account_id IN (1, 2, 3, 4, 5)
```
查询打印的结果如下:
```txt
[
Account{id=1, userName='孙悟空', age=18, idCard=IDCard{accountId=1, cardNo='0001', content='内容1'}},
Account{id=2, userName='猪八戒', age=19, idCard=IDCard{accountId=2, cardNo='0002', content='内容2'}},
Account{id=3, userName='沙和尚', age=19, idCard=IDCard{accountId=3, cardNo='0003', content='内容3'}},
Account{id=4, userName='六耳猕猴', age=19, idCard=IDCard{accountId=4, cardNo='0004', content='内容4'}},
Account{id=5, userName='王麻子叔叔', age=19, idCard=IDCard{accountId=5, cardNo='0005', content='内容5'}}
]
```
## 一对多 `@RelationOneToMany` ## 一对多 `@RelationOneToMany`
@ -99,6 +127,23 @@ public class Book implements Serializable {
- targetField 目标对象的关系实体类的属性 - targetField 目标对象的关系实体类的属性
假设数据库 5 条 Account 数据,然后进行查询:
```java
List<Account> accounts = accountMapper.selectAllWithRelations();
System.out.println(accounts);
```
其执行的 SQL 如下:
```sql
SELECT `id`, `user_name`, `age` FROM `tb_account`
SELECT `id`, `account_id`, `title`, `content` FROM `tb_book`
WHERE account_id IN (1, 2, 3, 4, 5)
```
## 多对一 `@RelationManyToOne` ## 多对一 `@RelationManyToOne`
@ -208,6 +253,111 @@ public class Role implements Serializable {
> 注意selfField 和 targetField 配置的是类的属性名joinSelfColumn 和 joinTargetColumn 配置的是中间表的字段名。 > 注意selfField 和 targetField 配置的是类的属性名joinSelfColumn 和 joinTargetColumn 配置的是中间表的字段名。
## 父子关系查询
比如在一些系统中,比如菜单会有一些父子关系,例如菜单表如下:
```sql
CREATE TABLE `tb_menu`
(
`id` INTEGER auto_increment,
`parent_id` INTEGER,
`name` VARCHAR(100)
);
```
Menu.java 定义如下:
```java
@Table(value = "tb_menu")
public class Menu implements Serializable {
private Long id;
private Long parentId;
private String name;
@RelationManyToOne(selfField = "parentId", targetField = "id")
private Menu parent;
@RelationOneToMany(selfField = "id", targetField = "parentId")
private List<Menu> children;
//getter setter
}
```
查询顶级菜单:
```java
QueryWrapper qw = QueryWrapper.create();
qw.where(MENU.PARENT_ID.eq(0));
List<Menu> menus = menuMapper.selectListWithRelationsByQuery(qw);
System.out.println(JSON.toJSONString(menus));
```
SQL 执行如下:
```sql
SELECT `id`, `parent_id`, `name` FROM `tb_menu` WHERE `parent_id` = 0
SELECT `id`, `parent_id`, `name` FROM `tb_menu` WHERE id = 0
SELECT `id`, `parent_id`, `name` FROM `tb_menu` WHERE parent_id IN (1, 2, 3)
```
JSON 输出内容如下:
```json
[
{
"children": [
{
"id": 4,
"name": "子菜单",
"parentId": 1
},
{
"id": 5,
"name": "子菜单",
"parentId": 1
}
],
"id": 1,
"name": "顶级菜单1",
"parentId": 0
},
{
"children": [],
"id": 2,
"name": "顶级菜单2",
"parentId": 0
},
{
"children": [
{
"id": 6,
"name": "子菜单",
"parentId": 3
},
{
"id": 7,
"name": "子菜单",
"parentId": 3
},
{
"id": 8,
"name": "子菜单",
"parentId": 3
}
],
"id": 3,
"name": "顶级菜单3",
"parentId": 0
}
]
```
## Field Query ## Field Query

View File

@ -31,17 +31,17 @@ public class Account implements Serializable {
private int age; private int age;
@RelationOneToOne(selfField = "id", targetField = "accountId") // @RelationOneToOne(selfField = "id", targetField = "accountId")
private IDCard idCard; private IDCard idCard;
@RelationOneToMany(selfField = "id", targetField = "accountId") @RelationOneToMany(selfField = "id", targetField = "accountId")
private List<Book> books; private List<Book> books;
@RelationManyToMany( // @RelationManyToMany(
joinTable = "tb_role_mapping", // joinTable = "tb_role_mapping",
selfField = "id", joinSelfColumn = "account_id", // selfField = "id", joinSelfColumn = "account_id",
targetField = "id", joinTargetColumn = "role_id" // targetField = "id", joinTargetColumn = "role_id"
) // )
private List<Role> roles; private List<Role> roles;

View File

@ -0,0 +1,15 @@
package com.mybatisflex.test.relation.onetoone;
import com.mybatisflex.core.mybatis.FlexConfiguration;
import com.mybatisflex.core.table.TableInfo;
import com.mybatisflex.core.table.TableInfoFactory;
public class MainTest {
public static void main(String[] args) {
TableInfo tableInfo = TableInfoFactory.ofEntityClass(Book.class);
tableInfo.buildResultMap(new FlexConfiguration());
System.out.println(tableInfo);
}
}

View File

@ -0,0 +1,91 @@
/*
* Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com).
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* <p>
* http://www.apache.org/licenses/LICENSE-2.0
* <p>
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mybatisflex.test.relation.onetoone;
import com.mybatisflex.annotation.RelationManyToOne;
import com.mybatisflex.annotation.RelationOneToMany;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.util.List;
@Table(value = "tb_menu")
public class Menu implements Serializable {
private Long id;
private Long parentId;
private String name;
@RelationManyToOne(selfField = "parentId",targetField = "id")
private Menu parent;
@RelationOneToMany(selfField = "id",targetField = "parentId")
private List<Menu> children;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Menu getParent() {
return parent;
}
public void setParent(Menu parent) {
this.parent = parent;
}
public List<Menu> getChildren() {
return children;
}
public void setChildren(List<Menu> children) {
this.children = children;
}
@Override
public String toString() {
return "Menu{" +
"id=" + id +
", parentId=" + parentId +
", name='" + name + '\'' +
", parent=" + parent +
", children=" + children +
'}';
}
}

View File

@ -15,13 +15,16 @@
*/ */
package com.mybatisflex.test.relation.onetoone; package com.mybatisflex.test.relation.onetoone;
import com.alibaba.fastjson.JSON;
import com.mybatisflex.core.MybatisFlexBootstrap; import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.audit.AuditManager; import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.audit.ConsoleMessageCollector; import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.audit.MessageCollector; import com.mybatisflex.core.audit.MessageCollector;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.relation.RelationManager; import com.mybatisflex.core.relation.RelationManager;
import com.mybatisflex.test.relation.mapper.AccountMapper; import com.mybatisflex.test.relation.mapper.AccountMapper;
import com.mybatisflex.test.relation.mapper.BookMapper; import com.mybatisflex.test.relation.mapper.BookMapper;
import com.mybatisflex.test.relation.mapper.MenuMapper;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
@ -30,11 +33,14 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.util.List; import java.util.List;
import static com.mybatisflex.test.relation.onetoone.table.MenuTableDef.MENU;
public class RelationsTester { public class RelationsTester {
static AccountMapper accountMapper; static AccountMapper accountMapper;
static BookMapper bookMapper; static BookMapper bookMapper;
static MenuMapper menuMapper;
@BeforeClass @BeforeClass
public static void init() { public static void init() {
@ -48,6 +54,7 @@ public class RelationsTester {
.setDataSource(dataSource) .setDataSource(dataSource)
.addMapper(AccountMapper.class) .addMapper(AccountMapper.class)
.addMapper(BookMapper.class) .addMapper(BookMapper.class)
.addMapper(MenuMapper.class)
.start(); .start();
//开启审计功能 //开启审计功能
@ -59,13 +66,14 @@ public class RelationsTester {
accountMapper = bootstrap.getMapper(AccountMapper.class); accountMapper = bootstrap.getMapper(AccountMapper.class);
bookMapper = bootstrap.getMapper(BookMapper.class); bookMapper = bootstrap.getMapper(BookMapper.class);
menuMapper = bootstrap.getMapper(MenuMapper.class);
} }
@Test @Test
public void testOneToOne() { public void testOneToOne() {
List<Account> accounts = accountMapper.selectAllWithRelations(); List<Account> accounts = accountMapper.selectAllWithRelations();
System.out.println(">>>>>>1: " + accounts); System.out.println(JSON.toJSONString(accounts));
} }
@ -85,5 +93,14 @@ public class RelationsTester {
System.out.println(">>>>>>2: " + accounts); System.out.println(">>>>>>2: " + accounts);
} }
@Test
public void testMenu() {
QueryWrapper qw = QueryWrapper.create();
qw.where(MENU.PARENT_ID.eq(0));
List<Menu> menus = menuMapper.selectListWithRelationsByQuery(qw);
System.out.println( JSON.toJSONString(menus));
}
} }

View File

@ -1,11 +1,17 @@
INSERT INTO tb_account INSERT INTO tb_account
VALUES (1, '张三', 18), VALUES (1, '孙悟空', 18),
(2, '王麻子叔叔', 19); (2, '猪八戒', 19),
(3, '沙和尚', 19),
(4, '六耳猕猴', 19),
(5, '王麻子叔叔', 19);
INSERT INTO tb_idcard INSERT INTO tb_idcard
VALUES (1,'0001', '内容1'), VALUES (1,'0001', '内容1'),
(2,'0002', '内容2'); (2,'0002', '内容2'),
(3,'0003', '内容3'),
(4,'0004', '内容4'),
(5,'0005', '内容5');
INSERT INTO tb_book INSERT INTO tb_book
VALUES (1,1,'图书1', '内容1'), VALUES (1,1,'图书1', '内容1'),
@ -28,3 +34,19 @@ VALUES (1,1),
(2,1), (2,1),
(2,2), (2,2),
(2,3); (2,3);
INSERT INTO tb_menu
VALUES (1,0,'顶级菜单1'),
(2,0,'顶级菜单2'),
(3,0,'顶级菜单3'),
(4,1,'子菜单'),
(5,1,'子菜单'),
(6,3,'子菜单'),
(7,3,'子菜单'),
(8,3,'子菜单'),
(9,4,'子菜单'),
(10,4,'子菜单'),
(10,5,'子菜单'),
(10,5,'子菜单'),
(10,9,'子菜单'),
(10,9,'子菜单');

View File

@ -32,4 +32,11 @@ CREATE TABLE IF NOT EXISTS `tb_role_mapping`
( (
`account_id` INTEGER , `account_id` INTEGER ,
`role_id` INTEGER `role_id` INTEGER
);
CREATE TABLE IF NOT EXISTS `tb_menu`
(
`id` INTEGER auto_increment,
`parent_id` INTEGER,
`name` VARCHAR(100)
); );