mybatis一对多xml配置

1.一的配置

<resultMap id="accListResultMap" type="com.hex.dop.pms.model.PMAccount">
<result column="PK_ID" property="pkId" jdbcType="VARCHAR"/>
<result column="ACCOUNT" property="account" jdbcType="VARCHAR"/>
<result column="ACCOUNTBANK" property="accountBank" jdbcType="VARCHAR"/>
<result column="ACCOUNTBANKNAME" property="accountBankName" jdbcType="VARCHAR"/>

...
<result column="APPLYDATE" property="applyDate" jdbcType="TIMESTAMP"/>
<result column="STATUS" property="status" jdbcType="VARCHAR"/>
<collection property="expresss" column="PK_ID" select="getExpress"/>
</resultMap>

 

2.多的配置

<resultMap id="expressListResultMap" type="com.hex.dop.pms.model.Express">
<result column="ID" property="id" jdbcType="VARCHAR"></result>
<result column="SENDER" property="sender" jdbcType="VARCHAR"></result>
<result column="CONSIGNEE" property="consignee" jdbcType="VARCHAR"></result>
<result column="REMARK" property="remark" jdbcType="VARCHAR"></result>
<result column="UPONTIME" property="uponTime" jdbcType="TIMESTAMP"></result>
<result column="EXPRESSNUMBER" property="expressNumber" jdbcType="VARCHAR"></result>
<result column="EXPRESSCOMPANY" property="expressCompany" jdbcType="VARCHAR"></result>
</resultMap>

 

3.上面的collection标签保证了PK_ID相关联

<!--根据id查询快递信息-->
<select id="getExpress" parameterType="java.util.Map" resultMap="expressListResultMap">
select E.ID,E.SENDER,E.CONSIGNEE,E.REMARK,E.UPONTIME,E.EXPRESSNUMBER,E.EXPRESSCOMPANY
from SYW_ACPMS_EXPRESS E
where E.PK_ID=#{pkId}
</select>

 

4.PMAccount.java

private String pkId;    //唯一编号

private List<Express> expresss = null;//每一个账户对应有多个快递

public List<Express> getExpresss() {
if(expresss==null){//如果为空,返回一个空的集合
return new ArrayList<Express>();
}
return expresss;
}

public void setExpresss(List<Express> expresss) {
this.expresss = expresss;
}

Express.java

private   String pkId;//账户主键,建立逻辑上的连接关系

 

5.control层:

/*
* 根据id查出快递信息返回
* */
@RequestMapping(value ="/express")
@ResponseBody
public Map getAccExpress(@RequestBody PMAccount acc){
Map map = new HashMap();
try{
acc = this.accountManagerService.getAcc(acc.getPkId());//将account传入,查询快递信息
List list = acc.getExpresss();//获得快递集合
map.put("data",list);//map返回的是数组,所以必须在前台使用encode都的对象['data']才行
}catch(Exception e){
e.printStackTrace();
}
return map;
}

service层:

public PMAccount getAcc(String id){
return this.pmAccountMapper.getAcc(id);
}

dao层:

public PMAccount getAcc(String id){
Map map = new HashMap<String,String>();
map.put("pkId", id);//这里是将前台传入的值放入map中
PMAccount acc = (PMAccount)sqlSessionTemplate.selectList("com.hex.dop.pms.dao.acc.PMAccountMapper.getAcc", map).get(0);
return acc;
}

 control层直到调用dao层后,返回出查询的账户对象,然后账户对象中获得快递对象(然后传递pkid,自动调用collection标签中select中的语句,都是collection标签的作用),这样便获得查询出的快递对象,当然还需要acc.getExpresss()从账户对象中取出来。

转载于:https://www.cnblogs.com/fenghua12/p/5281902.html

MyBatis 一对多关系的实现可以通过 XML 配置文件来完成。以下是一个示例: 假设有两个表:订单表和订单明细表,它们之间是一对多的关系,即一个订单可以对应多个订单明细。 1. 创建实体类 首先,需要创建两个实体类,一个是订单实体类,一个是订单明细实体类。在订单实体类中,需要添加一个属性,用来存储订单明细列表。 ```java public class Order { private Integer id; private String orderNo; private List<OrderItem> orderItemList; // getter/setter 省略 } public class OrderItem { private Integer id; private Integer orderId; private String productName; // getter/setter 省略 } ``` 2. 创建 Mapper 接口 创建两个 Mapper 接口,一个是订单 Mapper 接口,一个是订单明细 Mapper 接口。在订单 Mapper 接口中,添加一个方法,用来查询订单及其对应的订单明细列表。 ```java public interface OrderMapper { Order selectOrderById(Integer id); } public interface OrderItemMapper { List<OrderItem> selectOrderItemListByOrderId(Integer orderId); } ``` 3. 创建 SQL 映射文件 在订单 Mapper 接口的 XML 配置文件中,编写查询订单及其对应的订单明细列表的 SQL 语句。 ```xml <mapper namespace="com.example.mapper.OrderMapper"> <resultMap id="orderResultMap" type="com.example.entity.Order"> <id column="id" property="id"/> <result column="order_no" property="orderNo"/> <!-- 定义关联关系 --> <collection property="orderItemList" ofType="com.example.entity.OrderItem" resultMap="orderItemResultMap"/> </resultMap> <resultMap id="orderItemResultMap" type="com.example.entity.OrderItem"> <id column="id" property="id"/> <result column="order_id" property="orderId"/> <result column="product_name" property="productName"/> </resultMap> <select id="selectOrderById" resultMap="orderResultMap"> SELECT o.id, o.order_no, oi.id AS oi_id, oi.order_id, oi.product_name FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id WHERE o.id = #{id} </select> </mapper> ``` 在订单明细 Mapper 接口的 XML 配置文件中,编写查询订单明细列表的 SQL 语句。 ```xml <mapper namespace="com.example.mapper.OrderItemMapper"> <select id="selectOrderItemListByOrderId" resultType="com.example.entity.OrderItem"> SELECT id, order_id, product_name FROM order_items WHERE order_id = #{orderId} </select> </mapper> ``` 4. 测试查询 在测试类中,通过订单 Mapper 接口查询订单及其对应的订单明细列表。 ```java public class Test { public static void main(String[] args) { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class); Order order = orderMapper.selectOrderById(1); System.out.println(order.getOrderNo()); for (OrderItem orderItem : order.getOrderItemList()) { System.out.println(orderItem.getProductName()); } sqlSession.close(); } } ``` 以上就是 MyBatis 一对多关系的 XML 配置实现过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值