zoukankan      html  css  js  c++  java
  • 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);

        }

    }

     



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

  • 相关阅读:
    Noe4j启动警告
    SpringBoot
    MySQL数据库 java SQL语句区分大小写分析
    day24 模块的语法
    day23 re模块
    day22 常用模块02 序列化
    day21 常用模块01
    day20 面向对象06 MRO和C3算法
    day19 面向对象05 约束
    day18 面向对象04 反射
  • 原文地址:https://www.cnblogs.com/blogs-chao/p/4764892.html
Copyright © 2011-2022 走看看