【附案例、好理解】Mybatis注解开发集成SpringBoot【带你弄清一对一、一对多、多对多关系】

本文对比了Mybatis与Spring Data Jpa,强调了Mybatis的灵活性和面向关系的优势,同时详细介绍了在Mybatis中配置和处理多对多、一对多及一对一关系的示例,包括映射关系、查询方法和注意事项。
摘要由CSDN通过智能技术生成

1、 Mybatis与Spring Data Jpa对比:


Spring Data JPA与MyBatis对比,其实也就是hibernate与MyBatis对比。Spring Data Jpa底层基于Hibernate实现,让程序员避免了许多机械化的crud代码,并且方便快捷,那Mybatis对于Spring Data jpa 到底有何优势呢?

优点

  • 简单易学
  • 更灵活:能将sql代码嵌入到查询对象中,并且能自动封装对象,只要字段名字一样就可以。
  • MyBatis更适合于面向关系:这其实就是灵活性,对于增删查改更加灵活,SpringData Jpa更加面向对象
  • 有助于Sql查询优化,返回对象可控:Mybitas半自动化ORM框架有助于设计表和对象等

缺点:

  • 开发效率没有SpringData Jpa那么快:因为每个查询都需要自己写sql并且对应到哪个对象
  • 需要维护一个结果集Result:这大大增加了程序员的负担,特别是在一对多、多对多关系中
  • SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库
  • 功能不够完善:因为框架本身非常小
总之各有优缺点,在开发效率和灵活性、sql查询优化之间还是需要权衡一下的

2、多对多

这里选用博客文章和标签的例子,两个对象分别维护对方的一个列表

Article

public class Article {
    private int id;
    private String articleName;

    public List<Tag> getTags() {
        return tags;
    }

    public void setTags(List<Tag> tags) {
        this.tags = tags;
    }

    private List<Tag> tags;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return articleName;
    }

    public void setName(String name) {
        this.articleName = name;
    }

    public Article(int id, String name) {
        this.id = id;
        this.articleName = name;
    }

    public Article() {
    }

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", articlename='" + articleName + '\'' +
                ", tags=" + tags +
                '}';
    }
}

Tag

public class Tag {

    @Id
    private int id;
    private String tagname;

    private List<Article> articles;


    public List<Article> getArticles() {
        return articles;
    }

    public void setArticles(List<Article> articles) {
        this.articles = articles;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return tagname;
    }

    public void setName(String name) {
        this.tagname = name;
    }

    public Tag(int id, String name) {
        this.id = id;
        this.tagname =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值