mybatis0202 一对一查询 resultType实现
一对一查询
查询订单信息和用户信息
创建po类
基础的单表的 po(数据库类)类:Items.java, Orderdetail.java, Orders.java, User.java
一对一查询映射的pojo(工具类,用于sql语句接收返回的对象)
创建pojo包括 订单信息和用户信息,resultType才可以完成映射。
创建OrderCustom作为自定义pojo,继承sql查询列多的po类。
接口:OrdersMapperCustom.java
package cn.itcast.mybatis.mapper; import java.util.List; import cn.itcast.mybatis.po.OrderCustom; import cn.itcast.mybatis.po.Orders; import cn.itcast.mybatis.po.User; /** * Description:订单自定义mapper接口 */ public interface OrdersMapperCustom { // 一对一查询,查询订单关联查询用户,使用resultType public List<OrderCustom> findOrderUserList() throws Exception; // 一对一查询,使用resultMap public List<Orders> findOrderUserListResultMap() throws Exception; //一对一查询,延迟加载 public List<Orders> findOrderUserListLazyLoading() throws Exception; // 一对多查询,使用resultMap public List<Orders> findOrderAndOrderDetails() throws Exception; // 一对多查询,使用resultMap public List<User> findUserOrderDetail() throws Exception; }
实现类:OrdersMapperCustom.xml
<?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="cn.itcast.mybatis.mapper.OrdersMapperCustom"> <!-- 一对一查询使用reusltType完成查询订单关联查询用户信息--> <select id="findOrderUserList" resultType="orderCustom"> SELECT orders.*, user.username, user.sex FROM orders, USER WHERE orders.user_id = user.id </select> </mapper>
pojo类:OrderCustom.java
package cn.itcast.mybatis.po; /** * <p>Description:订单扩展对象,用于完成订单和用户查询结果 映射 extends Orders</p> */ public class OrderCustom extends Orders { //补充用户信息 private String username; private String sex; private String address;
po类:Orders.java
package cn.itcast.mybatis.po; import java.io.Serializable; import java.util.Date; import java.util.List; public class Orders implements Serializable { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //关联用户信息 private User user; //订单明细 private List<Orderdetail> orderdetails; public Integer getId() { return id; }
SqlMapConfig.xml
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 属性定义 加载一个properties文件 在 properties标签 中配置属性值 --> <properties resource="db.properties"> <!-- <property name="" value=""/> --> </properties> <!-- 定义 别名 --> <typeAliases> <!-- 单个别名的定义 alias:别名,type:别名映射的类型 --> <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> --> <!-- 批量别名定义 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写) --> <package name="cn.itcast.mybatis.po" /> </typeAliases> <!-- 和spring整合后 environments配置将废除 --> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池 --> <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> <!--加载mapper映射 如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。 --> <mappers> <!-- 通过resource引用mapper的映射文件 --> <mapper resource="sqlmap/User.xml" /> <!-- <mapper resource="mapper/UserMapper.xml" /> --> <!-- 通过class引用mapper接口 class:配置mapper接口全限定名 要求:需要mapper.xml和mapper.java同名并且在一个目录 中 --> <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量mapper配置 通过package进行自动扫描包下边的mapper接口, 要求:需要mapper.xml和mapper.java同名并且在一个目录 中 --> <package name="cn.itcast.mybatis.mapper" /> </mappers> </configuration>
测试:
package cn.itcast.mybatis.mapper; import java.io.IOException; import java.io.InputStream; import java.util.List; 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.Before; import org.junit.Test; import cn.itcast.mybatis.po.OrderCustom; import cn.itcast.mybatis.po.Orders; import cn.itcast.mybatis.po.User; public class OrdersMapperCustomTest { // 会话工厂 private SqlSessionFactory sqlSessionFactory; // 创建工厂 @Before public void init() throws IOException { // 配置文件(SqlMapConfig.xml) String resource = "SqlMapConfig.xml"; // 加载配置文件到输入 流 InputStream inputStream = Resources.getResourceAsStream(resource); // 创建会话工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testFindOrderUserList() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建mapper代理对象 OrdersMapperCustom ordersMapperCustom = sqlSession .getMapper(OrdersMapperCustom.class); // 调用方法 List<OrderCustom> list = ordersMapperCustom.findOrderUserList(); System.out.println(list); } }