gzb001 2011-10-18 13:18
浏览 338
已采纳

关于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配置文件

<!-- 延迟加载设置 -->
<settings>
    <setting name="lazyLoadingEnabled" value="true"/>
</settings>

<!-- 别名 -->
<typeAliases>
    <typeAlias type="com.qshun.model.User" alias="user"/>
    <typeAlias type="com.qshun.model.Address" alias="address"/>
</typeAliases>

<!-- 环境参数(数据库连接) -->
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost/ibatis" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </dataSource>
    </environment>
</environments>  

<!-- 映射文件 -->
<mappers>  
    <mapper resource="com/qshun/model/AddressMapper.xml"/>
    <mapper resource="com/qshun/model/UserMapper.xml"/>
</mappers>

usermapper的实体映射文件

<resultMap type="user" id="UserResultMap">
    <result property="id" column="uid" />
    <result property="name" column="uname" />
    <result property="password" column="upassword" />
    <result property="age" column="uage" />
    <association property="address" column="addressid" select="getAddressById" resultMap="AddressResultMap">
    </association>
</resultMap>

<resultMap id="AddressResultMap" type="address">  
    <result property="addid" column="id"/>
    <result property="addname" column="addressname"/>
    <result property="zipcode" column="zipcode"/>
</resultMap>  

<select id="getUserById" resultMap="UserResultMap" parameterType="int">
    select uid,uname,upassword,uage,addressid 
    from user 
    where uid=#{id}
</select>

<select id="getAddressById" resultMap="AddressResultMap">
    select addid, addname, zipcode 
    from addr 
    where addid =#{addressid}
</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);
}
}

public static void main(String[] args) {

    UserMapper mapper=session.getMapper(UserMapper.class);
    User u=mapper.getUserById(1);//理论上讲在执行此操作的时候,不会将address对象查询出来
    System.out.println(u.getName());
    System.out.println("================");
    System.out.println(u.getAddress().getAddname());//此时address才会被执行查询
    //但是事实上在执行mapper.getUserById(1)的时候,就执行了address对象的查询,延迟加载没有起效
    session.close();
}

另附建表语句
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 22: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条)

报告相同问题?

悬赏问题

  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员
  • ¥15 matlab生成电测深三层曲线模型代码
  • ¥50 随机森林与房贷信用风险模型