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

    }

}

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章