第六简单6-mybatis高级映射一对一

 

高级结果映射(一对一、一对多、多对多)

 

1       高级结果映射

1.1      数据模型分析

1、  明确每张表存储的信息

2、  明确每张表中关键字段(主键、外键、非空)

3、  明确数据库中表与表之间的外键关系

4、  明确业务中表与表的关系(建立在具体的业务)


1.2      一对一映射

查询订单信息,关联查询用户信息

 

  1.1使用resultType来进行一对一结果映射,查询出的列的个数和映射的属性的个数要一致。而且映射的属性要存在与一个大的对象中,它是一种平铺式的映射,即数据库查询出多少条记录,则映射成多少个对象。

  1.2

使用resultMap来进行一对一结果映射,它是将关联对象添加到主信息的对象中,具体说是对象嵌套对象的一种映射方式。

 

 

1.2.1   Sql

主信息:orders

从信息:user

 

SELECT

 orders.`id`,

 orders.`user_id`,

 orders.`number`,

 user.`username`,

 user.`sex`

FROM

 orders,

 USER

WHERE orders.`user_id` = user.`id`

 

步骤:

Jar包导入,生成数据库表,创建与src同级资源目录 config,test目录(注意,config,test均为资源目录)


1.创建实体类:

    User.java ---一对一用户类

Orders_OneToOne.java– 专用 一对一 订单类

OrdersExt1_resultMap_OneToOne–User和Orders_OneToOne的扩展类,用于接受resultMap

OrdersExt1_resultType_OneToOne  –User和Orders_OneToOne的扩展类,用于授受resulttyep

 

2.建实体类对应的映射文件OrdersMapper.xml(局部xml文件)

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEmapper   

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mappernamespace="com.xiangshuai.mybatis.mapper.OrdersMapper">

 

    <!--  userorder一对一映射resultType -->

    <selectid="findOrdersAndUser"resultType="com.xiangshuai.mybatis.pojo.OrdersExt1_resultMap_OneToOne">

        SELECT

        orders.`id`,

        orders.`user_id`,

        orders.`number`,

        user.`username`,

        user.`sex`

        FROM

        orders,

        USER

        WHEREorders.`user_id` = user.`id`

    </select>

   

    <!-- OrdersAndUserRstMap userorder 一对一映射之resultMap -->

    <resultMaptype="com.xiangshuai.mybatis.pojo.OrdersExt1_resultMap_OneToOne"id="OrdersAndUserRstMap">

        <!-- 订单信息 -->

        <idcolumn="id"property="id"/>

        <resultcolumn="user_id"property="userId"/>

        <resultcolumn="number"property="number"/>

 

        <!-- 用户信息(一对一) -->

        <!-- association:一对一关联映射 -->

        <!-- property:关联信息查询的结果将要映射的扩展类中的对象属性名称 -->

        <!-- id标签:建议在关联查询时必须写上,不写不会报错,但是会影响性能 -->

        <associationproperty="user"javaType="com.xiangshuai.mybatis.pojo.User">

            <idcolumn="user_id"property="id"/>

            <resultcolumn="username"property="username"/>

            <resultcolumn="sex"property="sex"/>

        </association>

    </resultMap>

    <!-- userorder 一对一映射之resultMap -->

    <selectid="findOrdersAndUserRstMap"resultMap="OrdersAndUserRstMap">

        SELECT

        orders.`id`,

        orders.`user_id`,

        orders.`number`,

        user.`username`,

        user.`sex`

        FROM

        orders,

        USER

        WHEREorders.`user_id` = user.`id`

    </select>

</mapper>

 

 

3.将DBUserMapper.xml(局部xml文件)mapper到 SqlMapConfig.xml(全局配置文件)中

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

 

    <!-- 加载java的配置文件或者声明属性信息 -->

    <propertiesresource="db.properties">

    </properties>

 

    <!-- <settings></settings> -->

 

    <!-- 自定义别名 -->

    <!-- <typeAliases>

        单个别名定义

        <typeAliastype="com.itheima.mybatis.po.User" alias="user"/>

 

        批量别名定义(推荐)

        package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(首字母大小写都可)

        <packagename="com.itheima.mybatis.po" />

    </typeAliases>

 -->

    <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->

    <environmentsdefault="development">

        <environmentid="development">

            <!-- 配置JDBC事务控制,由mybatis进行管理 -->

            <transactionManagertype="JDBC"></transactionManager>

            <!-- 配置数据源,采用mybatis连接池 -->

            <dataSourcetype="POOLED">

                <propertyname="driver"value="${db.driver}"/>

                <propertyname="url"value="${db.url}"/>

                <propertyname="username"value="${db.username}"/>

                <propertyname="password"value="${db.password}"/>

            </dataSource>

        </environment>

    </environments>

 

    <!-- 加载映射文件 -->

    <mappers>

        <mapperresource="com/xiangshuai/mybatis/mapper/OrdersMapper.xml"/>

 

        <!-- 批量加载映射文件 -->

        <!-- <package name="com.itheima.mybatis.mapper"/> -->

    </mappers>

