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接口式编程的更多相关文章

  1. MyBatis的接口式编程Demo

    很久没细看过MyBatis了,时间一长就容易忘记. 下面是一个接口式编程的例子. 这里的例子一共分为4步: 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml ...

  2. Mybatis笔记二:接口式编程

    目录 旧方法的弊端 接口式编程 接口式编程的好处 接口式编程的增删改查 旧方法的弊端 在Mybatis笔记一中,我们使用命名空间+id的方式实现了Mybatis的执行,不过这里的命名空间是我们随便写的 ...

  3. MyBatis源码解析【7】接口式编程

    前言 这个分类比较连续,如果这里看不懂,或者第一次看,请回顾之前的博客 http://www.cnblogs.com/linkstar/category/1027239.html 修改例子 在我们实际 ...

  4. 通过自动回复机器人学Mybatis 笔记:接口式编程

    [接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...

  5. 通过自动回复机器人学Mybatis笔记:接口式编程

    [接口式编程]尚未遇见Spring --> 代码量反而增加 1.增加约定,减少犯错的可能(不用直接去写字符串 修改点1:命名空间 修改点2:增加接口,方法名与配置文件中的id对应 package ...

  6. mybaits接口式编程

    Mybatis是接口式编程实现对.xml中sql语句的执行,其过程如下(取自慕课网视频<通过自动回复机器人学Mybatis---加强版>): 1.加载配置信息2.通过加载配置信息加载一个代 ...

  7. MyBatis3-topic04,05 -接口式编程

    笔记要点 /**接口式编程: * 1. 原生: Dao 接口-->Dao接口的实现类 * mybatis: Mapper --> 有一个与之对应的 XXMapper.xml * 2. Sq ...

  8. mybatis学习(三)——接口式编程

    对于上一节中的查询我们还可以通过接口的方式进行编程,开发环境和上一节一样 1.全局配置文件mybatis_config.xml(和上一节一样) <?xml version="1.0&q ...

  9. MyBatis入门(二)接口式编程

    在  MyBatis入门(一) 的基础之上编写接口 将接口和Mapper文件进行绑定,会为接口创建一个代理对象,代理对象去执行增删改查 (1)编写接口 public interface EmpDao ...

随机推荐

  1. 使用python批量造测试数据

    # -*- coding:utf-8 -*- import json import os import time class Virtual_Data: def __init__(self): sel ...

  2. 本月周六周日LIST集合

    最近项目中有用到本月所有的周六,周日,特此分享一下! 算法思路:写一个循环,条件为本月开始日期.本月截至日期,通过循环获取第一个周六,加一天就是周日,每增加六天就是下一个周六,依次类推,循环到月末 代 ...

  3. windows系统上 安装 Redis

    下载地址:https://github.com/microsoftarchive/redis/releases 下载完成后,把这个给解压出来 然后,使用 cmd 命令 进入 解压的redis目录 输入 ...

  4. [hdoj6415 Rikka with Nash Equilibrium][dp]

    http://acm.hdu.edu.cn/showproblem.php?pid=6415 Rikka with Nash Equilibrium Time Limit: 10000/5000 MS ...

  5. django获取数据

    获取单个值 request.POST.get('user') # user对应前端name属性对应的值 获取多个值(如checkbox,multiple) request.POST.getlist(' ...

  6. 一个项目中:只能存在一个 WebMvcConfigurationSupport (添加swagger坑)

    问题再现: 1.添加了swagger配置,导致接口响应的中文乱码 2.于是又添加了配置解决中文乱码的配置: 问题来了,添加了CharsetConfig 配置后swagger的配置失效了,访问404,搞 ...

  7. yii行为和过滤器

    行为是对类的功能进行了扩展,针对开闭原则,为了类的扩展而生,不去修改类原有的代码. yii的行为需要继承yii\base\Behavior,这就好比你要给人安装一个胳膊,这个胳膊得是人的,而不能是老虎 ...

  8. The Preliminary Contest for ICPC Asia Xuzhou 2019 【 题目:so easy】{并查集维护一个数的下一个没有被删掉的数} 补题ING

    题意:给[1,n],n个数,有两种操作: 1 x,删去x2 x,查询还未被删去的数中大于等于x的最小的数是多少. input: output: 做法:按照并查集的方法压缩路径 代码: #include ...

  9. MySQL 源码编译安装脚本

    cat mysql_init.shmysql_init.sh               mysql_init.sh.20190401      mysql_init.sh.back20171030  ...

  10. php win/linux/mac 安装redis扩展或者扩展报错 zend_smart_str.h file not found

    1 windows 安装reids 扩展 根据phpinfo 查看php信息.在pecl.php.net 下载对应的redis扩展版本,放如扩展目录,在php.ini 配置扩展信息,重启服务 2 li ...