您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
03-mybatis的多表操作-一对一的配置实现
发布时间:2025-02-01 18:17:39编辑:雪饮阅读()
-
接续上篇,在OrderMapper.java中新增findAll抽象方法
package sp28.dao;
import sp28.domain.Order;
import sp28.domain.User;
import java.util.List;
public interface OrderMapper {
List<Order> findAll();
}
然后由于是关联查询,涉及两个表的,所以不能直接用一个类型来做返回结果集的字段与属性的映射,所以需要定义关联映射,以及一对一的关联查询,则OrderMapper.xml中findAll查询及结果集映射如:
<?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="sp28.dao.OrderMapper">
<resultMap id="orderMap" type="order">
<!--
手动指定字段与实体属性的映射关系
column:数据表的字段名称
property:实体的属性名称
-->
<id column="oid" property="id"/>
<result column="ordertime" property="ordertime"/>
<result column="total" property="total"/>
<result column="uid" property="user.id"/>
<result column="username" property="user.username"/>
<result column="password" property="user.password"/>
<result column="birthday" property="user.birthday"/>
</resultMap>
<select id="findAll" resultMap="orderMap">
select *,o.id oid from orders o,user u where o.uid=u.id
</select>
</mapper>
当然sqlMapConfig.xml中类型别名还需要多增加order,因为上面这里关联查询resultMap的type指定了order的别名。
<?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>
<properties resource="jdbc.properties"/>
<typeAliases>
<typeAlias type="sp28.domain.User" alias="user"/>
<typeAlias type="sp28.domain.Order" alias="order"/>
</typeAliases>
<typeHandlers>
<typeHandler handler="sp28.handler.DateTypeHandler"/>
</typeHandlers>
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
<environments default="developement">
<environment id="developement">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="sp28/mapper/UserMapper.xml"></mapper>
<mapper resource="sp28/mapper/OrderMapper.xml"></mapper>
</mappers>
</configuration>
然后在新module中src/test/java/sp28下面建立测试类测试方法如:
package sp28;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import sp28.dao.OrderMapper;
import sp28.domain.Order;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class MapperTest {
@Test
public void test1() throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
OrderMapper mapper=sqlSession.getMapper(OrderMapper.class);
List<Order> orderList=mapper.findAll();
for (Order order : orderList) {
System.out.println(order);
}
sqlSession.commit();
sqlSession.close();
}
}
然后在orders表中关联之前的user表自己有意的造几条符合上面关联查询的数据,然后运行测试方法即可。
关键字词:mybatis,一对一
相关文章
- 02-mybatis的多表操作-订单环境代码实现
- 06-mybatis核心配置文件深入-plugins分页助手的分页相
- 05-mybatis核心配置文件深入-plugins分页助手的代码实
- 04-mybatis核心配置文件深入-plugins标签介绍和查询全
- 03-mybatis核心配置文件深入-自定义DateTypeHandler实
- 02-mybatis核心配置文件深入-typeHandler测试环境搭建
- 04-mybatis映射文件深入-动态sql-sql片段的抽取
- 03-mybatis映射文件深入-动态sql-foreach
- 02-mybatis映射文件深入-动态sql-if
- 01-mybatis映射文件深入-动态sql概述和环境搭建(配置