作者:流年时光云 | 来源:互联网 | 2023-09-12 02:35
一对多,如果多个表字段名相同,要记住使用别名,否则多条数据只显示一条
下列sql
select
u.*,p.id as pid,p.user_id,p.name,p.icon,p.vsersion,p.tags,p.description,p.create_time
as bcreate_time,p.update_time as bupdate_time,p.del_flag from t_user u
LEFT
JOIN t_plugin p ON u.id=p.user_id and u.del_flag=0 and
p.del_flag=0 WHERE
u.user_name LIKE CONCAT('%',#{name},'%') OR
u.nick_name LIKE
CONCAT('%',#{name},'%')
补充知识: MyBatis使用resultMap解决列名和属性名不一致的问题
resultType可以指定将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功。
如果sql查询字段名和pojo的属性名不一致,可以通过resultMap将字段名和属性名作一个对应关系 ,resultMap实质上还需要将查询结果映射到pojo对象中。
需求:查询订单表orders的所有数据
SELECT id,user_id,number,createtime,note FROM orders,这里的数据库表user_id与pojo的Order对象中的userId不一致
orders表:
Order对象:
OrderMapper.xml配置:
其中注释掉了另一种使用数据库别名解决列名和属性名不一致的问题
SELECT id,user_id ,number,createtime,note FROM orders
单元测试:
public class OrderMapperTest {
SqlSessionFactory factory = null;
private OrderMapper orderMapper = null;
@Before
public void testInit() {
// 1. 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件
// /20181013_mybatis/config/SqlMapConfig.xml
InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");
// 3. 创建SqlSessionFactory对象
factory = builder.build(in);
}
@Test
public void testqueryAll() {
SqlSession session = factory.openSession();
OrderMapper orderMapper = session.getMapper(OrderMapper.class);
List orders = orderMapper.queryAll();
System.out.println(orders);
}
}