</configuration>

 

4.严格参照OrdersMapper.xml 按照mapper规范创建mapper接口SqlMapConfig.xml

<?xmlversion="1.0"encoding="UTF-8"?>

<!DOCTYPEconfiguration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

 

    <!-- 加载java的配置文件或者声明属性信息 -->

    <propertiesresource="db.properties">

    </properties>

 

    <!-- <settings></settings> -->

 

    <!-- 自定义别名 -->

    <!-- <typeAliases>

        单个别名定义

        <typeAliastype="com.itheima.mybatis.po.User" alias="user"/>

 

        批量别名定义(推荐)

        package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(首字母大小写都可)

        <packagename="com.itheima.mybatis.po" />

    </typeAliases>

 -->

    <!-- 配置mybatis的环境信息,与spring整合,该信息由spring来管理 -->

    <environmentsdefault="development">

        <environmentid="development">

            <!-- 配置JDBC事务控制,由mybatis进行管理 -->

            <transactionManagertype="JDBC"></transactionManager>

            <!-- 配置数据源,采用mybatis连接池 -->

            <dataSourcetype="POOLED">

                <propertyname="driver"value="${db.driver}"/>

                <propertyname="url"value="${db.url}"/>

                <propertyname="username"value="${db.username}"/>

                <propertyname="password"value="${db.password}"/>

            </dataSource>

        </environment>

    </environments>

 

    <!-- 加载映射文件 -->

    <mappers>

        <mapperresource="com/xiangshuai/mybatis/mapper/OrdersMapper.xml"/>

 

        <!-- 批量加载映射文件 -->

        <!-- <packagename="com.itheima.mybatis.mapper" /> -->

    </mappers>

</configuration>

 

5.测试类Demo1.java  

package com.xiangshuai.test;

 

import java.io.IOException;

import java.io.InputStream;

import java.util.List;

 

import org.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.Before;

import org.junit.Test;

 

import com.xiangshuai.mybatis.mapper.OrdersMapper;

importcom.xiangshuai.mybatis.pojo.OrdersExt1_resultMap_OneToOne;

importcom.xiangshuai.mybatis.pojo.OrdersExt1_resultType_OneToOne;

 

 

public class Demo1 {

          /*mybatis开发方式mapper开发非mapper开始:查询,操作和hibernate很像,也是先造实体类,然后配实体类的XML映射文件,然后将实体类的XML映射文件mapper到全局映射 XML文件

           SqlMapConfig.xml中去,

           * */

         privateSqlSessionFactory sqlSessionFactory;

         @Before

         publicvoid before(){

                   //读取配置文件

                   //全局配置文件的路径

                   Stringresource = "SqlMapConfig.xml";

                   InputStreaminputStream = null;

                   try{

                            inputStream= Resources.getResourceAsStream(resource);

                   }catch (IOException e) {

                            //TODO Auto-generated catch block

                            e.printStackTrace();

                   }

                  

                   //创建SqlSessionFactory

                    sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);

         }

         //resultMap标签测试--user与order 一对一映射resultType

         @Test

   public void findOrdersAndUser(){

                   //创建mapper对象 -- UserMapper对象

                   //创建mapper对象 -- UserMapper对象

                   SqlSessionsqlsession = sqlSessionFactory.openSession();

                   OrdersMappermapper = sqlsession.getMapper(OrdersMapper.class);

                   //调用mapper完成 增删改查方法

                   List<OrdersExt1_resultType_OneToOne>fodersExt1 = mapper.findOrdersAndUser();//user与order 一对一映射resultType

                   System.out.println(fodersExt1);

    }

        

         //resultMap标签测试--user与order 一对一映射resultType

         @Test

         publicvoid findOrdersAndUserRstMap(){

                   //创建mapper对象 -- UserMapper对象

                   //创建mapper对象 -- UserMapper对象

                   SqlSessionsqlsession = sqlSessionFactory.openSession();

                   OrdersMappermapper = sqlsession.getMapper(OrdersMapper.class);

                   //调用mapper完成 增删改查方法

                   List<OrdersExt1_resultMap_OneToOne>fodersExt1 = mapper.findOrdersAndUserRstMap();//user与order 一对一映射resultType

                   System.out.println(fodersExt1);

         }

        

        

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值