博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mybatis 使用 mapper 接口规范的 一对一, 一对多,多对多映射
阅读量:5077 次
发布时间:2019-06-12

本文共 11017 字,大约阅读时间需要 36 分钟。

首先的 是 最原始的 pojo 类来 做简单映射

简单 pojo 映射:

简单 pojo 映射文件的配置

 

 

以下都是对于原始基本的 pojo 类 进行包装扩展后来实现 其他列的映射

一对一:

OneToOne

 

 

一对多:

OneToMany映射文件的配置

 

 

 

多对多:

关键还是在于 mapper.xml 文件的书写

ManyToMany映射文件的配置

 

上面配置文件都写完后,就可以进行 mapper 接口 mapper.java 的编写了

 

顺便贴上 相应的 pojo (User 里 包含一个 List<Orders>  然后 Orders 里又包含一个 List<OrderDetail>  最后 OrderDetail 里包含一个 Item ) 修改后的样子:

也就是 数据库的 主从表之间的外键关系,

User ------> Order  (1:n)   

Order  -----> OrderDetail  (1:n)

OrderDetail ----> Item (1:1)

 

下面开始 贴 多对多的  pojo 部分的 代码了 (我觉得 多对多都会了 其他的都不在话下,所以其他的没必要贴了):

package com.ghc.pojo;import java.util.Date;import java.util.List;public class User {    private int id;    private String userName;    private Date birthday;    private String sex;    private String address;    // 一个人有多个订单    private List
orderList; public List
getOrderList() { return orderList; } public void setOrderList(List
orderList) { this.orderList = orderList; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
com.ghc.pojo.User

 

package com.ghc.pojo;import java.util.Date;import java.util.List;public class Orders {    private int id;    private int user_id;    private String number;    private Date createtime;    private String note;    public List
getOrderDetailList() { return orderDetailList; } public void setOrderDetailList(List
orderDetailList) { this.orderDetailList = orderDetailList; } // 一个订单可以有多个订单明细 private List
orderDetailList; public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUser_id() { return user_id; } public void setUser_id(int user_id) { this.user_id = user_id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note; }}
com.ghc.pojo.Orders

 

package com.ghc.pojo;public class OrderDetail {    private int id;    private int ordersId;    private int itemsId;    private int itemsNum;    //而一个订单明细对应一条项目    private  Items item;    public Items getItem() {        return item;    }    public void setItem(Items item) {        this.item = item;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public int getOrdersId() {        return ordersId;    }    public void setOrdersId(int ordersId) {        this.ordersId = ordersId;    }    public int getItemsId() {        return itemsId;    }    public void setItemsId(int itemsId) {        this.itemsId = itemsId;    }    public int getItemsNum() {        return itemsNum;    }    public void setItemsNum(int itemsNum) {        this.itemsNum = itemsNum;    }}
com.ghc.pojo.OrderDetail
package com.ghc.pojo;import java.util.Date;public class Items {    private int id;    private String name;    private float price;    private String detail;    private String pic;    private Date createtime;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public float getPrice() {        return price;    }    public void setPrice(float price) {        this.price = price;    }    public String getDetail() {        return detail;    }    public void setDetail(String detail) {        this.detail = detail;    }    public String getPic() {        return pic;    }    public void setPic(String pic) {        this.pic = pic;    }    public Date getCreatetime() {        return createtime;    }    public void setCreatetime(Date createtime) {        this.createtime = createtime;    }}
com.ghc.pojo.Items

 

 

package com.ghc.dao;import com.ghc.pojo.User;import com.ghc.pojo.UserOrderWrapper;import com.ghc.pojo.UserOrderWrapperFirst;import java.util.List;public interface UserDao {    User findUserById(int id) throws Exception;    List
findUserOrder() throws Exception; List
findOneToMany() throws Exception; List
findManyToMany() throws Exception;}
UserDao

 

如果经常要打印输出,建议在 pojo 中 覆写 toString,不然就要跟下面这么苦逼的 拼 String 打印了

import com.ghc.dao.UserDao;import com.ghc.pojo.*;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.util.List;public class UserDaoTest {    private SqlSessionFactory sqlSessionFactory;    @Before    public void injectSqlSessionFactory() throws IOException {        sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("config/SqlMappingConfig.xml"));    }    @Test    public void testFindUserById() throws Exception {        UserDao userDao = sqlSessionFactory.openSession().getMapper(UserDao.class);        User user = userDao.findUserById(1);        System.out.println(user.getUserName());        List
userOrderWrapperFirstList = userDao.findUserOrder(); for (UserOrderWrapperFirst userOrder : userOrderWrapperFirstList) { String userName = userOrder.getUser().getUserName(); int orderId = userOrder.getId(); System.out.println(userName + " <-----> " + String.valueOf(orderId)); } } @Test public void testFindOneToMany() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); List
userOrderWrappers = userDao.findOneToMany(); for (int i = 0; i < userOrderWrappers.size(); i++) { UserOrderWrapper uow = userOrderWrappers.get(i); List
orderDetails = uow.getOrderDetails(); User user = uow.getUser(); for (int j = 0; j < orderDetails.size(); j++) { System.out.print(uow.getId() + "--" + uow.getUser_id() + "--" + uow.getNumber() + "--" + uow.getCreatetime() + "--" + uow.getNote() + "--"); System.out.print(user.getUserName() + "--" + user.getSex() + "--" + user.getAddress() + "--"); OrderDetail odt = orderDetails.get(j); System.out.println(odt.getId() + "--" + odt.getItemsId() + "--" + odt.getItemsNum() + "--" + odt.getOrdersId()); } } } @Test public void testFindManyToMany() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); UserDao userDao = sqlSession.getMapper(UserDao.class); List
userList = userDao.findManyToMany(); for (User user : userList) { List
orderList = user.getOrderList(); for (Orders order : orderList) { List
orderDetailList = order.getOrderDetailList(); for (OrderDetail orderDetail : orderDetailList) { Items item = orderDetail.getItem(); System.out.println(order.getId() + "--" + order.getUser_id() + "--" + order.getNumber() + "--" + order.getCreatetime() + "--" + order.getNote() +"--" + user.getUserName() + "--" + user.getSex() + "--" + user.getAddress() + "--" + orderDetail.getId() + "--" + orderDetail.getItemsId() + "--" + orderDetail.getItemsNum() + "--" + orderDetail.getOrdersId() + "--" + item.getId() + "--" + item.getName() + "--" + item.getName() + "--" + item.getPrice() + "--" + item.getDetail() + "--" + item.getPic() + "--" + item.getCreatetime()); } } } }}
Junit 测试Mapper 接口方法

 

