mybatis级联映射

首先做一下准备工作
这里写图片描述
IUserInfoService.java

package com.lq.userInfo;

import com.lq.vo.UserInfo;

public interface IUserInfoService {

    UserInfo selectById(String id);
}

IUserInfoDao.java

package com.lq.userInfo;

import com.lq.vo.UserInfo;

public interface IUserInfoDao {

    UserInfo selectById(String id);
}

UserInfoService.java

package com.lq.userInfo.imp;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.lq.userInfo.IUserInfoDao;
import com.lq.userInfo.IUserInfoService;
import com.lq.vo.UserInfo;

@Service
public class UserInfoService implements IUserInfoService{

    @Autowired
    private IUserInfoDao userInfoDao;

    @Override
    public UserInfo selectById(String id) {
        return userInfoDao.selectById(id);
    }
}

Address.java

package com.lq.vo;

public class Address {

    private String id;
    private String userId;
    private String realName;
    private String mobile;
    private String address;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getRealName() {
        return realName;
    }
    public void setRealName(String realName) {
        this.realName = realName;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "Address [id=" + id + ", userId=" + userId + ", realName=" + realName + ", mobile=" + mobile
                + ", address=" + address + "]";
    }
}

UserInfo.java

package com.lq.vo;

public class UserInfo {

    private String id;
    private int state;
    private String userName;
    private String password;
    private Address address;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Address getAddress() {
        return address;
    }
    public void setAddress(Address address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "UserInfo [id=" + id + ", state=" + state + ", userName=" + userName + ", password=" + password
                + ", address=" + address + "]";
    }
}

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

    <context:component-scan base-package="com.lq.*.imp"></context:component-scan>

    <context:property-placeholder location="classpath:jdbc.properties"/>

    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.userName}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" value="#{dataSource}"></property>
        <property name="configLocation" value="classpath:config.xml"></property>
        <property name="mapperLocations" value="classpath:mybatis/sql/*.xml"></property>
    </bean>

    <!-- 扫描指定包及其子包下的所有mapper接口,
        使其能够自动为service层被诸如@Autowired注解的mapper接口成员变量赋值;
        base-package:指定mapper接口的包名 -->
    <mybatis-spring:scan base-package="com.lq"/>
</beans>

config.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>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

jdbc.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
jdbc.userName=scott
jdbc.password=root

一对一

一个用户对应一条地址

<?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="com.lq.userInfo.IUserInfoDao" >
    <resultMap type="com.lq.vo.UserInfo" id="userInfo">
        <id property="id" column="id"/>
        <result property="state" column="state"/>
        <result property="userName" column="userName"/>
        <result property="password" column="password"/>

        <result property="address.id" column="address_id"/>
        <result property="address.userId" column="user_id"/>
        <result property="address.realName" column="real_name"/>
        <result property="address.mobile" column="mobile"/>
        <result property="address.address" column="address"/>
    </resultMap>
    <select id="selectById" resultType="com.lq.vo.UserInfo">
        select * from users u
        left join addresses addr on addr.user_id=u.id 
        where id=#{id}
    </select>
</mapper>

这样写的话,必须注明address.id(对应的属性)等等,否则会报异常
或者可以采用下面这种写法

<?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="com.lq.userInfo.IUserInfoDao" >
    <resultMap type="com.lq.vo.UserInfo" id="userInfo">
        <id property="id" column="id"/>
        <result property="state" column="state"/>
        <result property="userName" column="userName"/>
        <result property="password" column="password"/>
        <association property="address" javaType="com.lq.vo.Address">
            <result property="id" column="address_id"/>
            <result property="userId" column="user_id"/>
            <result property="realName" column="real_name"/>
            <result property="mobile" column="mobile"/>
            <result property="address" column="address"/>
        </association>
    </resultMap>
    <select id="selectById" resultType="com.lq.vo.UserInfo">
        select * from users u
        left join addresses addr on addr.user_id=u.id 
        where id=#{id}
    </select>
</mapper>

一对多

此时UserInfo 中Address须存放在集合中

private List<Address> address;
<?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="com.lq.userInfo.IUserInfoDao" >
    <resultMap type="com.lq.vo.UserInfo" id="userInfo">
        <id property="id" column="id"/>
        <result property="state" column="state"/>
        <result property="userName" column="userName"/>
        <result property="password" column="password"/>
        <collection property="address" ofType="com.lq.vo.Address">
            <result property="id" column="address_id"/>
            <result property="userId" column="user_id"/>
            <result property="realName" column="real_name"/>
            <result property="mobile" column="mobile"/>
            <result property="address" column="address"/>
        </collection>
    </resultMap>
    <select id="selectById" resultMap="userInfo">
        select * from users u
        left join addresses addr on addr.user_id=u.id 
        where id=#{id}
    </select>
</mapper>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值