MyBatis之DQL

DQL配置

上一篇文章我们讲了Mybatis的使用以及DML语句的配置,这篇文章我们讲解一下DQL语句的配置。

查询出表的全部信息

首先我们配置映射文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aowin.testmybatis.student.mapper.StudentMapper" >
<!-- 查询出全部的学生信息 -->
<select id="selectAllStudents" resultMap="student_Map" resultType="Students">
select student_id,student_name,student_sex,student_birthday,group_id
from students
</select>
<!-- 配置类和表的映射关系 -->
<resultMap type="com.aowin.testmybatis.student.pojo.Students" id="student_Map">
<id property="studentid" column="student_id" javaType="java.lang.Integer"/>
<result property="studentname" column="student_name"/>
<result property="studentsex" column="student_sex"/>
<result property="studentbirthday" column="student_birthday"/>
<result property="groupid" column="group_id"/>
</resultMap>
</mapper>

当表中的属性字段和数据库中的属性的名字相同的时候,你可以再select便签中直接加上resultType属性,属性的值为对应的pojo全路径名,或者是全路径名对应的别名。
当表中的属性字段和数据库中的属性的名字不相同的时候,这时候我们就要配置resultMap标签,通过id属性来建立联系。resultMap中的id子标签对应的是主键表属性,result对应的是普通表属性。property是类属性名,column对应的是表属性名。在这里我们还可以写上javaType属性,它是说明属性的数据类型是什么,可以提高效率。
在这里我们可以用使用SqlSession的getMapper()方法来返回一个被SqlSession代理过的接口。在通过返回的这个类调用它的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public List<Students> selectAlllStudents() {
log.info("调用业务逻辑方法selectAlllStudents()");
SqlSession ss = MybatisSqlSessionFactory.getSqlSession();
List<Students> list = new ArrayList<>();
try {
StudentMapper sm = ss.getMapper(StudentMapper.class);
list = sm.selectAllStudents();
log.info("成功查询出"+list.size()+"条数据,数据内容为:"+list);
} catch (Exception e) {
log.warn("查询失败");
}
MybatisSqlSessionFactory.closeSqlSession();
return list;
}

分页查询

映射配置文件:

1
2
3
4
5
6
7
<select id="selectStudentsPage" resultMap="student_Map">
select
student_id,student_name,student_sex,student_birthday,group_id
from
students
limit #{offset},#{pageSize}
</select>

在接口中:
mybatis中有三种传递参数的方式,这里我们只用其中一种方式。通过Map集合

1
2
3
4
5
6
/**
* 用limit做分页
* @param map 分页条件
* @return student集合
*/
public List<Students> selectStudentsPage(Map<String,Object> map);

在实现类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public List<Students> getStudents3(int pages, int pageSize) {
log.info("调用业务逻辑方法getStudents3(int pages, int pageSize)");
SqlSession ss = MybatisSqlSessionFactory.getSqlSession();
List<Students> list = new ArrayList<>();
//创建一个HasoMap实例
Map<String, Object> map = new HashMap<>();
//offset对应映射配置文件中的offset
map.put("offset", (pages-1)*pageSize);
//pageSize对应配置文件中的pageSize
map.put("pageSize", pageSize);
try {
StudentMapper sm = ss.getMapper(StudentMapper.class);
list = sm.selectStudentsPage(map);
log.info("成功查询出"+list.size()+"条数据,数据内容为:"+list);
} catch (Exception e) {
log.warn("查询失败");
}
MybatisSqlSessionFactory.closeSqlSession();
return list;
}

通过条件查询

映射配置文件:

1
2
3
4
5
6
7
8
<!-- 通过学生编号查询出学生信息 -->
<select id="selectStudentById" parameterType="int" resultMap="student_Map">
select
student_id,student_name,student_sex,student_birthday,group_id
from
students
where student_id = #{studentid}
</select>

在接口中:

1
2
3
4
5
6
/**
* 通过studentid查询学生信息
* @param studentid学生id
* @return 学生信息
*/
public Students selectStudentById(Integer studentid);

在实现类中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public Students selectStudentById(Integer studentid) {
log.info("调用业务逻辑方法selectStudentById(Integer studentid)");
SqlSession ss = MybatisSqlSessionFactory.getSqlSession();
Students student = null;
try {
StudentMapper sm = ss.getMapper(StudentMapper.class);
student = sm.selectStudentById(studentid);
log.info("成功查询出数据,数据内容为:"+student);
} catch (Exception e) {
log.warn("查询失败");
}
MybatisSqlSessionFactory.closeSqlSession();
return student;
}

-------------本文结束感谢您的阅读-------------