本次学习内容为mybatis章节 课时139 关联关系3.—Mybatis之实现一对多关联关系
mybatis来实现一对多关系查询,总共用到了5个文件,分别是(1)One2ManyDaoImpl.java——固定的java文件
(2)One2ManyDaoImpl.xml——局部配置文件(要特别注意这里的rusultMap的类型Com是重新定义的,定义时用到的标签有resultMap、result、collection。由于在Costomer.java的实体类中嵌入的是:(private List orderList;)所以这里用到的是collection标签,collection标签是集合的意思;而在前面一对一关系中的是(private Wife wife;)用到的标签是association标签。
(3)mybatis.xml——主配置文件。注意不要在主配置文件的mapper标签中忘记了添加入(One2ManyDaoImpl.xml)这个局部配置文件哟!
(4)Customer.java——用户的实体类
(5)Order.java——订单的实体类
(1)One2ManyDaoImpl.java
package cn.java.dao.impl;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.annotations.Select;
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 cn.java.entity.Customer;
public class One2ManyDaoImpl {
private SqlSession session=null;
@Before
public void init() throws IOException{
InputStream ins=Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=ssfb.build(ins);
session=factory.openSession();
}
@Test
public void oneToMany(){
Customer cus=session.selectOne("cn.java.dao.impl.One2ManyDaoImpl.oneToMany",1L);
System.out.println(cus);
}
}
(2)One2ManyDaoImpl.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:命名空间,其值为某一个dao层类的具体路径
-->
<mapper namespace="cn.java.dao.impl.One2ManyDaoImpl">
<resultMap type="cn.java.entity.Customer" id="Com">
<result property="customerId" javaType="java.lang.Long" column="customerId"/>
<result property="customerName" javaType="java.lang.String" column="customerName"/>
<collection property="orderList" ofType="cn.java.entity.Order">
<result property="orderId" javaType="java.lang.Long" column="orderId"/>
<result property="orderName" javaType="java.lang.String" column="orderName"/>
<result property="price" javaType="java.lang.Float" column="price"/>
<result property="cusId" javaType="java.lang.Long" column="cusId"/>
</collection>
</resultMap>
<select id="oneToMany" parameterType="Long" resultMap="Com">
SELECT * FROM customer c INNER JOIN orders o ON c.customerId=o.cusId
WHERE c.customerId=#{0}
</select>
</mapper>
(3)mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 配置数据库连接环境:driver、url、username、password -->
<environments default="p6spy">
<!-- 开始配置mysql -->
<environment id="p6spy">
<!--配置事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.p6spy.engine.spy.P6SpyDriver"/>
<property name="url" value="jdbc:p6spy:mysql://localhost:3306/dt55"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 关联局部配置文件 -->
<mappers>
<!-- <mapper resource="cn/java/dao/impl/CaiPinDaoImpl.xml"/> -->
<!-- <mapper resource="cn/java/dao/impl/One2OneDaoImpl.xml"/> -->
<mapper resource="cn/java/dao/impl/One2ManyDaoImpl.xml"/>
</mappers>
</configuration>
(4)Customer.java
package cn.java.entity;
import java.util.List;
public class Customer {
private Long customerId;
private String customerName;
private List<Order> orderList;
public Long getCustomerId() {
return customerId;
}
public void setCustomerId(Long customerId) {
this.customerId = customerId;
}
public String getCustomerName() {
return customerName;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
@Override
public String toString() {
return "Customer [customerId=" + customerId + ", customerName=" + customerName + ", orderList=" + orderList
+ "]";
}
}
(5)Order.java
package cn.java.entity;
import org.apache.ibatis.type.FloatTypeHandler;
public class Order {
private Long orderId;
private String orderName;
private Float price;
private Long cusId;
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Float getPrice() {
return price;
}
public void setPrice(Float price) {
this.price = price;
}
public Long getCusId() {
return cusId;
}
public void setCusId(Long cusId) {
this.cusId = cusId;
}
@Override
public String toString() {
return "Order [orderId=" + orderId + ", orderName=" + orderName + ", price=" + price + ", cusId=" + cusId + "]";
}
}