mybaties中数据库返回一个集合,应给怎么写xml文件
展开全部
查询语句是 MyBatis 中最常用的元素之一,本文涉及mybatis的单表查询操作,关联表有关的查询会后续补充。
巧妇难为无米之炊,要想从数据库中表中取出数据并转化为javaBean,所以,我们要先准备javabean以及与其对应的数据表。
javaBean:
public class President {
private int id;
private String name;
@Override
public String toString() {
return "President [id=" + id + ", name=" + name + "]";
}
//get set 方法.....
}
创建两个对应的数据库表,并插入两条数据:
create table president1(
p_id int not null auto_increment primary key,
p_name varchar(50) not null
);
insert into president1(p_name) values('lily'),('Tom');
create table president2(
id int not null auto_increment primary key,
name varchar(50) not null
);
insert into president2(name) values('lily'),('Tom');
创建两个数据库是为了测试两个不同的查询状况,
数据库字段名与实体类属性名相同
从sql表可以看出president2的字段名与javabean:President的属性名完全相同,这种情况下mybatis的select操作非常简单:
<!-- 从表 president2中查询-->
<select id="getPreByIdPresident2" parameterType="int" resultType="President">
select * from president2 where id=#{id}
</select>
此时mybatis运用反射机制会将查询返回的结果(id,name)封装成President对象。
如果从表president1中查询,同样采用上面的sql语句
<!-- 从表 president1中查询-->
<select id="getPreByIdPresident1" parameterType="int" resultType="President">
<span style="white-space:pre"> </span>President p1 = session.selectOne(statement+"getPreByIdPresident1", 1);
<span style="white-space:pre"> </span>System.out.println("表president1中查询"+p1);
</select>
此时如果用getPreByIdPresident1进行查询,返回的结果会是null,我们将上面的sql语句在mysql中执行下:
有结果返回,但是返回的字段名为(p_id,p_name)这种结果mybatis在解析时无法与President类对应。多数情况下实体类属性名与数据库表的字段名都会有差异,这种情况如果mybatis不能处理也就太low了。
巧妇难为无米之炊,要想从数据库中表中取出数据并转化为javaBean,所以,我们要先准备javabean以及与其对应的数据表。
javaBean:
public class President {
private int id;
private String name;
@Override
public String toString() {
return "President [id=" + id + ", name=" + name + "]";
}
//get set 方法.....
}
创建两个对应的数据库表,并插入两条数据:
create table president1(
p_id int not null auto_increment primary key,
p_name varchar(50) not null
);
insert into president1(p_name) values('lily'),('Tom');
create table president2(
id int not null auto_increment primary key,
name varchar(50) not null
);
insert into president2(name) values('lily'),('Tom');
创建两个数据库是为了测试两个不同的查询状况,
数据库字段名与实体类属性名相同
从sql表可以看出president2的字段名与javabean:President的属性名完全相同,这种情况下mybatis的select操作非常简单:
<!-- 从表 president2中查询-->
<select id="getPreByIdPresident2" parameterType="int" resultType="President">
select * from president2 where id=#{id}
</select>
此时mybatis运用反射机制会将查询返回的结果(id,name)封装成President对象。
如果从表president1中查询,同样采用上面的sql语句
<!-- 从表 president1中查询-->
<select id="getPreByIdPresident1" parameterType="int" resultType="President">
<span style="white-space:pre"> </span>President p1 = session.selectOne(statement+"getPreByIdPresident1", 1);
<span style="white-space:pre"> </span>System.out.println("表president1中查询"+p1);
</select>
此时如果用getPreByIdPresident1进行查询,返回的结果会是null,我们将上面的sql语句在mysql中执行下:
有结果返回,但是返回的字段名为(p_id,p_name)这种结果mybatis在解析时无法与President类对应。多数情况下实体类属性名与数据库表的字段名都会有差异,这种情况如果mybatis不能处理也就太low了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |