一对一查询:
有两个表:
user
orders
查询要求查询创建订单的用户信息
查询语句:
SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id = user.id
order通过user_id和user连接在一起。而且在order的实体中,既有User属性也有user_id属性
第一种实现方式:
resultType:
1.新建一个类,继承orders,并且加入 查询结果里面有,但result的属性没有的属性。
2.对于select的编写。
<select id="findOrdersUser" resultType="com.iot.mybatis.po.OrdersCustom"> SELECT orders.*, user.username, user.sex, user.address FROM orders, user WHERE orders.user_id = user.id </select>
将查询的结果resultType设置为新建的类。
对于测试:将接口和mapper名字一样在一个包里面。
接口的方法,返回值和输入参数和mapper一致
测试类中,导入sqlsessionfactory。在@before方法进行sqlsessionfactory的创建
测试方法中,创建sqlsession
通过sqlsession来创建代理对象
// OrderMapper ordermapaper=sqlsession.getMapper(OrderMapper.class);
通过代理对象进行方法的调用
resultMap的调用
多余resultmap 就是将返回对象还是设置为原来的对象,对于不存在的属性进行map映射
首先将select中的resultType改为resultMap
重点是 map的编写
map中首先是orders中的属性的映射
第二部分就是映射对象的映射
通过associate的来配置。
associate中的属性:property用来说明配置的是orders即映射结果的那个属性
JavaType就是那个属性的pojo对象
<association property="user" javaType="com.iot.mybatis.po.User"> <!-- id:关联查询用户的唯 一标识 column:指定唯 一标识用户信息的列 property:映射到user的哪个属性
--> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> </association>