MyBatis简明教程.docx

上传人:b****5 文档编号:3869359 上传时间:2022-11-26 格式:DOCX 页数:46 大小:185.34KB
下载 相关 举报
MyBatis简明教程.docx_第1页
第1页 / 共46页
MyBatis简明教程.docx_第2页
第2页 / 共46页
MyBatis简明教程.docx_第3页
第3页 / 共46页
MyBatis简明教程.docx_第4页
第4页 / 共46页
MyBatis简明教程.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

MyBatis简明教程.docx

《MyBatis简明教程.docx》由会员分享,可在线阅读,更多相关《MyBatis简明教程.docx(46页珍藏版)》请在冰豆网上搜索。

MyBatis简明教程.docx

MyBatis简明教程

 

MyBatis简明教程

——史上最简单的MyBatis教程

 

Dr.Cang电脑工作室

2018年9月

 

 

前言

本《MyBatis简明教程》是根据CSDN上的《史上最简单的MyBatis教程》编辑而成。

其网址为

本教程的GitHub地址为「mybatis-tutorial」。

 

Dr.Cang电脑工作室

2018年9月

 

目录

 

前言1

第1章MyBatis教程

(一)1

一、简介1

二、构建步骤1

三、体验MyBatis框架1

第2章基于JUnit单元测试的原理及示例4

一、简介4

二、特点5

三、内容5

四、JUnit3.X和JUnit4.X的区别6

五、测试示例9

六、个人建议12

第3章MyBatis教程

(二)13

一、前言13

二、示例13

三、完整代码15

第4章MyBatis教程(三)19

一、前言19

二、总结19

第5章MyBatis教程(四)20

一、前言20

二、动态SQL语句20

三、总结23

第6章MyBatis教程(五)24

一、前言24

二、关联映射(1:

N)24

前言

MyBatis源于Apache的一个开源项目iBatis,而iBatis一词则来源于“internet”和“abatis”的组合,2010年这个项目由ApacheSoftwareFoundation迁移到了GoogleCode,并且改名为MyBatis,2013年11月其又迁移到Github。

MyBatis是一个基于Java的支持普通SQL查询,存储过程和高级映射的优秀持久层框架,相比于基于面向对象使用HQL语言的Hibernate框架,MyBatis则基于SQL面向结果集,因此其效率更高。

第1章MyBatis教程

(一)

一、简介

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架,其几乎消除了所有的JDBC代码和参数的手工设置以及结果集的检索。

MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlainOldJavaObjects,普通的Java对象)映射成数据库中的记录。

MyBatis应用程序大都使用SqlSessionFactory实例,SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得,而 SqlSessionFactoryBuilder则可以从一个XML配置文件或者一个预定义的配置类的实例获得。

二、构建步骤

想要熟练的使用MyBatis框架,就必须明确其构建步骤,在此,咱们给出构建MyBatis框架的详细步骤,以供大家参考:

∙创建一个JavaWeb项目;

∙导入MyBatis框架的jar包;

∙创建核心配置文件sqlMapConfig.xml;

∙创建映射文件UersMapper.xml;

∙创建测试类。

其中,MyBatis框架的jar包可以通过“MyBatis之各种依赖包 ”进行下载,而且里面包含了大多数常用的配置文件,值得大家get。

此外,还有一点需要大家注意,那就是MyBatis框架用于操作数据,支持SQL语句,因此在体验MyBatis框架的时候,需要使用数据库配合进行测试。

在本篇博文中,咱们在数据库中创建了一个名为“person”的表,并通过MyBatis框架对其进行一系列常见的操作(增、删、改、查等)。

三、体验MyBatis框架

首先,给出项目结构图:

第一步:

创建JavaWeb项目,导入jar包

mybatis-3.2.2.jar核心jar

mysql-connector-java-5.1.10-bin.jar数据库访问

asm-3.3.1.jar增强类

cglib-2.2.2.jar动态代理

commons-logging-1.1.1.jar通用日志

javassist-3.17.1-GA.jarjava助手

log4j-1.2.17.jar日志

slf4j-api-1.7.5.jar日志

slf4j-log4j12-1.7.5.jar日志

第二步:

创建核心配置文件sqlMapConfig.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEconfiguration

PUBLIC"-//mybatis.org//DTDConfig3.0//EN"

"http:

//mybatis.org/dtd/mybatis-3-config.dtd">

--配置开发环境,可以配置多个,在具体用时再做切换-->

--事务管理类型:

JDBC、MANAGED-->

--数据源类型:

POOLED、UNPOOLED、JNDI-->

mysql:

//localhost:

3306/test?

characterEncoding=utf-8"/>

--加载映射文件mapper-->

--路径用斜线(/)分割,而不是用点(.)-->

第三步:

创建映射文件UersMapper.xml

xmlversion="1.0"encoding="UTF-8"?

>

DOCTYPEmapper

PUBLIC"-//mybatis.org//DTDMapper3.0//EN"

"http:

//mybatis.org/dtd/mybatis-3-mapper.dtd">

