MyBatis之使用XML配置SQL映射(一)

1. 前言

关系数据库和SQL都是经过时间考验,都提供数据储蓄机制。不像其它的ORM框架,如Hibernate,MyBatis鼓励使用SQL,而对于开发者来说,SQL的执行是被隐藏。同时MyBatis消除了许多繁琐的配置模板。

    在代码中使用嵌套的SQL语句是一个不好的做法,同时在后期维护也很难。而MyBatis配置SQL的声明使用映射XML的文件或注解,这样做有一定的好处。在这一章节中,笔者将会向大家介绍使用映射的XML文件配置SQL的语句,你将会学习到如下的几个内容:

1)        映射的XML文件配置和映射的接口定义

2)        映射的声明:INSERT、UPDATE、DELETE和SELECT

3)        关于关系型映射的配置

4)        动态的SQL语言

    Let’s go! 开启这章的学习。

2. xml文件映射与映射接口

在前面的章节中,我们学习了如何通过MapperXML的文件来声明,和如何通过调用SqlSession的对象来。让我们现在来看一下findStudentById是如何在配置文件StudentMapper.xml的文件中声明的。这个文件是在com.owen.mybatis.mappers的包中。运用下面的代码:

<?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.owen.mybatis.mappers.StudentMapper">
<select id="findStudentById" parameterType="int"
resultType="Student">
select stud_id as studId, name, email, dob from Students where
stud_id=#{studId}
</select>
</mapper>

我们可以通过下面的代码来调用上面的声明:

public Student findStudentById(Integer studId)
{
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try
{
Student student =
sqlSession.selectOne("com.owen.mybatis.mappers.StudentMapper.
findStudentById", studId);
return student;
} finally {
sqlSession.close();
}
}

就像上面的调用声明映射一样,我们只需要使用字符串(namespace和statements id)来调用就行了,但是这样也是容易出错的。你需要确保传递的参数是有效的,并通过检查它在映射XML文件中的变量,然后将结果有效地返回。

MyBatis通过使用Mapper的接口,来实现更好的调用映射声明。一旦我们在Mapper XML的文件中配置了映射的声明,我们就可以创建一个Mapper的接口,这个接口的函数与Mapper XML的文件中定义的声明ID一样,放入参数和返回类型。

在前面的StudentMapper.xml的文件中,我们可以创建一个StudentMapper.java的接口,如下所示:

package com.owen.mybatis.mappers;
public interface StudentMapper
{
Student findStudentById(Integer id);
}

在StudentMapper.xml的文件中,类的命名空间要与StudentMapper接口的包名com.owen.mybatis.mappers.StudentMapper.xml的一样。当然,声明的id、parameterType和returnType的值要与StudentMapper接口中的方法名、参数声明的类型、返回的类型保持一致。

运用下面的Mapper接口,你可以调用的映射声明如下:

public Student findStudentById(Integer studId)
{
SqlSession sqlSession = MyBatisUtil.getSqlSession();
try {
StudentMapper studentMapper =
sqlSession.getMapper(StudentMapper.class);
return studentMapper.findStudentById(studId);
} finally {
sqlSession.close();
}
}





  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值