MyBatis接口式编程
MyBatis使用接口连接数据库
之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库。使用接口连接数据库
https://www.cnblogs.com/liziweiblog/p/11080470.html
1. 创建EmployeeMapper接口,定义sql方法
package com.atguigu.mybatis.dao; import com.atguigu.mybatis.bean.Employee; /**
* Employee数据库操作接口
* @author Administrator
*接口可以与配置文件动态绑定
*namespace指定为接口的全类名,唯一标识指定为sql对应的方法名,返回值类型就是方法的返回值类型的全类名
*/
public interface EmployeeMapper { public Employee getEmployeeById(Integer id); }
2. 将sql映射配置文件与接口绑定
1. 将namespace配置为EmployeeMapper接口的全路径
2. 将唯一标识id配置为方法名称
3.将返回类型resultType设置为方法的返回值类型全路径
<?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.atguigu.mybatis.dao.EmployeeMapper">
<!--
namespace:名称空间
id:唯一标识 #{id}表示从参数出取出id
resultType:返回值类型
-->
<select id="getEmployeeById" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id}
</select>
</mapper>
3. 编写测试用例,连接数据库
1. 通过配置文件获取sqlSessionFactory对象
2.通过sqlSessionFactory对象获取sqlSession对象
3. 通过sqlSession对象获取接口的实现类对象employeeMapper
4.调用employeeMapper对象的方法执行sql
5.关闭sqlSession对象
@Test
public void test01() throws IOException {
//1. 获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = null;
try {
//2得到sqlSession对象
sqlSession = sqlSessionFactory.openSession();
//通过EmployeeMapper接口获取mapper对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//调用EmployeeMapper中的方法查询
Employee employee = mapper.getEmployeeById(1);
System.out.println(employee);
}finally {
//关闭sqlSession对象
sqlSession.close();
}
}
结果:
没有报错,查询成功
Employee [id=1, last_Name=tom, email=tom@atgui, gender=0]
创建接口没有实现也行吗?
在以上的教程中我们只是创建了一个接口定义了一个空方法体的方法,直接在测试用例中通过getMapper(接口.class)获取EmployeeMapper对象。
这样也行吗?没有实现的接口也能实例化????
在测试类中
//通过EmployeeMapper接口获取mapper对象
EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
//查看mapper到底是什么
System.out.println(mapper.getClass());
输出结果:
class com.sun.proxy.$Proxy8
原来是代理对象。
MyBatis会为绑定sql映射配置文件的接口创建一个代理对象。通过代理对象调用方法。
可以看成配置文件xxxMapper.xml就是对接口的实现。
对于这个机制的原理我还不清楚,以后再深入学习。
总结
MyBatis中最重要的种配置文件
1. 全局配置文件。配置了数据源,事务管理等全局信息
2. sql映射配置文件。配置了每一个接口方法对应的sql语句
使用传统方法和使用接口方法都可以实现功能。但是推荐使用接口的方法。
MyBatis接口式编程的更多相关文章
- MyBatis的接口式编程Demo
很久没细看过MyBatis了,时间一长就容易忘记. 下面是一个接口式编程的例子. 这里的例子一共分为4步: 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml ...
- Mybatis笔记二:接口式编程
目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...
- MyBatis源码解析【7】接口式编程
前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 修改例子 在我们实际 ...
- 通过自动回复机器人学Mybatis 笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- 通过自动回复机器人学Mybatis笔记:接口式编程
[接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...
- mybaits接口式编程
Mybatis是接口式编程实现对.xml中sql语句的执行,其过程如下(取自慕课网视频<通过自动回复机器人学Mybatis---加强版>): 1.加载配置信息2.通过加载配置信息加载一个代 ...
- MyBatis3-topic04,05 -接口式编程
笔记要点 /**接口式编程: * 1. 原生: Dao 接口-->Dao接口的实现类 * mybatis: Mapper --> 有一个与之对应的 XXMapper.xml * 2. Sq ...
- mybatis学习(三)——接口式编程
对于上一节中的查询我们还可以通过接口的方式进行编程,开发环境和上一节一样 1.全局配置文件mybatis_config.xml(和上一节一样) <?xml version="1.0&q ...
- MyBatis入门(二)接口式编程
在 MyBatis入门(一) 的基础之上编写接口 将接口和Mapper文件进行绑定,会为接口创建一个代理对象,代理对象去执行增删改查 (1)编写接口 public interface EmpDao ...
随机推荐
- Pycharm----默认字体大小的设置
设定前 设定后,修改字体的大小为:15号 设置方式:按照截图操作选择后,点击”apply“即可
- 标准库heapq的使用
转载自: https://blog.csdn.net/y472360651/article/details/80725355 查找最大或最小的N个元素 怎么样从一个列表中取出最大或最小的N个元素的列表 ...
- 基于 C++ 的脚本语言 cpps 脚本
cpps 脚本是一个基于 C++ 的脚本语言. 基础语法: if&else 接口说明 根据括号中数据判断执行相关代码. 代码演示 var i = toint(io.getc()); if(i ...
- ACM-ICPC 2018 徐州赛区现场赛 I. Rikka with Sorting Networks (思维+DFS)
题目链接:https://codeforces.com/gym/102012/problem/I 题意:问有多少个 1 到 n 的排列,使得用给定的 k 个比较器(使 au 和 av 有序)排序后,整 ...
- 推荐一款在IntelliJ IDEA中使用微信/QQ的插件
SmartIM SmartIM4IntelliJ 是一个 IntelliJ IDEA 上的 SmartIM(原 SmartQQ)插件,可以在 IDEA 中使用 QQ 或微信聊天. 功能 收发文本消息 ...
- [2019HDU多校第二场][HDU 6591][A. Another Chess Problem]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6591 题目大意:二维坐标系上,所有满足\(5|2x+y\)的点都被设为障碍物,无法通过.现给出一对点, ...
- 002_Python基础学习网站
(一)电脑端:Python 基础教程 (二)手机端:Python 基础教程
- 001_项目开源之_STM32激光雕刻机
我是标题:STM32激光雕刻机(开源免费) (一)首先感谢将离九歌 https://github.com/MaxwellXyao 提供的C8T6/GRBL的源码 (二)本设计开源(免费),请忽倒 ...
- C语言学习笔记10-结构体、枚举、联合体
C语言学习笔记10-结构体.枚举.联合体 待传
- js和jQuery实现的Ajax
1. JS实现Ajax <!doctype html> <html lang="en"> <head> <meta charset=&qu ...