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 ...
随机推荐
- Python中正则匹配使用findall,捕获分组(xxx)和非捕获分组(?:xxx)的差异
转自:https://blog.csdn.net/qq_42739440/article/details/81117919 下面是我在用findall匹配字符串时遇到的一个坑,分享出来供大家跳坑. 例 ...
- MySQL8 设置大小写 正确步骤
在安装完成之后,初始化数据库之前,修改 my.cnf 打开mysql配置文件vim /etc/my.cnf 在尾部追加一行lower_case_table_names=1并保存,然后再初始化数据库. ...
- BZOJ 4807 車 组合数学
思路:高精度\((what)\) 提交:2次(后来发现有种更快的写法) 题解: 设\(n>m\),那么显然答案为\(C(n,m)\),相当于只能放\(m\)个棋子,可以在\(n\)列中选任意不同 ...
- 牛客小白月赛11 Rinne Loves Xor
题目链接:https://ac.nowcoder.com/acm/contest/370/I code: #include<bits/stdc++.h> using namespace s ...
- 安装更新npm和nodejs
1.安装npm sudo apt-get install npm 2.升级npm sudo npm install npm@latest -g 3.安装用于安装nodejs的模块n sudo npm ...
- Python数据类型之数值-Python基础前传(5)
学习任何一门学科或者手艺,最忌讳的就是想的太多,做的太少: 有很多朋友私信问我:jacky,我们该如何选择Python的课程?或是我们该如何选择Mysql课程?到底谁的课件和书籍才是最好的? 借着今天 ...
- c++容器 算法 迭代
#include <iostream> #include <vector> using namespace std; int main() { // 创建一个向量存储 int ...
- 使用Flask设计带认证token的RESTful API接口
大数据时代 Just a record. 使用Flask设计带认证token的RESTful API接口[翻译] 上一篇文章, 使用python的Flask实现一个RESTful API服务器端 简 ...
- overflow妙用--去除默认滚动条,内容仍可滚动
在开发中我们往往要去除默认滚动条,但是其在竖直方向的滚动效果仍然需要. <div id="parent"> <div id="child"&g ...
- Python学习日记(九)—— 模块二(logging、json&pickle、xml、requests、configparser、shutil、subprocess)
logging模块 用于便捷记录日志且线程安全的模块(便捷的写文件的模块,不允许多个人同时操作文件) 1.单文件日志 import logging logging.basicConfig(filena ...