注解方式实现单表查询还是很方便的,如果是连表查询不建议用注解,推荐用xml。下面我们使用xml实现查询用户的同时,把用户订单查询出来
1:改造pojo
2:编写mapper接口
public User getUserAndOrdersByUserId(int id);
|
3:编写mapper配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace是命名空间,作用sql语句的隔离,后面还有重要作用 #{}作用就是占位符,相当于jdbc的“?” parameterType:查询的参数类型 resultType:查询结果的数据类型,如果时候pojo应该给全路径。 -->
<mapper namespace="com.wendao.demo.mapper.UserMapper">
<resultMap type="user" id="getUserAndOrdersByUserIdMap">
<id column="userid" property="id" />
<result column="username" property="username" />
<collection property="orders" ofType="orders">
<id column="oid" property="id" />
<result column="number" property="number"/>
</collection>
</resultMap>
<select id="getUserAndOrdersByUserId" resultMap="getUserAndOrdersByUserIdMap">
select `user`.id
userid,`user`.username,orders.id oid,orders.number from `user`
LEFT JOIN orders on `user`.id=orders.user_id
where `user`.id=#{id}
</select>
</mapper>
|
4:在application.properties中配置别名
#配置别名mybatis.type-aliases-package=com.wendao.demo.pojo |
5:测试
@RunWith(SpringRunner.class)
@SpringBootTestpublic class Springboot03MybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void contextLoads5() {
System.out.println(userMapper.getUserAndOrdersByUserId(28).getOrders().size());
}
} |