--命名空间,名字可以随意起,只要不冲突即可-->

--对象映射,可以不写-->

--查询功能,resultType设置返回值类型-->

--书写SQL语句-->

SELECT*FROMPerson

第四步:

创建实体类(Person)

packageyeepay.payplus;

/**

*Createdby维C果糖on2017/2/1.

*/

publicclassPerson{

privateIntegerid;

privateStringname;

privateIntegerage;

publicIntegergetId(){

returnid;

}

publicvoidsetId(Integerid){

this.id=id;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicIntegergetAge(){

returnage;

}

publicvoidsetAge(Integerage){

this.age=age;

}

@Override

publicStringtoString(){

return"Person{"+

"id="+id+

",name='"+name+'\''+

",age="+age+

'}';

}

}

第五步:

创建测试类(CeshiMyBatis)

packageyeepay.payplus.test;

importorg.apache.ibatis.io.Resources;

importorg.apache.ibatis.session.SqlSession;

importorg.apache.ibatis.session.SqlSessionFactory;

importorg.apache.ibatis.session.SqlSessionFactoryBuilder;

importorg.junit.Test;

importyeepay.payplus.Person;

importjava.io.IOException;

importjava.io.InputStream;

importjava.util.List;

/**

*Createdby维C果糖on2017/2/1.

*/

publicclassCeshiMyBatis{

@Test

publicvoidceshi()throwsIOException{

/**

*1、获得SqlSessionFactory

*2、获得SqlSession

*3、调用在mapper文件中配置的SQL语句

*/

Stringresource="sqlMapConfig.xml";//定位核心配置文件

InputStreaminputStream=Resources.getResourceAsStream(resource);

SqlSessionFactorysqlSessionFactory=newSqlSessionFactoryBuilder().build(inputStream);//创建SqlSessionFactory

SqlSessionsqlSession=sqlSessionFactory.openSession();//获取到SqlSession

//调用mapper中的方法:

命名空间+id

ListpersonList=sqlSession.selectList("yeepay.payplus/mapper.UserMapper.findAll");

for(Personp:

personList){

System.out.println(p);

}

}

}

在完成以上步骤后,咱们可以通过JUnit来测试框架是否搭建成功,具体使用JUnit进行测试的方法,可以通过阅读“基于JUnit单元测试的原理及示例”来了解更为详细的内容。

第2章基于JUnit单元测试的原理及示例

一、简介

JUnit是一个Java语言的单元测试框架,它由KentBeck和ErichGamma建立,逐渐成为xUnit家族中最为成功的一个。

JUnit有它自己的JUnit扩展生态圈,多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

在这里,一个单元可以是一个方法、类、包或者子系统。

因此,单元测试是指对代码中的最小可测试单元进行检查和验证,以便确保它们正常工作。

例如,我们可以给予一定的输入测试输出是否是所希望得到的结果。

在本篇博客中,作者将着重介绍JUnit4.X版本的特性,这也是我们在日常开发中使用最多的版本。

二、特点

∙JUnit提供了注释以及确定的测试方法;

∙JUnit提供了断言用于测试预期的结果;

∙JUnit测试优雅简洁不需要花费太多的时间;

∙JUnit测试让大家可以更快地编写代码并且提高质量;

∙JUnit测试可以组织成测试套件包含测试案例,甚至其他测试套件;

∙Junit显示测试进度,如果测试是没有问题条形是绿色的,测试失败则会变成红色;

∙JUnit测试可以自动运行,检查自己的结果,并提供即时反馈,没有必要通过测试结果报告来手动梳理。

三、内容

3.1注解

∙@Test:

该注释表示,用其附着的公共无效方法(即用public修饰的void类型的方法)可以作为一个测试用例;

∙@Before:

该注释表示,用其附着的方法必须在类中的每个测试之前执行,以便执行测试某些必要的先决条件;

∙@BeforeClass:

该注释表示,用其附着的静态方法必须执行一次并在类的所有测试之前,发生这种情况时一般是测试计算共享配置方法,如连接到数据库;

∙@After:

该注释表示,用其附着的方法在执行每项测试后执行,如执行每一个测试后重置某些变量,删除临时变量等;

∙@AfterClass:

该注释表示,当需要执行所有的测试在JUnit测试用例类后执行,AfterClass注解可以使用以清理建立方法,如断开数据库连接,注意:

附有此批注(类似于BeforeClass)的方法必须定义为静态;

∙@Ignore:

该注释表示,当想暂时禁用特定的测试执行可以使用忽略注释,每个被注解为@Ignore的方法将不被执行。

/**

*JUnit注解示例

*/

@Test

publicvoidtestYeepay(){

Syetem.out.println("用@Test标示测试方法!

");

}

@AfterClass

publicstaticvoidpaylus(){

Syetem.out.println("用@AfterClass标示的方法在测试用例类执行完之后!

");

}

3.2断言

在这里,作者将介绍一些断言方法,所有这些方法都来自org.junit.Assert类,其扩展了java.lang.Object类并为它们提供编写测试,以便检测故障。

简而言之,我们就是通过断言方法来判断实际结果与我们预期的结果是否相同,如果相同,则测试成功,反之,则测试失败。

∙voidassertEquals([Stringmessage],expectedvalue,actualvalue):

断言两个值相等,值的类型可以为int、short、long、byte、char或者 

java.lang.Object,其中第一个参数是一个可选的字符串消息;

∙voidassertTrue([Stringmessage],booleancondition):

断言一个条件为真;

∙voidassertFalse([Stringmessage],booleancondition):

断言一个条件为假;

∙voidassertNotNull([Stringmessage],java.lang.Objectobject):

断言一个对象不为空(null);

∙voidassertNull([Stringmessage],java.lang.Objectobject):

断言一个对象为空(null);

∙voidassertSame([Stringmessage],java.lang.Objectexpected,java.lang.Objectactual):

断言两个对象引用相同的对象;

∙voidassertNotSame([Stringmessage],java.lang.Objectunexpected,java.lang.Objectactual):

断言两个对象不是引用同一个对象;

∙voidassertArrayEquals([Stringmessage],expectedArray,resultArray):

断言预期数组和结果数组相等,数组的类型可以为int、long、short、char、byte或者java.lang.Object

四、JUnit3.X和JUnit4.X的区别

4.1JUnit3.X

(1)使用JUnit3.X版本进行单元测试时,测试类必须要继承于TestCase父类;

(2)测试方法需要遵循的原则:

∙public的;

∙void的;

∙无方法参数;

∙方法名称必须以test开头;

(3)不同的测试用例之间一定要保持完全的独立性,不能有任何的关联; 

(4)要掌握好测试方法的顺序,不能依赖于测试方法自己的执行顺序。

/**

*用JUnit3.X进行测试

*/

importjunit.framework.Assert;

importjunit.framework.TestCase;

publicclassTestOperationextendsTestCase{

privateOperationoperation;

publicTestOperation(Stringname){//构造函数

super(name);

}

@Override

publicvoidsetUp()throwsException{//在每个测试方法执行[之前]都会被调用,多用于初始化

System.out.println("欢迎使用Junit进行单元测试...");

operation=newOperation();

}

@Override

publicvoidtearDown()throwsException{//在每个测试方法执行[之后]都会被调用,多用于释放资源

System.out.println("Junit单元测试结束...");

}

publicvoidtestDivideByZero(){

Throwablete=null;

try{

operation.divide(6,0);

Assert.fail("测试失败");//断言失败

}catch(Exceptione){

e.printStackTrace();

te=e;

}

Assert.assertEquals(Exception.class,te.getClass());

Assert.assertEquals("除数不能为0",te.getMessage());

}

}

4.2JUnit4.X

(1)使用JUnit4.X版本进行单元测试时,不用测试类继承TestCase父类;

(2)JUnit4.X版本,引用了注解的方式进行单元测试;

(3)JUnit4.X版本我们常用的注解包括:

∙@Before注解:

与JUnit3.X中的setUp()方法功能一样,在每个测试方法之前执行,多用于初始化;

∙@After注解:

与JUnit3.X中的tearDown()方法功能一样,在每个测试方法之后执行,多用于释放资源;

∙@Test(timeout=xxx)注解:

设置当前测试方法在一定时间内运行完,否则返回错误;

∙@Test(expected=Exception.class)注解:

设置被测试的方法是否有异常抛出。

抛出异常类型为:

Exception.class;

此外,我们可以通过阅读上面的第二部分“2注解”了解更多的注解。

/**

*用JUnit4.X进行测试

*/

importstaticorg.junit.Assert.*;

importorg.junit.After;

importorg.junit.AfterClass;

importorg.junit.Before;

importorg.junit.BeforeClass;

importorg.junit.Test;

publicclassTestOperation{

privateOperationoperation;

@BeforeClass

publicstaticvoidglobalInit(){//在所有方法执行之前执行

System.out.println("@BeforeClass标注的方法,在所有方法执行之前执行...");

}

@AfterClass

publicstaticvoidglobalDestory(){//在所有方法执行之后执行

System.out.println("@AfterClass标注的方法,在所有方法执行之后执行...");

}

@Before

publicvoidsetUp(){//在每个测试方法之前执行

System.out.println("@Before标注的方法,在每个测试方法之前执行...");

operation=newOperation();

}

@After

publicvoidtearDown(){//在每个测试方法之后执行

System.out.println("@After标注的方法,在每个测试方法之后执行...");

}

@Test(timeout=600)

publicvoidtestAdd(){//设置限定测试方法的运行时间如果超出则返回错误

System.out.println("测试add方法...");

intresult=operation.add(2,3);

assertEquals(5,result);

}

@Test

publicvoidtestSubtract(){

System.out.println("测试subtract方法...");

intresult=operation.subtract(1,2);

assertEquals(-1,result);

}

@Test

publicvoid

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1