一、通过包装参数查询数据
我们之前查询数据的时候能够传入一个JavaBean的对象作为参数进行数据的处理,但是如果我们的数据非常复杂,传入一个类无法进行查询的时候,就需要将这些类进行包装,将这个包装类作为参数进行查询。下面进行案例的演示:
第一步:创建一个包装类,将User进行包装
package domain;
public class QueryVo {
//将user对象包装到QureyVo中
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
第二步:在接口中添加方法
//通过包装参数查询数据
List<User> getUserList(QueryVo qurey);
第三步:在测试类中进行测试
@Test
public void QueryVoUser() throws Exception {
UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
QueryVo qurey = new QueryVo();
User user = new User();
user.setAddress("上海");
qurey.setUser(user);
List<User> userList = mapper.getUserList(qurey);
for (User user2 : userList) {
System.out.println(user2.toString());
}
}
第四步:在配置文件中添加sql语句
<select id="getUserList" resultType="domain.User">
select * from user where address like '%${user.address}%'
</select>
二、输出简单类型的查询结果
sql语句中可以利用count、sum等函数计算相关的数据,那么在mybatis中如何实现呢?
第一步:在接口中添加方法
//查询user表中记录的数量
//也可以创建有参的方法,添加条件查询
int getUserCount();
第二步:在测试类中进行测试
@Test
public void countSelect() throws Exception {
UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
int count = mapper.getUserCount();
System.out.println("user表中有"+count+"条记录");
}
在配置文件中添加sql语句
<select id="getUserCount" resultType="int">
select count(*) from user
</select>
三、resultMap
现在我们需要用到之前创建的订单orders表,下面是表的结构和数据:
根据数据库创建Orders类,注意区别
package domain;
import java.util.Date;
public class Orders {
private Integer id;
//注意:我们现在设置的变量名和数据库中的不同
private Integer userId;
private String number;
private Date createtime;
private String note;
public Orders() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
@Override
public String toString() {
return "Orders [id=" + id + ", userId=" + userId + ", number=" + number + ", createtime=" + createtime
+ ", note=" + note + "]";
}
}
我们之前一直使用resultType来接收我们的返回结果,那么一定要保证,我们的返回结果的封装对象的属性字段与数据库当中的字段名称保持一致;如果我们想要封装对象的属性字段和数据库中的字段名称不同,那么就需要用到resultMap接收返回结果。
resultMap : mybatis的另外一种封装的返回值类型,我们可以自定义我们的数据库字段与我们返回对象字段之间的关系。
第一步:在接口中创建方法
//resultMap封装的返回值类型
List<Orders> getUserResultMap();
第二步:在配置文件的mapper标签中添加映射
<!-- type:属性是要映射的类
id:映射的id
column:数据库中字段名
property:类中的变量名
-->
<resultMap type="domain.Orders" id="ordersResultMap">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
</resultMap>
第三步:在配置文件中添加sql语句
<select id="getUserResultMap" resultMap="ordersResultMap">
select * from orders
</select>
第四步:在测试类中进行测试
@Test
public void getUserMap() throws Exception {
UserMapperInterface mapper = sqlSession.getMapper(UserMapperInterface.class);
List<Orders> ordersList = mapper.getUserResultMap();
for (Orders orders : ordersList) {
System.out.println(orders.toString());
}
}