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. 详解es6中Proxy代理对象的作用

    在es6中新添加了Proxy,那么它有什么作用啊?Proxy本意为代理,而es6中的Proxy也就是代理对象,那么代理对象感觉听起来很模糊,在这里就解释一下Proxy代理对象的作用. Proxy的主要 ...

  2. 算法:统计1-n中,1出现的次数

    package edu.cqu.algorithmTest; import java.util.Scanner; /* * 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所 ...

  3. Java集合--整体框架

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...

  4. IntelliJ IDEA 生成类注释和方法注释

    1.类注释 settings-> file and code templates-> files(Class) 代码: #if (${PACKAGE_NAME} && ${ ...

  5. jaxb生成pojo类返回类型为布尔值的问题

    返回值为Boolean的话回在对象转json的时候丢失掉这个属性,因为json认的是小写. 这个算jaxb的一个bug:https://java.net/jira/browse/JAXB-510 解决 ...

  6. IE版本判断条件注释

    IE下判断IE版本的语句...[if lte IE 8]……[endif]  <!--[if lte IE 6]> <![endif]--> IE6及其以下版本可见   < ...

  7. JQuery 实践---创建元素包装集

    1. 利用选择器,选择将被JQuery包装的元素 标识和选择DOM元素.JQuery采用我们已经知道的CSS语法并且扩展了一些.为了利用JQuery来选择元素,请把选择器包装在$()中. 基本CSS选 ...

  8. Activiti服务类- RuntimeService服务类

    一共89个接口1.启动流程实例(20个方法)//使用给定的键在流程定义的最新版本中启动一个新的流程实例.ProcessInstance startProcessInstanceByKey(String ...

  9. MySQL数据分析-(3)MySQL软件的安装(Windows版)

    (一)MySQL下载 进入https://www.mysql.com/网页,找到DOWNLOADS然后点击进入页面,在页面中,我们选择社区版Community 点击,选择MySQL Community ...

  10. c++ 判断是元音还是辅音

    #include <iostream> using namespace std; int main() { char c; int isLowercaseVowel, isUppercas ...