MyBatis是持久化层框架(SQL映射框架)-操作数据库

一、环境搭建

1)、创建一个java工程,java工程就行;

2)、

创建表:自己用工具创建

创建javaBean:Employee(封装表的数据)

创建一个Dao接口(接口即可),用来操作数据库;


3)、用MyBatis操作数据库?

1)、导包

//mysql-connector-java-5.1.37-bin.jar

//mybatis-3.4.1.jar

//log4j-1.2.17.jar

//建议导入日志包;这样的化在mybatis关键的环节就会有日志打印;

//log4j(日志框架);依赖类路径下一个log4j.xml配置文件;

二、写配置两个

全局配置文件(指导mybatis运行的),EmployeeDao.xml

dao接口的实现文件EmployeeDao.xml(描述dao中每个方法怎么工作))

1)、第一个配置文件application.yml;(称为mybatis的全局配置文件,指导mybatis如何正确运行,比如连接向哪个数据库)

2)、第二个配置文件UserMapper.xml:(编写每一个方法都如何向数据库发送sql语句,如何执行。。。。相当于接口的实现类)

1)、将mapper的namespace属性改为接口的全类名

2)、配置细节

          

<!--namespace:名称空间;写接口的全类名,相当于告诉MyBatis这个配置文件是实现哪个接口的;  -->
<mapper namespace="com.atguigu.dao.EmployeeDao"> <!-- public Employee getEmpById(Integer id); -->
<!--
select:用来定义一个查询操作
id:方法名,相当于这个配置是对于某个方法的实现
resultType:指定方法运行后的返回值类型;(查询操作必须指定的)
#{属性名}:代表取出传递过来的某个参数的值
-->
<select id="getEmpById" resultType="com.atguigu.bean.Employee">
select * from t_employee where id=#{id}
</select>
</mapper>

3)、我们写的dao接口的实现文件,mybatis默认是不知道的,需要在全局配置文件中注册;

<!-- 引入我们自己编写的每一个接口的实现文件 -->
<mappers>
<!--resource:表示从类路径下找资源 -->
<mapper resource="mybatis/EmployeeDao.xml"/>
</mappers>

三、测试

1)、junit4类根据全局配置文件先创建一个

     String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2)、sqlSessionFactory中获取sqlSession对象操作数据库即可

//2、获取和数据库的一次会话;getConnection();
SqlSession openSession = sqlSessionFactory.openSession();
//3、使用SqlSession操作数据库,获取到dao接口的实现
EmployeeDao employeeDao = openSession.getMapper(EmployeeDao.class);
//4、调用之前的方法;
Employee employee = employeeDao.getEmpById(1);
System.out.println(employee);

四、如何写xml有提示

1)、只要eclipse找到了这个文件的dtd约束文件的位置即可

2)、绑定约束文件的位置

1、复制dtd的引用网址:

http://mybatis.org/dtd/mybatis-3-config.dtd

2、window-perferences-xml-xml catalog-Add-key输入链接名-location输入文件位置


五、补充说明

两个文件:

1)、全局配置文件:mybatis-config.xml;指导mybatis正确运行的一些全局设置;

2)、SQL映射文件:EmployeeDao.xml;相当于是对Dao接口的一个实现描述

细节:

1)、获取到的这个接口

EmployeeDao employeeDao = openSession.getMapper(EmployeeDao.class);

其实这个对象类型是个代理对象class com.sun.proxy.$Proxy3是mybatis自动创建的;

2)、SqlSessionFactory和SqlSession;

SqlSessionFactory创建SqlSession对象,Factory只new一次就行

SqlSession:相当于connection和数据库进行交互的,和数据库的一次会话,就应该创建一个新的sqlSession;

【串线篇】Mybatis入门的更多相关文章

  1. Java框架篇---Mybatis 入门

    一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. MyBatis入门(一)SqlSessionFactory

    (1)新建数据库 CREATE TABLE emp ( id INT ( 10 ) PRIMARY KEY auto_increment, last_name VARCHAR(255), gender ...

  4. Mybatis 入门到理解篇

    MyBatis         MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...

  5. Mybatis入门篇之结果映射,你射准了吗?

    目录 前言 什么是结果映射? 如何映射? 别名映射 驼峰映射 配置文件开启驼峰映射 配置类中开启驼峰映射 resultMap映射 总结 高级结果映射 关联(association) 例子 关联的嵌套 ...

  6. Mybatis入门看这一篇就够了

    什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  7. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  8. mybatis入门介绍一

    首先介绍一下Mybatis是什么?mybatis是Java的持久层框架, JAVA操作数据库是通过jdbc来操作的,而mybatis是对jdbc的封装. 使用mybatis之后,开发者只需要关注sql ...

  9. mybatis入门介绍二

    相信看过我的上一篇博客的同学都已经对mybatis有一个初步的认识了.这篇博客主要是对mybatis的mapper代理做一下简单的介绍,希望能够帮助大家共同学习. 我的上一篇博客:mybatis入门介 ...

  10. 【转载】 mybatis入门系列四之动态SQL

    mybatis 详解(五)------动态SQL 目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when, ...

随机推荐

  1. 理解"__repr__"

    class aTest: def __repr__(self): return "This is an aTest class." a = aTest() print (a) cl ...

  2. Linux的cat命令详解

    The cat command reads one or more files and copies them to standard output 也就是说,cat命令读取文件,并显示在 stand ...

  3. 【leetcode】878. Nth Magical Number

    题目如下: 解题思路:本题求的是第N个Magical Number,我们可以很轻松的知道这个数的取值范围 [min(A,B), N*max(A,B)].对于知道上下界求具体数字的题目,可以考虑用二分查 ...

  4. eval函数让我忧伤

    今天首次接触这个eval函数,让我忧伤了一把.我把当成字符串拼接,结果错得天远地远.大体情况是下面这句代码,一个劲的给我报NameError: name 'qinfeng' is not define ...

  5. 比传统事务快10倍?一张图读懂阿里云全局事务服务GTS

    近日,阿里云全局事务服务GTS正式上线,为微服务架构中的分布式事务提供一站式解决方案.GTS的原理是将分布式事务与具体业务分离,在平台层面开发通用的事务中间件GTS,由事务中间件协调各服务的调用一致性 ...

  6. 使用DMA方式发送串口数据

    一.初始化部分代码 //串口接收DMA缓存 uint8_t Uart_Rx[UART_RX_LEN] = {}; uint32_t Uart_Send_Buffer[] = {}; void USAR ...

  7. 2019 牛客暑期多校 第二场 H Second Large Rectangle (单调栈)

    题目:https://ac.nowcoder.com/acm/contest/882/H 题意:一个大的01矩阵,然后现在要求第二大的全一矩阵是多少 思路:在这里我们首先学习一下另一个东西,怎么求直方 ...

  8. linux设备驱动第一篇:设备驱动程序简介

    首先,我们知道驱动是内核的一部分,那么驱动在内核中到底扮演了什么角色呢? 设备驱动程序在内核中的角色:他们是一个个独立的“黑盒子”,使某个特定的硬件响应一个定义良好的内部编程接口,这些接口完全隐藏了设 ...

  9. git修改commiter date

    GIT: change commit date to author date git filter-branch --env-filter 'export GIT_COMMITTER_DATE=&qu ...

  10. phpstorm中sass编译时目录或内容包含中文字符报错

    ruby版本:ruby 2.4.1p111 (2017-03-22 revision 58053) [x64-mingw32] sass版本:Sass 3.4.24 (Selective Steve) ...