首先做一下准备工作 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>