mybatis级联映射
2017-08-05 10:46
239 查看
首先做一下准备工作
IUserInfoService.java
IUserInfoDao.java
UserInfoService.java
Address.java
UserInfo.java
application.xml
config.xml
jdbc.properties
这样写的话,必须注明address.id(对应的属性)等等,否则会报异常
或者可以采用下面这种写法
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 ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)mybatis中:returned more than one row, where no more than one was expected
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis-映射器-级联性能分析
- Mybatis 结果映射 常用的情况
- MyBatis自定义数据映射TypeHandler
- mybatis源码学习之执行过程分析(4)——映射文件中sql的获取和sql语句的执行
- Mybatis实战(五)Mapper配置文件高级映射
- 简单三步快速学会使用Mybatis-Generator自动生成entity实体、dao接口以及mapper映射文件(postgre使用实例)
- Spring+SpringMVC+MyBatis深入学习及搭建(四)——MyBatis输入映射与输出映射
- mybatis数据库字段带下划线,映射支持java类属性驼峰命名
- Hibernate 一对一关联映射对象 级联增删改查示例
- 关于mybatis的collection映射问题
- mybatis中注册映射sql的Mapper的三种方式详解
- Hibernate 级联操作,映射文件中的默认的Lazy属性导致的异常
- MyBatis操作数据库——单表映射操作