学无止境(1)关于Mybatis注解多表添加数据操作

今天是2017年11月28日!
今天起,正式开启学无止境系列,其实也没什么,就是记录下自己在编码中遇到的问题,学无止境嘛,遇到问题就要解决问题。

今天在用Mybatis+springMVC+spring做一个小练习,所有配置全部用的注解,之前对于Mybatis的学习,只是对配置方式掌握的还行,对于注解没有学到位。这次又全部用注解,所以遇到一个问题,就是多表添加数据。之前只会多表联查,练习的时候查询也还不是很会,还得看之前写过的例子,总结下来就是,自己用的太少,遗忘性有点大。

好了,接下来正式分析这次遇到的问题!

这次练习写的是一个论坛网站,把显示写完之后是一个添加操作,显示也是联查查询,之前没有写过用注解联表添加,所以今天遇到就一脸懵逼。网上查也没有查到个所以然,最后还是通过我们老姐给我讲解,慢慢理解到了。

这里总结下思路:由于是多表查询,插入的数据是多个表里面的部分列名,我们可以先把需要插入的数据封装成一个Bean。由于表与表之间的主外键关系,插入数据就得分先后顺序,先插入没有外键一方的数据(封装方法),再插入有外键一方的数据(封装方法)。在有外键的一方,通过外键将新生成的数据连接。怎么产生联系呢?就是你先插入的数据已经生成一条记录, 在数据库里就会产生一个ID,再到有外键一方的方法中,通过外键,将两表建立联系。就会生成一个新的添加数据。

代码如下:
1:封装Bean,这里是两个类中的一部分属性
这里写图片描述

public class TopiceBean {
    private String title;   //标题
    private String author;  //作者
    private String content; //类容
    private Date submittime;    //提交时间

    private String forumname;   //主题
    private String manager;     //版主


    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public Date getSubmittime() {
        return submittime;
    }
    public void setSubmittime(Date submittime) {
        this.submittime = submittime;
    }
    public String getForumname() {
        return forumname;
    }
    public void setForumname(String forumname) {
        this.forumname = forumname;
    }
    public String getManager() {
        return manager;
    }
    public void setManager(String manager) {
        this.manager = manager;
    }


}

2:先添加没有外键一方的数:mapper

@Insert("insert into tb_forum (forumname,manager) values(#{topiceBean.forumname},#{topiceBean.manager})")
    public int addForumnameAndManager(@Param("topiceBean")TopiceBean topiceBean);

3:添加有主键一方的数据,这里注意的是:外键连接为新生成的ID,可以添加最大ID,通过子查询

    @Insert("insert into tb_topic (title,author,content,submittime,forumid) values(#{topiceBean.title},#{topiceBean.author},#{topiceBean.content},#{topiceBean.submittime},(select max(id) from tb_forum))")
    public int addTopice(@Param("topiceBean")TopiceBean topiceBean);

4:编写Dao层:

public int addTopic(TopiceBean topiceBean);

5:编写Dao层实现类:通过springIOC容器控制反转,依赖注入,需要把mapper全部注入进来,在方法里,注意先后顺序。
这里写图片描述

@Component
public class TopiceDaoImpl implements ITopiceDao{

    @Autowired
    private ITopiceMapper topiceMapper;

    @Autowired
    private IForumMapper forumMapper;

    //添加帖子
    @Override
    public int addTopic(TopiceBean topiceBean) {
        int result = forumMapper.addForumnameAndManager(topiceBean);
        int result2 = topiceMapper.addTopice(topiceBean);
        if(result>0 && result2>0) {
            return 1;
        }else {
            return 0;
        }
    }
}

6:接下来就是业务接口,业务实现类,最后Controller页面控制器,也是通过依赖注入,一层一层的调用。最后返回一个添加受影响行数。

                                            以此记录!
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值