Mybatis 实战使用详细说明docx.docx

上传人:b****6 文档编号:9042396 上传时间:2023-02-02 格式:DOCX 页数:48 大小:110.41KB
下载 相关 举报
Mybatis 实战使用详细说明docx.docx_第1页
第1页 / 共48页
Mybatis 实战使用详细说明docx.docx_第2页
第2页 / 共48页
Mybatis 实战使用详细说明docx.docx_第3页
第3页 / 共48页
Mybatis 实战使用详细说明docx.docx_第4页
第4页 / 共48页
Mybatis 实战使用详细说明docx.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

Mybatis 实战使用详细说明docx.docx

《Mybatis 实战使用详细说明docx.docx》由会员分享,可在线阅读,更多相关《Mybatis 实战使用详细说明docx.docx(48页珍藏版)》请在冰豆网上搜索。

Mybatis 实战使用详细说明docx.docx

Mybatis实战使用详细说明docx

Mybatis3.1实战

1、前言2

2、什么是mybatis2

3、Mybatis入门实例2

4、Mybatis中的增、删、改、查8

5、Mybatis新特性介绍10

6、mybatis-config.xml中的元素介绍11

7、Mapper配置文件中的用法18

8、Mybatis参数传递20

9、基于注解的sql语句21

10、动态sql语句22

11、mybatis中的一对多、一对一、多对多24

12、自定义类型处理器28

13、Mybatis缓存的一点说明31

14、Spring3.1+springmvc+mybatis3.1集成31

备注40

Like模糊查询40

排序40

if元素中的条件语句41

 

1、前言

随着开发团队转投GoogleCode旗下,ibatis3.x正式更名为Mybatis。

相信很多朋友以前看过ibatis2.x,对ibatis2.x也比较熟悉,随着技术的发展,我们必须跟得上技术发展的步伐,不能永远停留在原来的技术上而不做进一步学习。

由于在我的一个新项目中采用了mybatis,为此我发了几天来学习了mybatis,相对hibernate来说,本人感觉mybatis相对来说更加简单,特别是熟悉sql语句的朋友们,你在采用mybatis时,你会觉得跟传统的jdbc方式来操作数据库没什么差别,只是mybatis帮你做了很多原来你在用jdbc来实现时的很多工作。

我们来看看mybatis包含了哪些新特性。

ØMybatis实现了接口绑定,使用更加方便

Ø对象关系映射的改进,效率更高

ØMyBatis采用功能强大的基于OGNL的表达式来消除其他元素。

在本学习教程中,全方位介绍了mybatis中的各种特性,里面的实例都是采用比较简单的实例来实现,对于有些没有介绍到的特性,大家可以参考官方文档。

本教程采用的是mybatis最新的版本mybatis3.1,并结合了maven来写这个教程,所以大家需要对maven有所了解。

2、什么是mybatis

MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。

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

3、Mybatis入门实例

Ø在maven中加入mybatis、mysql、junit的依赖包:

junit

junit

4.10

test

org.mybatis

mybatis

3.1.1

mysql

mysql-connector-java

5.1.21

commons-logging

commons-logging

1.1.1

log4j

log4j

1.2.17

Ø创建数据库

Createtablestudent(idintprimarykeyautoincrement,ageint,namevarchar(23));

在mysql数据中创建student表。

Ø配置SqlmapConfiguration.xml,在src目录下面的resources目录下面创建此文件,内容如下:

--引入外部数据库配置文件-->

--

类型别名是为Java类型命名一个短的名字。

它只和XML配置有关,只用来减少类完全限定名的多余部分。

例如:

使用这个配置,“Student”可以任意用来替代“com.marcle.domain.Student”所使用的地方。

对于普通的Java类型,有许多内建的类型别名。

它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。

-->

alias="Student"/>

alias="Status"/>

--

environments下用于配置不同数据库环境

-->

--

在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):

JDBC–这个配置直接简单使用了JDBC的提交和回滚设置。

它依赖于从数据源得到的连接来管理事务范围。

MANAGED–这个配置几乎没做什么。

它从来不提交或回滚一个连接。

而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。

默认情况下它会关闭连接。

然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false

-->

--数据源的配置

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。

许多MyBatis的应用程序将会按示例中的例子来配置数据源。

然而它并不是必须的。

要知道为了方便使用延迟加载,数据源才是必须的

有三种内建的数据源类型

UNPOOLED–这个数据源的实现是每次被请求时简单打开和关闭连接。

它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。

不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的

POOLED–这是JDB法C连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。

这是一种当前Web应用程序用来快速响应请求很流行的方

JNDI–这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用

-->

--指定要用到的mapper文件。

以下的resource属性告诉

MyBatis要在类路径下的resources目录下找student.xml文件。

我们将把mapper文件存放在src目录下的resources目录中。

-->

其中外部引入的jdbc.properties内容如下:

database.driver=com.mysql.jdbc.Driver

database.url=jdbc:

mysql:

//localhost:

3306/mybatis_01

database.user=root

database.password=marcle

Ø创建mapper文件,在resources目录下面的case文件夹下面创建student.xml文件

