专业制作网站多少钱,沈阳企业网站制作公司,适合做模型的著名建筑,湖北省招投标交易云平台文章目录 前言一、一对一映射1.1 创建实体1.2 xml配置 二、一对多映射2.1 创建实体2.2 resultMap配置2.3 测试 三、 多对多映射3.1 创建实体3.2 resultMap配置3.3 测试 前言
MyBatis是一个Java持久化框架#xff0c;它提供了一种将数据库表和Java对象之间进行关系映射的方式。… 文章目录 前言一、一对一映射1.1 创建实体1.2 xml配置 二、一对多映射2.1 创建实体2.2 resultMap配置2.3 测试 三、 多对多映射3.1 创建实体3.2 resultMap配置3.3 测试 前言
MyBatis是一个Java持久化框架它提供了一种将数据库表和Java对象之间进行关系映射的方式。这种关系映射可以通过XML配置文件或注解来定义。
在MyBatis中关系映射是通过Mapper接口和SQL语句来实现的。Mapper接口定义了数据库操作的方法而SQL语句则定义了具体的数据库操作。
在关系映射中MyBatis提供了一些注解和XML配置来实现对象和数据库表之间的映射关系。例如Table注解可以用于指定Java对象对应的数据库表Column注解可以用于指定Java对象属性对应的数据库字段。
此外MyBatis还支持一对一、一对多、多对一和多对多等复杂的关系映射。通过配置关联关系可以在查询时自动加载相关联的对象。
一、一对一映射
一对一映射是指数据库中的两个表之间存在一对一的关系即一个记录在一个表中只对应一个记录在另一个表中的情况。
1.1 创建实体
假设我们有两个表student学生表和 id_card身份证表。每个学生只有一个身份证而每个身份证只属于一个学生。
public class Student {private int id;private String name;private IdCard idCard;// 省略构造函数和getter/setter方法
}public class IdCard {private int id;private String number;private Student student;// 省略构造函数和getter/setter方法
}
1.2 xml配置
使用XML配置的方式可以在Student类对应的中使用标签来定义关联关系
resultMap idstudentResultMap typecom.xqx.model.Student!-- 省略其他映射配置 --association propertyidCard javaTypecom.xqx.model.IdCardid propertyid columnid_card_id/result propertynumber columnid_card_number//association
/resultMap
通过以上配置我们可以在查询学生信息时自动加载关联的身份证信息。
二、一对多映射
一对多映射是指数据库中的两个表之间存在一对多的关系即一个记录在一个表中对应多个记录在另一个表中的情况。例如一个订单Oeder与一个订单详情OrderItem之间的关系。假设我们有以下表结构
2.1 创建实体
建立一个OrderVo。OrderVo 类用于表示一个订单及其关联的订单项。
package com.xqx.vo;import com.xqx.model.Order;
import com.xqx.model.OrderItem;
import lombok.Data;import java.util.ArrayList;
import java.util.List;Data
public class OrderVo extends Order {private ListOrderItem orderItems new ArrayList();
} 2.2 resultMap配置 resultMap idOrderVoMap typecom.xqx.vo.OrderVoresult columnorder_id propertyorderId/resultresult columnorder_no propertyorderNo/result//多关系使用collectioncollection propertyorderItems ofTypecom.xqx.model.OrderItemresult columnorder_item_id propertyorderItemId/resultresult columnproduct_id propertyproductId/resultresult columnquantity propertyquantity/resultresult columnoid propertyoid/result/collection/resultMap2.3 测试
OrderMapper
package com.xqx.mapper;import com.xqx.model.Order;
import com.xqx.vo.OrderVo;
import org.springframework.stereotype.Repository;Repository
public interface OrderMapper {OrderVo selectbyOid(Integer boid);}OrderBiz
package com.xqx.biz;import com.xqx.vo.OrderVo;public interface OrderBiz {OrderVo selectbyOid(Integer boid);
}OrderBizImpl package com.xqx.biz;import com.xqx.mapper.OrderMapper;
import com.xqx.vo.OrderVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;Service
public class OrderBizImpl implements OrderBiz {Autowiredprivate OrderMapper OrderMapper;Overridepublic OrderVo selectbyOid(Integer boid) {return OrderMapper.selectbyOid(boid);}
}Junit测试
package com.xqx.biz;import com.xqx.vo.OrderVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:Spring-context.xml})
public class OrderBizImplTest {Autowiredprivate OrderBiz OrderBiz;Testpublic void selectbyOid() {OrderVo orderVO OrderBiz.selectbyOid(7);System.out.println(orderVO);orderVO.getOrderItems().forEach(System.out::println);}
}测试结果
三、 多对多映射
多对多映射是指多个对象与多个对象具有多对多的关系。以根据书籍id查找关联属性类别为例
3.1 创建实体
vo对象
package com.xqx.vo;import com.xqx.model.BookCategory;
import com.xqx.model.Book;
import lombok.Data;
import java.util.List;Data
public class BookVo extends Book {private ListBookCategory bookc new ArrayList();
}3.2 resultMap配置 resultMap idBookVoMap typecom.xqx.vo.BookVo result columnbook_id propertybookId/resultresult columnbook_name propertybookName/resultresult columnprice propertyprice/resultcollection propertybookc ofTypecom.xqx.model.Categoryresult columncategory_id propertycategoryId/resultresult columncategory_name propertycategoryName/result/collection/resultMap!--根据书籍的id查询书籍的信息及所属属性--select idselectByBookId resultMapBookVoMap parameterTypejava.lang.IntegerSELECT*FROMt_hibernate_book b,t_hibernate_category c,t_hibernate_book_category bcWHEREb.book_id bc.bidAND c.category_id bc.bcidAND b.book_id #{bid}/select3.3 测试
BookMapper
package com.xqx.mapper;import com.xqx.model.Book;
import com.xqx.vo.BookVo;
import org.springframework.stereotype.Repository;Repository
public interface BookMapper {HbookVo selectByBid(Integer bid);}BookBiz
package com.xqx.biz;import com.xqx.vo.BookVo;public interface BookBiz {HbookVo selectByBid(Integer bid);
}BookBizImpl
package com.xqx.biz;import com.xqx.mapper.BookMapper;
import com.xqx.vo.BookVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;Service
public class BookBizImpl implements BookBiz {Autowiredprivate BookMapper BookMapper;Overridepublic BookVo selectByBid(Integer bid) {return BookMapper.selectByBid(bid);}
}junit测试
package com.xqx.biz;import com.xqx.vo.BookVo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:Spring-context.xml})
public class BookBizImplTest {Autowiredprivate BookBiz BookBiz;Testpublic void selectByBid() {BookVo bookVo BookBiz.selectByBid(8);System.out.println(bookVo);BookVo.getHcategory().forEach(System.out::println);}
}