<?xml version="1.0" encoding="UTF-8" ?>java
<!DOCTYPE configurationspring
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"sql
"http://mybatis.org/dtd/mybatis-3-config.dtd">數據庫
<configuration>mybatis
<!-- 加載屬性文件 -->app
<properties resource="db.properties">ui
<!--properties中還能夠配置一些屬性名和屬性值 -->url
<!-- <property name="jdbc.driver" value=""/> -->spa
</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);
}
}