关闭
gzb001 2011-10-18 05:18
浏览 339
已采纳

关于mybatis延迟加载的问题

我做了一个mybatis的demo里面有两个类:user address,user中存放着一个address,而在数据库中user表中有一个addressid的字段,用于关联address表。

public class User {
private int id;
private String name;
private String password;
private int age;
private Address address;
//get set方法
}
public class Address {
private int addid;
private String addname;
private int zipcode;
//get set方法
}

mybatis配置文件

  1. <!-- 延迟加载设置 -->
  2. <settings>
  3. <setting name="lazyLoadingEnabled" value="true"/>
  4. </settings>
  5. <!-- 别名 -->
  6. <typeAliases>
  7. <typeAlias type="com.qshun.model.User" alias="user"/>
  8. <typeAlias type="com.qshun.model.Address" alias="address"/>
  9. </typeAliases>
  10. <!-- 环境参数(数据库连接) -->
  11. <environments default="development">
  12. <environment id="development">
  13. <transactionManager type="JDBC" />
  14. <dataSource type="POOLED">
  15. <property name="driver" value="com.mysql.jdbc.Driver" />
  16. <property name="url" value="jdbc:mysql://localhost/ibatis" />
  17. <property name="username" value="root" />
  18. <property name="password" value="root" />
  19. </dataSource>
  20. </environment>
  21. </environments>
  22. <!-- 映射文件 -->
  23. <mappers>
  24. <mapper resource="com/qshun/model/AddressMapper.xml"/>
  25. <mapper resource="com/qshun/model/UserMapper.xml"/>
  26. </mappers>

usermapper的实体映射文件

  1. <resultMap type="user" id="UserResultMap">
  2. <result property="id" column="uid" />
  3. <result property="name" column="uname" />
  4. <result property="password" column="upassword" />
  5. <result property="age" column="uage" />
  6. <association property="address" column="addressid" select="getAddressById" resultMap="AddressResultMap">
  7. </association>
  8. </resultMap>
  9. <resultMap id="AddressResultMap" type="address">
  10. <result property="addid" column="id"/>
  11. <result property="addname" column="addressname"/>
  12. <result property="zipcode" column="zipcode"/>
  13. </resultMap>
  14. <select id="getUserById" resultMap="UserResultMap" parameterType="int">
  15. select uid,uname,upassword,uage,addressid
  16. from user
  17. where uid=#{id}
  18. </select>
  19. <select id="getAddressById" resultMap="AddressResultMap">
  20. select addid, addname, zipcode
  21. from addr
  22. where addid =#{addressid}
  23. </select>

测试类

private static SqlSession session = null;
private static SqlSessionFactory sqlSessionFactory = null;
static {
try {
Reader reader = Resources.getResourceAsReader("MybatisConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
session = sqlSessionFactory.openSession(true);
reader.close();
} catch (IOException e) {
throw new RuntimeException("=========" + e, e);
}
}

  1. public static void main(String[] args) {
  2. UserMapper mapper=session.getMapper(UserMapper.class);
  3. User u=mapper.getUserById(1);//理论上讲在执行此操作的时候,不会将address对象查询出来
  4. System.out.println(u.getName());
  5. System.out.println("================");
  6. System.out.println(u.getAddress().getAddname());//此时address才会被执行查询
  7. //但是事实上在执行mapper.getUserById(1)的时候,就执行了address对象的查询,延迟加载没有起效
  8. session.close();
  9. }

另附建表语句
CREATE TABLE ibatis.add (
addid INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
addname VARCHAR(45),
zipcode VARCHAR(45),
PRIMARY KEY (addid)
)
ENGINE = InnoDB;

CREATE TABLE ibatis.user (
uid INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
uname VARCHAR(45),
upassword VARCHAR(45),
uage VARCHAR(45),
addressid VARCHAR(45),
PRIMARY KEY (uid)
)
ENGINE = InnoDB;

请各位牛人,帮忙解答一下,不胜感激 :D

展开全部

  • 写回答

3条回答 默认 最新

  • liu300liu 2011-10-18 14:17
    关注

    你的代码存在问题。
    1、
    setting文件这样配置



    只有这两个属性都配置了才能生效!

    2、下面的映射也有问题,我就不更正了,给你个例子参考




    <select id="getStudentById" parameterType="int" resultMap="studentResultMap2">
        SELECT id,name,classid
          FROM student s 
         WHERE s.id=#{id} 
    </select>
    
    <select id="getClassesById" parameterType="int" resultType="classes">
        SELECT id,name
          FROM classes c 
         WHERE c.id=#{id} 
    </select>
    

    3、我有空会把这个demo代码放到我的博客中,要是还是搞不定你再看看。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部