• mybatis——延迟加载


    ------------------------------------------------SqlMapConfig.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>

     

    <!-- 加载属性文件 -->

    <properties resource="db.properties">

    <!--properties中还可以配置一些属性名和属性值 -->

    <!-- <property name="jdbc.driver" value=""/> -->

    </properties>

    <!-- 全局配置参数,需要时再设置 -->

    <!-- 延迟加载的配置,懒加载 -->

    <settings> 

    <!--打开延迟加载的开关  -->

    <setting name="lazyLoadingEnabled" value="true"/>

    <!--将积极加载变为消极加载     按需加载  -->

    <setting name="aggressiveLazyLoading" value="false"/>

    </settings>

    <!-- 别名定义 -->

    <typeAliases>

    <!-- 针对单个别名定义 type:类型的路径 alias:别名 -->

    <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->

    <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) -->

    <package name="mode" />

    </typeAliases>

    <!-- 和spring整合后 environments配置将废除 -->

    <environments default="development">

    <environment id="development">

    <!-- 使用jdbc事务管理,事务控制由mybatis -->

    <transactionManager type="JDBC" />

    <!-- 数据库连接池,由mybatis管理 -->

    <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>

    <!-- 通过mapper接口加载映射文件:需要遵循一些规范:需要将mapper接口名称和mapper.xml映射文件保持一致,且在一个目录中 放在一个目录 ,且同名 前提是:使用的事mapper代理方式 -->

    <mappers>

    <package name="mapper" />

    </mappers>

    </configuration>


    ------------------------------------pojo.java-------------------------------------------------------------

    public class User {

        private Integer id;

     

        private String name;

     

        private Integer age;

     

        private Integer addressId;

        

        private Address address;}

    ------------------------------------------

    public class Address {

        private Integer id;

     

        private String sheng;

     

        private String shi;

     

        private String xian;

    -------------------------------------mapping-----------------------------------------------


    <mapper namespace="mapper.AddressMapper" >

      <select id="selectAddressById" parameterType="int" resultType="address">

        select * from address where id = #{value}

      </select>

    </mapper>


    -------------------------

    <mapper namespace="mapper.UserMapper" > 

      

      <!-- 延迟加载的resultMap -->

      <resultMap type="user" id="UserAddressLazyLoading">

      <!--对用户信息进行配置  -->

      <id column="id" property="id"/>

      <result column="name" property="name"/>

      <result column="age" property="age"/>

      <result column="address_id" property="addressId"/>

      

      <!--对地址信息进行延迟加载  -->

      <!-- select指的是所要加载的statement查询语句的id(关联查询的sql语句) -->

      <!--column指的是  user表中 关联 address表的列 . javaType指的是关联映射的类 -->

      <association column="address_id"  property="address" javaType="address" select="mapper.AddressMapper.selectAddressById"></association>

      </resultMap>  

      

      <!-- 查询 用户关联地址,  地址信息需要延迟加载 -->

      <select id="selectUserAddressLazyLoading" resultMap="UserAddressLazyLoading">

      select * from user

      </select>

      

    </mapper>


    --------------------------------------------------------------------------------------

    public class Demo1 {

     

        private SqlSessionFactory sqlSessionFactory;

     

        // 此方法是在执行testFindUserById之前执行

        @Before

        public void setUp() throws Exception {

            // 创建sqlSessionFactory

     

            // mybatis配置文件

            String resource = "SqlMapConfig.xml";

            // 得到配置文件流

            InputStream inputStream = Resources.getResourceAsStream(resource);

     

            // 创建会话工厂,传入mybatis的配置文件信息

            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        }

     

     

        @Test

        public void testselectByPrimaryKey() throws Exception {

     

            SqlSession sqlSession = sqlSessionFactory.openSession();

     

            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            List<User> users = userMapper.selectUserAddressLazyLoading();

            

            for(User user: users){

                System.out.println(user.getName());

            }

            System.out.println(".......................................");

            System.out.println(users);

        }

        

        //根据id查询Address

        @Test

        public void testselectAddressById() throws Exception {

     

            SqlSession sqlSession = sqlSessionFactory.openSession();

     

            AddressMapper addressMapper = sqlSession.getMapper(AddressMapper.class);

            Address address = addressMapper.selectAddressById(1);

            System.out.println(address);

        }

    }

     



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    让x86的android模拟器能模拟arm架构系统
    婴儿补充微量元素
    asterisk 能打电话的配置
    SIP协议错误代码大全
    asterisk错误排查
    asterisk帮助与国内论坛
    win10 只要打开文件对话框就卡死解决方法
    分享到朋友圈实现
    跳转前暂停几秒js如何实现
    Github css加载失败,样式混乱解决办法
  • 原文地址:https://www.cnblogs.com/blogs-chao/p/4764892.html
Copyright © 2020-2023  润新知