insertintostudent(age,name)values(#{age},#{name})

select*fromstudentwhereid=#{id}

Ø创建实体类及接口

Student类

publicclassStudentimplementsSerializable{

privateLongid;

privateintage;

privateStringname;

publicLonggetId(){

returnid;

}

publicvoidsetId(Longid){

this.id=id;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

}

StudentDao接口

publicinterfaceStudentDao{

publicStudentselect(intid);

publicvoidinsert(Studentstudent);

 

}

ØSqlMapUtil工具类及数据调用

publicclassSqlMapUtils{

privatestaticfinalLoggerlogger=LogManager.getLogger(SqlMapUtils.class);

privatestaticfinalStringCONFIG_FILE_PATH="mybatis-config.xml";

privateSqlSessionFactorysessionFactory=null;

privateSqlSessionsession=null;

privatestaticSqlMapUtilsinstance=null;

publicSqlMapUtils(){

Readerreader=null;

try{

reader=Resources.getResourceAsReader(CONFIG_FILE_PATH);

sessionFactory=newSqlSessionFactoryBuilder().build(reader);

session=sessionFactory.openSession();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

logger.fatal("IOExceptionoccuredwhilereadingtheConfigurationFile\n"+e);

e.printStackTrace();

}finally{

if(reader!

=null){

try{

reader.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

}

publicstaticsynchronizedSqlMapUtilsgetInstance(){

if(instance==null){

synchronized(SqlMapUtils.class){

instance=newSqlMapUtils();

}

}

returninstance;

}

publicSqlSessiongetSession(){

if(session==null){

thrownewRuntimeException("CreateSqlSessionfailed.");

}

returnsession;

}

}

完成上面的步骤后,我们写一个测试类,测试上面所写的内容:

publicclassStudentDaoTest{

privateStudentDaostudentMapper;

privateSqlSessionsession;

@Before

publicvoidinit(){

session=SqlMapUtils.getInstance().getSession();

studentMapper=session.getMapper(StudentDao.class);

}

@Test

publicvoidtestInsert(){

Studentstudent=newStudent();

student.setAge(34);

student.setName("luce");

studentMapper.insert(student);

mit();

}

@Test

publicvoidtestFind(){

Studentstudent=studentMapper.select(3);

System.out.println(student.getName());

}

@After

publicvoidend(){

session.close();

}

 

}

通过上面的几个步骤,我们就创建了一个完整的mybatis实例,通过这个实例,想必大家对mybatis有个初步的了解了。

4、Mybatis中的增、删、改、查

这部分将向大家介绍对数据库得基本操作:

增、删、改、查,在下面的实例中我们仍然以上面讲到的入门列子中的数据库、实体类、SqlmapConfiguration.xml配置文件及sqlMapUtil类,所以在本节中,只写明本节涉及到的内容,对于重复的内容大家可以参考上面的入门列子。

1、student.xml配置文件

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

>

DOCTYPEmapper

PUBLIC"-//ibatis.apache.org//DTDMapper3.0//EN""http:

//ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

--命名空间-->

--结果集映射从实体对象到关系数据库-->

--向数据库插入一条数据parameterType表示参数的类型-->

--

注意参数注释:

#{id}

这就告诉MyBatis创建一个预处理语句参数。

使用JDBC,这样的一个参数在SQL中会由一个“?

”来标识,并被传递到一个新的预处理语句中,就像这样:

//SimilarJDBCcode,NOTMyBatis…

StringselectPerson=“SELECT*FROMPERSONWHEREID=?

”;

PreparedStatementps=conn.prepareStatement(selectPerson);

ps.setInt(1,id);

当然,这需要很多单独的JDBC的代码来提取结果并将它们映射到对象实例中,这就是MyBatis节省你时间的地方。

我们需要深入了解参数和结果映射。

那些细节部分我们下面来了解。

-->

insertintostudent(age,name)values(#{age},#{name})

--根据特定id查找数据,其中resultType为指定的返回类型parameterType为传入参数类型-->

select*fromstudentwhereid=#{id}

--更新学生数据-->

updatestudentsetage=#{age},name=#{name}whereid=#{id}

--删除学生数据-->

deletefromstudentwhereid=#{id}

上面配置文件中的insert、delete、update、select元素,就是我们所说的增、删、改、查。

对上面涉及的属性做简要说明:

ØId即这个元素唯一编号,必须唯一,不然mybatis找不到要操作的语句

ØResultType结果类型,即我们要返回的数据要转换为什么类型

ØParameterType传入参数类型

ØResultMap结果集map,对于我们实体类中的属性于数据库中的字段设置不一样,我们可以在这里进行配置。

Ø接口

publicinterfaceStudentDao{

publicvoidupdate(Studentstudent);

publicvoiddelete(intid);

publicStudentselect(intid);

publicvoidinsert(Studentstudent);

 

}

接口定义很简单,但是接口中的名字必须与student中的id对应起来,如果接口定义的操作在student.xml中找不到对应id的sql语句,将会报错。

5、Mybatis新特性介绍

1、Mybatis实现了接口绑定,使用更加方便。

在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,

而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。

这可以说是Mybatis最重要的改进。

注意:

虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,

不过强烈建议仍然使用xml配置的方式。

毕竟annotation的配置方式功能有限且代码入侵性太强。

使用xml配置方式才能体现出Mybatis的优势所在

2、对象关系映射的改进,效率更高

相信很多在使用ibatis2.x的朋友并没有通过ibatis的xml映射文件来实现对象间的关系映射。

其实也确实没有必要那么做,因为ibatis2.x采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在DAO或Service中自行封装是一样的。

不过这种方式存在“N+1查询问题”。

概括地讲,N+1查询问题可以是这样引起的:

你执行了一个单独的SQL语句来获取结果列表(就是+1)。

对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是N)。

这个问题会导致成百上千的SQL语句被执行。

这通常不是期望的。

而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sql将查询出的dto对象自动封装成所需的对象。

具体实现方法请自行参考My

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

当前位置:首页 > PPT模板 > 国外设计风格

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

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