测试结果 与数据库基本一致 :

 

 

 至此, mybatis 的 所谓高级部分全部完成(动态 sql 部分另开一篇去说好了),实际项目开发的时候,单表是采用 generator 逆向工程生成 pojo,mapper.xml , mapper.java 的

但是也需要配置数据库连接,表信息等等。。。到一个 generatorconfig.xml 这样类似的 一个 配置文件里,然后调用生成工具的代码进行生成。

但是懂了原理,任他怎么来都容易理解了。

转载于:https://www.cnblogs.com/Frank99/p/8880069.html

你可能感兴趣的文章
CIS-framework之开发环境目录结构规范
查看>>
end=‘’
查看>>
自动出借-python+selenium
查看>>
04-TypeScript中的方法新功能(上)
查看>>
php 安装redis扩展
查看>>
关于 addEventListener 和 handleEvent 方法
查看>>
Html5 Canvas初探学习笔记(12) -图片裁减和调整
查看>>
Csharp:操作存儲過程輸出參數,和返回值
查看>>
csharp: LocalDataCache.sync
查看>>
真机上is waiting the debugger to attach问题请教
查看>>
NSNotificationCenter 传对象
查看>>
springboot2.0整合logback日志(详细)
查看>>
构造方法和构造函数
查看>>
线程安全的单例模式
查看>>
.net framework多个版本在IIS服务器上时应注意-重新注册IIS-错误Server Application Unavailable...
查看>>
放下这些,你会更优秀!
查看>>
《大空头》读书笔记
查看>>
线程池
查看>>
mybatis plus 的代码生成器
查看>>
机房收费系统之重新设计
查看>>