对底层数据表关联关系的处理,我们总是绕不开什么一对一,一对多,多对多这里比较烦人的关系。 业界优秀的ORM框架也都给出了自己的答案,简单来说就以下几种方式:
hibernate和JPA对开发基本屏蔽了底层数据的处理,只需要在model层设置数据级联关系即可。但这种设置也往往是噩梦的开始。
mybatis 提供了简单的@One @Many注解,然后编写xml映射关系来提供级联处理。
还有一种就是干脆不依赖框架,直接应用自己掌控。
因为FluentMybatis是基于mybatis上做封装和扩展的,所以这里主要聊聊mybatis处理的方式,以及给出FluentMybatis的解放方案。
那么就可以建以下3张表:
数据字典
CREATE TABLE t_member
(
id bigint(21) unsigned auto_increment primary key COMMENT ‘主键id’,
user_name varchar(45) DEFAULT NULL COMMENT ‘名字’,
is_girl tinyint(1) DEFAULT 0 COMMENT ‘0:男孩; 1:女孩’,
age int DEFAULT NULL COMMENT ‘年龄’,
school varchar(20) DEFAULT NULL COMMENT ‘学校’,
gmt_created datetime DEFAULT NULL COMMENT ‘创建时间’,
gmt_modified datetime DEFAULT NULL COMMENT ‘更新时间’,
is_deleted tinyint(1) DEFAULT 0 COMMENT ‘是否逻辑删除’
) ENGINE = InnoDB
CHARACTER SET = utf8 COMMENT = ‘成员表:女孩或男孩信息’;
CREATE TABLE t_member_love
(
id bigint(21) unsigned auto_increment primary key COMMENT ‘主键id’,
girl_id bigint(21) NOT NULL COMMENT ‘member表外键’,
boy_id bigint(21) NOT NULL COMMENT ‘member表外键’,
status varchar(45) DEFAULT NULL COMMENT ‘状态’,
gmt_created datetime DEFAULT NULL COMMENT ‘创建时间’,
gmt_modified datetime DEFAULT NULL COMMENT ‘更新时间’,
is_deleted tinyint(2) DEFAULT 0 COMMENT ‘是否逻辑删除’
) ENGINE = InnoDB
CHARACTER SET = utf8 COMMENT = ‘成员恋爱关系’;
CREATE TABLE t_member_favorite
(
id bigint(21) unsigned auto_increment primary key COMMENT ‘主键id’,
member_id bigint(21) NOT NULL COMMENT ‘member表外键’,
favorite varchar(45) DEFAULT NULL COMMENT ‘爱好: 电影, 爬山, 徒步…’,
gmt_created datetime DEFAULT NULL COMMENT ‘创建时间’,
gmt_modified datetime DEFAULT NULL COMMENT ‘更新时间’,
is_deleted tinyint(2) DEFAULT 0 COMMENT ‘是否逻辑删除’
) ENGINE = InnoDB
CHARACTER SET = utf8 COMMENT = ‘成员爱好’;
复制代码
添加项目Maven依赖
具体pom.xml文件
代码生成
public class AppEntityGenerator {
static final String url = “jdbc:mysql://localhost:3306/fluent_mybatis_demo?useSSL=false&useUnicode=true&characterEncoding=utf-8”;
/**
* 生成代码的package路径
*/
static final String basePackage = “cn.org.fluent.mybatis.many2many.demo”;
public static void main(String