黑马程序员技术交流社区

标题: mybatis一对一&多对一配置详解 [打印本页]

作者: 大山哥哥    时间: 2019-5-31 16:28
标题: mybatis一对一&多对一配置详解
一对一建表原则
        将任意一方当做主表(B是主表),A创建外键列指向B的一方的主键,A外键列唯一
        说白了多对一也是一对一的其中一种表现形式

java建立关系原则
        一方持有另外一方的引用
       
        举例子
                一个客户对应多个订单
                就客户而言,客户和订单是1对多的关系
                就订单而言,每个订单只能属于一个用户,所以订单和客户属于1对1的关系

代码实现(订单和客户的一对一关系)

步骤一:明确两个实体类关系,在订单的一方提供客户的引用
[Java] 纯文本查看 复制代码
        public class Customer {
                private Integer cid ;
                private String cname;
                //省略get/set/toString
        }
        /**
                一个订单属于一个客户,在订单方创建客户引用
                注意.客户引用的对象名字很重要
         */
        public class Orders {
                private Integer oid ;
                private String orderName;
                private String cid;
                private Customer c;
                //省略get/set/toString
        }       

步骤二:创建OrdersMapper接口和OrdersMapper.xml映射配置文件(具体解释看下图)
[Java] 纯文本查看 复制代码
        public interface OrdersMapper {
                List<Orders> findAllInfo();
        }
       
        <?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">
        <mapper namespace="com.b3a4a.maybatis.mapper.OrdersMapper">

                <resultMap id="order_customer" type="orders">
                        <id property="oid" column="oid"/>
                        <result property="orderName" column="oname" />
                        <result property="cid" column="customer_id" />
                        <association property="c" javaType="customer">
                                <id property="cid" column="cid"/>
                                <id property="cname" column="cname"/>
                        </association>
                </resultMap>
                <select id="findAllInfo" resultMap="order_customer">
                        SELECT customer.*,orders.oid,orders.oname,orders.cid AS customer_id
                                        FROM orders
                                        JOIN customer  ON customer.cid=orders.cid
                </select>
        </mapper>





步骤三:编写测试用例
[Java] 纯文本查看 复制代码
    @Test
    public void testFindAll() throws IOException {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSession session = new SqlSessionFactoryBuilder().build(is).openSession();
        OrdersMapper mapper = session.getMapper(OrdersMapper.class);
        List<Orders> orders = mapper.findAllInfo();
        for (Orders order : orders) {
            System.out.println(order);
            System.out.println(order.getCustomer());
        }
        session.close();
        is.close();
    }       

核心配置文件
[Java] 纯文本查看 复制代码
        <?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>
                <properties resource="jdbcConfig.properties"></properties>
                <typeAliases>
                        <package name="com.b3a4a.maybatis.domain" />
                </typeAliases>
                <environments default="mysql">
                        <environment id="mysql">
                                <transactionManager type="JDBC"></transactionManager>
                                <dataSource type="POOLED">
                                        <property name="driver" value="${jdbc.driver}"/>
                                        <property name="url" value="${jdbc.url}"/>
                                        <property name="username" value="${jdbc.username}"/>
                                        <property name="password" value="${jdbc.password}"/>
                                </dataSource>
                        </environment>
                </environments>
                <mappers>
                        <package name="com.b3a4a.maybatis.mapper"/>
                </mappers>
        </configuration>






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2