MyBatis框架学习Ⅺ
文章目录
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>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"></setting>
</settings>
<environments default="development">
<environment id="development">
<!-- 配置JDBC事务控制,由mybatis进行管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用mybatis连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<package name="dao.mapper"></package>
</mappers>
</configuration>
log4j.properties
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
db.properties
db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://localhost:3306/ee19_batis_day03?useUnicode=true&characterEncoding=utf-8
db.username = root
db.password = 123
Mapper配置
主要讲一对一结构另一种写法
另一种写法参照MyBatis框架学习Ⅷ
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="entity.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
CacheMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.mapper.CacheMapper">
<resultMap id="OrderAndLazyLoading" type="entity.OrdersExt">
<id column="id" property="id"></id>
<result column="user_id" property="userId"></result>
<result column="number" property="number"></result>
<association property="user" select="dao.mapper.UserMapper.findUserById" column="user_id"></association>
</resultMap>
<select id="findOrderAndLazyLoading" resultMap="OrderAndLazyLoading">
select * from orders
</select>
</mapper>
CacheMapper
package dao.mapper;
import entity.OrdersExt;
import java.util.List;
public interface CacheMapper {
List<OrdersExt> findOrderAndLazyLoading() throws Exception;
}
测试代码
package execute;
import dao.mapper.CacheMapper;
import dao.mapper.OrdersMapper;
import entity.OrderMapExt;
import entity.OrdersExt;
import entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import sun.misc.Cache;
import java.io.InputStream;
import java.util.List;
public class MyBatis2 {
@Test
public void testFindOrderAndUser() throws Exception {
//读取配置文件
//全局配置文件的路径
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
CacheMapper mapper = sqlSession.getMapper(CacheMapper.class);
List<OrdersExt> orderAndLazyLoading = mapper.findOrderAndLazyLoading();
sqlSession.close();
}
}