转自:
MyBatis Mapper如何实现一个映射器呢?
映射器简介说明:
映射器是 MyBatis 中最重要的文件,文件中包含一组 SQL 语句(如查询、添加、删除、修改),这些语句称为映射语句或映射 SQL 语句。
映射器作用
使用Java 接口并结合XML 文件(或注解)共同组成,它的作用如下
映射器实现方式
当 SQL 语句存在动态 SQL 或优点复杂,
使用注解将一些信息写入到Java 文件中,则使代码可读性变差,并且维护成本高
所以笔者建议大家尽量使用XML 文件配置的方式实现映射文件,此种方式可避免重复编写SQL脚本
XML 定义映射器分为两个部分:接口和XML。下面先定义接口 UserMapper
package com.java265.mapper; import java.util.List; import com.java265.po.Website; public interface UserMapper{ public ListselectAllWebsite(); }
UserInfo .xml
下面对上述 XML 文件进行讲解。
在 MyBatis 配置文件中添加以下代码
该语句用来引入 XML 文件,MyBatis 会读取 UserInfo.xml 文件,生成映射器。
下面进行测试,用 SqlSession 来获取 Mapper,Test 类代码
public class Test { public static void main(String[] args) throws IOException { InputStream config = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config); SqlSession ss = ssf.openSession(); UserInfo userInfo= ss.getMapper(UserInfo.class); ListuserInfoList= userInfo.selectAllUserInfo(); for (UserInfo t: userInfoList) { System.out.println(t); } ss.commit(); ss.close(); } }
运行结果----
DEBUG [main] - ==> Preparing: select * from userInfo
DEBUG [main] - ==> Parameters:
DEBUG [main] - <== Total: 1
Website[id=1,name=Java爱好者]
注解实现映射器
使用注解的方式实现映射器,只需要在接口中使用 Java 注解,注入 SQL 即可。如下
package com.java265.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.java265.po.UserInfo;
public interface UserInfo2 {
@Select(value = "select * from userInfo")
public List
}
这里我们使用了 @Select 注解,并且注入了和 XML 中相同的 select 语句
注意事项:
当注解同xml文件两种方式都使用时,xml方式将覆盖注解
MyBatis 映射器的主要元素
下面介绍在映射器中可以定义哪些元素,以及它们的作用。
元素名称 | 描述 | 备注 |
---|---|---|
mapper | 映射文件的根节点,只有 namescape 一个属性 | namescape 作用如下:
|
select | 查询语句,最常用、最复杂的元素之一 | 可以自定义参数,返回结果集等 |
insert | 插入语句 | 执行后返回一个整数,代表插入的条数 |
update | 更新语句 | 执行后返回一个整数,代表更新的条数 |
delete | 删除语句 | 执行后返回一个整数,代表删除的条数 |
parameterMap | 定义参数映射关系 | 即将被删除的元素,不建议使用 |
sql | 允许定义一部分的 SQL,然后在各个地方引用它 | 例如,一张表列名,我们可以一次定义,在多个 SQL 语句中使用 |
resultMap | 用来描述数据库结果集与对象的对应关系,它是最复杂、最强大的元素 | 提供映射规则 |
cache | 配置给定命名空间的缓存 | - |
cache-ref | 其它命名空间缓存配置的引用 | - |
下一篇:P1165 日志分析