您的位置:首页 > 其它

mybatis级联映射

2017-08-05 10:46 239 查看
首先做一下准备工作



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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis