当前位置:文档之家› mybatis中文版教程

mybatis中文版教程

mybatis中文版教程
mybatis中文版教程

MyBatis Spring1.0.0-RC3

参考文档

MyBatis 社区(https://www.doczj.com/doc/3115571769.html,)

Copyright ? 2010

本文档的拷贝仅允许您个人使用或分发给其他用户,但是不能收取任何费用,后期的发布无论是印刷版或电子版,也会进行版权声明。

本文档由南磊(nanlei1987@https://www.doczj.com/doc/3115571769.html,)翻译

目录

第一章介绍 (3)

1.1 整合动机 (3)

1.2 要求 (3)

1.3 感谢 (3)

第二章入门 (4)

2.1 安装 (4)

2.2 快速创建 (4)

第三章SqlSessionFactoryBean (6)

3.1 创建 (6)

3.2 属性 (6)

第四章事务 (8)

4.1 标准配置 (8)

4.2 容器管理事务 (8)

第五章使用SqlSession (9)

5.1 SqlSessionSupport (9)

5.2 SqlSessionTemplate (9)

第六章MapperFactoryBean (11)

6.1 创建 (11)

6.2 注入映射器 (11)

6.3 自动配置 (12)

第七章使用MyBatis API (13)

第八章示例代码 (14)

第一章介绍

1.1 整合动机

正如第二版,Spring仅支持iBatis2。那么我们就想将MyBatis3的支持加入到Spring3.0(参考Spring的Jira的问题)中。不幸的是,Spring 3.0的开发在MyBatis 3.0官方发布前就结束了。因为Spring开发团队不想发布一个基于非发行版的MyBatis的整合支持,那么Spring 官方的支持就不得不等到至少3.1版本了。要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始进行Spring和MyBatis整合的时候了。

这个小类库就来创建丢失的粘贴Spring和MyBtatis这两个流行框架的胶水。减少用户不得不来配置MyBatis和Spring 3.X上下文环境的样板和冗余代码。它还透明地增加了Spring 对MyBatis事务的支持。

1.2 要求

在开始阅读本手册之前,很重要的一点是你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,本手册不会提供二者的背景内容,基本安装和配置教程。

和MyBatis一样,MyBatis-Spring也需要Java 5或更高版本。

1.3 感谢

非常感谢那些使得本项目成为现实的人们(按字母顺序排序)。Eduardo Macarron,Hunter Presnall和Putthibong Boonbong的编码工作,测试和文档修改;Andrius Juozapaitis,Giovanni Cuccu,Raj Nagappan和Tomas Pinos的贡献;而Simone Tripodi发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。

第二章 入门

MyBatis-Spring 帮助了你的MyBatis 代码和Spring 进行无缝整合。使用这个类库中的类,Spring 将会为你加载必要的MyBatis 工厂和session 类。这个小类库也会提供一个简便的方式向你的service 层bean 中注入MyBatis 的数据映射器。最终,MyBatis-Spring 将会控制事务,翻译MyBatis 异常到Spring 的DataAccessException 异常(数据访问异常,译者注)。

2.1 安装

要使用MyBatis-Spring 模块,你只需要包含mybatis-spring-1.0.0-RC3.jar 文件,并在类路径中加入依赖关系。 如果你使用Maven ,那么在pom.xml 中加入下面的代码即可:

2.2 快速创建

要和Spring 一起使用MyBatis ,你需要在Spring 应用上下文中定义至少两样东西:一个

SqlSessionFactory 和至少一个数据映射器类。

在MyBatis-Spring

中,SqlSessionFactoryBean 是用于创建SqlSessionFactory .的。要配置这个工厂bean ,放置下面的代码在Spring 的XML 配置文件中:

要注意

SqlSessionFactory 需要一个DataSource .(数据源,译者注)。这可以是任意

的DataSource .,配置它就和配置其它Spring

数据库连接一样。 假设你有一个如下编写的数据映射器类: 那么可以使用,像下面这样来把接口加入到Spring 中:

要注意指定的映射器类必须是一个接口,而不是具体的实现类。在这个示例中,注解被用来指定SQL语句,但是MyBatis的映射器XML文件也可以用。

一旦配置好,你可以以注入其它任意Spring的bean相同的方式直接注入映射器到你的business/service对象中。MapperFactoryBean控制SqlSession创建和关闭它。如果使用了Spring的事务,那么当事务完成时,session将会提交或回滚。最终,任何异常都会被翻译成Spring的DataAccessException异常。

调用MyBatis数据方法现在只需一行代码:

第三章 SqlSessionFactoryBean

在基本的MyBatis 中,session 工厂可以使用SqlSessionFactoryBuilder .来创建。在MyBatis-Spring 中,使用了SqlSessionFactoryBean 来替代。

3.1 创建

要创建工厂bean ,放置下面的代码在Spring 的XML 配置文件中:

要注意SqlSessionFactoryBean 实现了Spring 的FactoryBean 接口(请参考Spring 文档的3.8章节部分)。这就说明Spring

最终创建的bean 不是SqlSessionFactoryBean 本身完成的,但是工厂类getObject()返回的方法的结果是基于那个类的。这种情况下,Spring 将会在应用启动时为你创建SqlSessionFactory 对象,然后将它以SqlSessionFactory 为名来存储。在Java 中,相同的代码是:

在普通的MyBatis-Spring 用法中,你不需要使用SqlSessionFactoryBean 或直接和其对

应的SqlSessionFactory 。而session 工厂将会被注入到MapperFactoryBean 中或其它扩展了SqlSessionDaoSupport 的DAO (Data Access Object ,数据访问对象,译者注)中。

3.2 属性

SqlSessionFactory 有一个必须的属性,就是JDBC 的DataSource 。这可以是任意的DataSource ,配置和其它的Spring 数据库连接是一样的。

一个通用的属性是configLocation ,它是用来指定MyBatis 的XML 配置文件路径的。如果基本的MyBatis 配置需要改变,那么这就是一个需要它的地方。通常这会是部分。 要注意这个配置文件不需要是一个完整的MyBatis 配置。确定地来讲,任意环境,数据源和MyBatis 的事务管理器都会被忽略。SqlSessionFactoryBean 会创建它自己的,使用这些值定制MyBatis 的Environment 时是需要的。 如果MyBatis 映射器XML 文件在和映射器类相同的路径下不存在,那么另外一个需要配置文件的原因就是它了。使用这个配置,有两种选择。第一是手动在MyBatis 的XML 配置文件中使用部分来指定类路径。第二是使用工厂bean 的mapperLocations 属性。

mapperLocations 属性一个资源位置的list 。这个属性可以用来指定MyBatis 的XML 映射器文件的位置。它的值可以包含Ant 样式来加载一个目录中所有文件,或者从基路径下递归搜索所有路径。比如:

这会从类路径下加载在sample.config.mappers包和它的子包中所有的MyBatis映射器XML文件。

在容器环境管理事务中,一个可能需要的属性是transactionFactoryClass。我们可以在第四章(事务)中来查看有关部分。

第四章 事务

一个使用MyBatis-Spring 的主要原因是它允许MyBatis 参与到Spring 的事务中。而不是给MyBatis 创建一个新的特定的事务管理器,MyBatis-Spring 利用了Spring 中的

DataSourceTransactionManager 。

一旦Spring 的PlatformTransactionManager 配置好了,你可以在Spring 中以你通常的做

法来配置事务。@Transactional 注解和AOP (Aspect-Oriented Program ,面向切面编程,译者注)样式的配置都是支持的。在事务期间,一个单独的SqlSession 对象将会被创建和使用。当事务完成时,这个session 会以合适的方式提交或回滚。

一旦事务创建之后,MyBatis-Spring 将会透明的管理事务。在你的DAO 类中就不需要额外的代码了。

4.1 标准配置

要开启Spring 的事务处理,在你的Spring 的XML 配置文件中简单创建一个DataSourceTransactionManager 对象:

指定的DataSource 可以是你通常使用Spring 的任意JDBC DataSource 。这包含了连接池和通过JNDI 查找获得的DataSource 。

要注意,为事务管理器指定的DataSource 必须和用来创建

SqlSessionFactoryBean 的是同一个数据源,否则事务管理器就无法工作了。

4.2 容器管理事务

如果你正使用一个JEE 容器而且想让Spring 参与到容器管理事务(Container managed transactions ,CMT ,译者注)中,那么Spring 应该使用JtaTransactionManager 或它的容器指定的子类来配置。做这件事情的最方便的方式是用Spring 的事务命名空间: 在这种配置中,MyBatis 将会和其它由CMT 配置的Spring 事务资源一样。Spring 会自动使用任意存在的容器事务,在上面附加一个SqlSession 。如果没有开始事务,或者需要基于事务配置,Spring 会开启一个新的容器管理事务。 注意,如果你想使用CMT ,而不想使用Spring 的事务管理,你就必须配置

SqlSessionFactoryBean 来使用基本的MyBatis 的ManagedTransactionFactory ::

第五章使用SqlSession

在MyBatis中,你可以使用SqlSessionFactory来创建SqlSession。一旦你获得一个session之后,你可以使用它来执行映射语句,提交或回滚连接,最后,当不再需要它的时候,你可以关闭session。使用MyBatis-Spring之后,你不再需要直接使用SqlSessionFactory 了,因为你的bean可以通过一个线程安全的SqlSession来注入,基于Spring的事务配置来自动提交,回滚,关闭session。

5.1 SqlSessionSupport

SqlSessionDaoSupport是一个抽象的支持类,用来为你提供SqlSession。调用getSqlSession()方法你会得到一个线程安全的SqlSession,之后可以用于执行SQL方法,就像下面这样:

通常MapperFactoryBean是这个类的首选,因为它不需要额外的代码。但是,如果你需要在DAO中做其它非MyBatis的工作或需要具体的类,那么这个类就很有用了。

SqlSessionDaoSupport的配置和MapperFactoryBean很相似。它需要设置sqlSessionFactory或sqlSessionTemplate属性。这些被明确地设置或由Spring来自动装配。如果两者都被设置了,那么SqlSessionFactory是被忽略的。

假设UserMapperImpl是SqlSessionDaoSupport的子类,它可以在Spring中进行如下的配置:

5.2 SqlSessionTemplate

SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的,可以被多个DAO 所共享使用。

当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate 将会保证的SqlSession使用是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate实现了SqlSession,这就是说要对MyBatis进行简易替换,通常SqlSession. SqlSessionTemplate是被用来替代SqlSession的,因为MyBatis基本的

SqlSession 不能参与到Spring 的事务中而且是线程不安全的。相同应用程序中两个类之间

的转换可能会引起数据一致性的问题。

并不需要直接创建或使用SqlSessionTemplate 。很多情况下,MapperFactoryBean 内部使用一个模板,那就是所有需要的。当需要访问一个SqlSessionTemplate 时,它可以使用SqlSessionFactory 作为构造方法的参数来创建。

相似地,模板可以在Spring 的XML

文件中配置。

SqlSessionTemplate 有一个使用ExecutorType 作为参数的构造方法。这允许你用来

创建对象,比如,一个批量SqlSession ,但是使用了下列Spring 配置的XML 文件: 现在你所有的语句可以批量操作了,下面的语句就可以在DAO 中使用了。

注意如果所需的执行方法和默认的SqlSessionFactory 设置不同,这种配置风格仅能使用。对这种形式需要说明的是当这个方法被调用时,不能有一个存在使用不同

ExecutorType 运行的事务。也要保证在不同的事务中,使用不同执行器来调用

SqlSessionTemplate 时,不如

PROPAGATION_REQUIRES_NEW 或完全在一个事务外

面。

第六章MapperFactoryBean

为了代替手工使用SqlSessionDaoSupport或SqlSessionTemplate编写数据访问对象(DAO)的代码,MyBatis-Spring提供了一个动态代理的实现:MapperFactoryBean。这个类可以让你直接注入数据映射器接口到你的service层bean中。当使用映射器时,你仅仅如调用你的DAO一样调用它们就可以了,但是你不需要编写任何DAO实现的代码,因为MyBatis-Spring将会为你创建代理。

使用注入的映射器代码,在MyBatis,Spring或MyBatis-Spring上面不会有直接的依赖。MapperFactoryBean创建的代理控制开放和关闭session,翻译任意的DataAccessException 异常到Spring的异常中。此外,如果需要或参与到一个已经存在活动事务中,代理将会开启一个新的Spring事务。

6.1 创建

数据映射器接口可以按照如下做法加入到Spring中:

MapperFactoryBean创建的代理类实现了UserMapper接口,并且注入到应用程序中。因为代理创建在运行时环境中(Runtime,译者注),那么指定的映射器必须是一个接口,而不是一个实现类。

如果UserMapper有一个对应的MyBatis的XML映射器文件,如果XML文件在类路径的位置和映射器类相同时,它会被MapperFactoryBean自动解析。没有必要在MyBatis配置文件中去指定映射器,除非映射器的XML文件在不同的类路径下。可以参考SqlSessionFactoryBean的configLocation属性(第三章)来获取更多信息。

注意,当MapperFactoryBean需要SqlSessionFactory或SqlSessionTemplate时。这些可以通过各自的SqlSessionFactory或SqlSessionTemplate属性来设置,或者可以由Spring来自动装配。如果两个属性都设置了,那么SqlSessionFactory就会被忽略,因为SqlSessionTemplate是需要有一个session工厂的设置;那个工厂会由MapperFactoryBean.来使用。

6.2 注入映射器

你可以在business/service对象中直接注入映射器,和注入Spring的bean是一样的:

这个bean可以直接用在应用程序的逻辑中:

注意,在这段代码中没有SqlSession 或MyBatis

的引用。也不需要去创建,打开或关

闭session 。如果使用了Spring 的事务,那么当事务完成或由于错误回滚时,session 也会被提交。

6.3 自动配置

没有必要在Spring 的XML 配置文件中注册所有的映射器。相反,你可以使用一个

MapperScannerConfigurer ,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBeans 。

要创建MapperScannerConfigurer ,可以在Spring 的配置中添加如下代码:

basePackage 属性是让你为映射器接口文件设置基本的包路径。你可以使用分号或逗号

作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。 注意,没有必要去指定SqlSessionFactory 或SqlSessionTemplate ,因为

MapperScannerConfigurer 将会创建MapperFactoryBean ,之后自动装配。但是,如果你使

用了一个以上的DataSource (因此,也是多个的SqlSessionFactory ),那么自动装配可能会失效。这种情况下,你可以使用sqlSessionFactoryBeanName 或

sqlSessionTemplateBeanName 属性来设置正确的工厂/模板。

MapperScannerConfigurer 支持过滤由指定的创建接口或注解创建映射器。

annotationClass 属性指定了要寻找的注解名称。markerInterface 属性指定了要寻找的父

接口。如果两者都被指定了,加入到接口中的映射器会匹配两种标准。默认情况下,这两个属性都是null ,所以在基包中给定的所有接口可以作为映射器加载。 被发现的映射器将会使用Spring 对自动侦测组件(参考Spring 手册的3.14.4)默认的命名策略来命名。也就是说,如果没有发现注解,它就会使用映射器的非大写的非完全限定类名。但是如果发现了@Component 或JSR-330 @Named 注解,它会获取名称。注意你可以配置

annotationClass

到https://www.doczj.com/doc/3115571769.html,ponent ,

https://www.doczj.com/doc/3115571769.html,d (如果你使用JSE 6)或你自己的注解(肯定是自我注解)中,这样注解将会用作生成器和名称提供器。

第七章使用MyBatis API

使用MyBatis-Spring,你可以继续直接使用MyBatis的API。仅仅在Spring中使用SqlSessionFactoryBean来创建一个SqlSessionFactory,之后在你的代码中使用这个工厂。这种情况下你就不需要在代码中编写任何MyBatis-Spring的依赖了;仅在DAO中使用注入的SqlSessionFactory就行了。

注意这种用法不会参与到任何Spring的事务中。更进一步来说,如果SqlSession使用了DataSource,它也被Spring的事务管理器使用了,还有当前过程中的事务,那么这段代码就会抛出异常。出于这个原因,如果你必须使用这种样式的代码,你就不应该使用Spring 的事务数据库连接。

第八章 示例代码

你可以从Google Code 的MyBatis 资源库中检出示例代码。 ● Java 代码

● 配置文件

任何示例都可以使用JUnit 4来运行。

这个示例代码展示了一个典型的事务服务层从数据访问层获取领域对象的设计。 这个service 由FooService.java 和FooServiceImpl.java 实现类组成。这个Service 是事务性的,所以当任何方法被调用和提交并没有以抛出非检查的异常而结束时,事务都会启动。

要注意,事务特性是由

@Transactional 属性配置的。这不是必须的;任何其它由Spring 提供的方法都可以用来标定你的事务。

这个service 使用MyBatis 调用了一个数据访问层。这层由MyBatis 的映射器接口

UserMapper.java 和可选的实现UserMapperImpl.java 组成。

在所有的示例代码中,映射器都被注入到service bean 中,所以service 代码可以如下编写: 在这个手册中,数据库访问层已经实现了使用不同技术来实现。SampleBasicTest 会展示给你推荐的和最基于MapperFactoryBean 最简单的配置。SampleAutoTest 展示了一个基于组件扫描和自动装配的最小XML 配置。SampleSqlSessionTest 将会给你展示如何使用Spring 管理的SqlSession .来手工编写一个DAO 。最后SampleBatchTest 将会给你展示如何使用批量操作的SqlSession 。可以在实践中来看看这些不同的applicationContext.xml 文件来使用MyBatis-Spring 。

mybatis面试题

1、Mybatis基础: #{...} 和${...} 的区别 MyBatis将#{…} 解释为JDBC prepared statement 的一个参数标记。而将${…} 解释为字符串替换。理解这两者的区别是很有用的, 因为在某些SQL语句中并不能使用参数标记(parameter markers)。 比如,我们不能在表名(table name)的位置使用参数标记。 假设有下面的代码: 01.Mapparms = new HashMap(); 02.parms.put("table", "foo"); // 表名 03.parms.put("criteria", 37); // 查询过滤条件 04.List rows = mapper.generalSelect(parms); 01. MyBatis生成的SQL语句(prepared statement)如下所示: 01.select * from foo where col1 = ? 重要提示: 请注意,使用$ {…} (字符串替换)时可能会有SQL注入攻击的风险。另外,字符串替换在处理复杂类型也可能常常发生问题,如日期类型。由于这些因素,我们建议您尽可能地使用#{…} 这种方式。 要使用LIKE语句该怎么写? 2、有两种使用LIKE的方法。(推荐使用)第一种方法是,在Java代码中添加SQL通配符。 示例一: 01.StringwildcardName = "%Smi%"; 02.List names = mapper.selectLike(wildcardName); 01.

企业级JAVA高级开发技术实战

关于举办企业级JAVA高级开发技术实战 培训班的通知 一、培训收益 通过此次课程培训,可使学习者获得如下收益: 1.掌握JavaSE的异常处理方法; 2.掌握多线程基础知识; 3.掌握IO系统、网络编程、Java反射机制、JVM性能调优; 4.理解JavaEE,EJB、JMS,Java语言的高级特征; 5.了解GoF的设计模式、Spring AOP、WebService与CXF。 二、培训特色 1.理论与实践相结合、案例分析与行业应用穿插进行; 2.专家精彩内容解析、学员专题讨论、分组研究; 3.通过全面知识理解、专题技能和实践结合的授课方式。

四、授课专家 刘老师有15年JAVA开发经验,9年授课经验. 精通J2EE多层架构和多种设计模式,熟悉Struts、MyBatis、Hibernate、Spring、Spring MVC、Android、H5、Jquery Mobile、AngularJS、Bootstrap等多种开源框架, 对源码有一定的理解. 熟悉 WebLogic, JBoss 容器并发集群的使用, 熟悉WebService、CXF、RESFul、UML、SVN、EasyUI、Flex、Lucene 等技术。长期专注于J2EE系统的分析与设计,亲身参与多个J2EE项目研发和应用系统升级,并主导系统架构设计,有着丰富的系统分析设计工作经验 张老师天津大学软件工程硕士,10多年的IT领域相关技术研究和项目开发工作,在长期软件领域工作过程中,对软件企业运作模式有深入研究,熟悉软件质量保障标准ISO9003和软件过程改进模型CMM/CMMI,在具体项目实施过程中总结经验,有深刻认识。通晓多种软件设计和开发工具。对软件开发整个流程非常熟悉,能根据项目特点定制具体软件过程,并进行项目管理和监控,有很强的软件项目组织管理能力。对C/C++ 、HTML 5、Hadoop、java、java EE、android、IOS、大数据、云计算有比较深入的理解和应用,具有较强的移动互联网应用需求分析和系统设计能力,熟悉Android框架、IOS框架等技术,了解各种设计模式,能在具体项目中灵活运用。 龚老师企业级J2EE专家,博士,北京理工大学软件研究所计算机应用技术专业。在软件行业工作近二十年,近50多个大中型项目的主持、管理、开发经验。主要学术成果: 近年来先后在国内外重要刊物发表论文20多篇,多篇被EI收录,出版著作4部。参与完成自然科学基金项目2项,参与纵向课题5项,主持横向科研项目5项。

mybatis中文版教程

MyBatis Spring1.0.0-RC3 参考文档 MyBatis 社区(https://www.doczj.com/doc/3115571769.html,) Copyright ? 2010 本文档的拷贝仅允许您个人使用或分发给其他用户,但是不能收取任何费用,后期的发布无论是印刷版或电子版,也会进行版权声明。 本文档由南磊(nanlei1987@https://www.doczj.com/doc/3115571769.html,)翻译

目录 第一章介绍 (3) 1.1 整合动机 (3) 1.2 要求 (3) 1.3 感谢 (3) 第二章入门 (4) 2.1 安装 (4) 2.2 快速创建 (4) 第三章SqlSessionFactoryBean (6) 3.1 创建 (6) 3.2 属性 (6) 第四章事务 (8) 4.1 标准配置 (8) 4.2 容器管理事务 (8) 第五章使用SqlSession (9) 5.1 SqlSessionSupport (9) 5.2 SqlSessionTemplate (9) 第六章MapperFactoryBean (11) 6.1 创建 (11) 6.2 注入映射器 (11) 6.3 自动配置 (12) 第七章使用MyBatis API (13) 第八章示例代码 (14)

第一章介绍 1.1 整合动机 正如第二版,Spring仅支持iBatis2。那么我们就想将MyBatis3的支持加入到Spring3.0(参考Spring的Jira的问题)中。不幸的是,Spring 3.0的开发在MyBatis 3.0官方发布前就结束了。因为Spring开发团队不想发布一个基于非发行版的MyBatis的整合支持,那么Spring 官方的支持就不得不等到至少3.1版本了。要在Spring中支持MyBatis,MyBatis社区认为现在应该是自己团结贡献者和有兴趣的人一起来开始进行Spring和MyBatis整合的时候了。 这个小类库就来创建丢失的粘贴Spring和MyBtatis这两个流行框架的胶水。减少用户不得不来配置MyBatis和Spring 3.X上下文环境的样板和冗余代码。它还透明地增加了Spring 对MyBatis事务的支持。 1.2 要求 在开始阅读本手册之前,很重要的一点是你要熟悉Spring和MyBatis这两个框架还有和它们有关的术语,本手册不会提供二者的背景内容,基本安装和配置教程。 和MyBatis一样,MyBatis-Spring也需要Java 5或更高版本。 1.3 感谢 非常感谢那些使得本项目成为现实的人们(按字母顺序排序)。Eduardo Macarron,Hunter Presnall和Putthibong Boonbong的编码工作,测试和文档修改;Andrius Juozapaitis,Giovanni Cuccu,Raj Nagappan和Tomas Pinos的贡献;而Simone Tripodi发现了这些人并把他们带入项目之中。没有他们的努力,这个项目是不可能存在的。

mybatis教程从入门到精通

mybatis教程从入门到精通 什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到sessionfactory. 2. 由sessionfactory 产生session 3. 在session 中完成对数据的增删改查和事务提交等. 4. 在用完之后关闭session 。 5. 在java 对象和数据库之间有做mapping 的配置文件,也通常是xml 文件。 mybatis实战教程(mybatis in action)之一:开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。 首先建立一个名字为MyBaits 的dynamic web project 1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将mybatis- 3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到web工程的lib 目录. 3. 创建mysql 测试数据库和用户表,注意,这里采用的是utf-8 编码 创建用户表,并插入一条测试数据 程序代码程序代码 Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong'); 到此为止,前期准备工作就完成了。下面开始真正配置mybatis项目了。 1. 在MyBatis 里面创建两个源码目录,分别为src_user,test_src, 用如下方式建立,鼠标右键点击JavaResource. 2. 设置mybatis 配置文件:Configuration.xml, 在src_user目录下建立此文件,内容如下:

MyBatis学习 之三动态SQL语句

MyBatis学习之三动态SQL语句 三、动态SQL语句 MyBatis学习之一、MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习之二、SQL语句映射文件(1)resultMap MyBatis学习之二、SQL语句映射文件(2)增删改查、参数、缓存 MyBatis学习之三、动态SQL语句 MyBatis学习之四、MyBatis配置文件 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息。使用Oracle的序列、mysql的函数生成Id。这时我们可以使用动态sql。 下文均采用mysql语法和函数(例如字符串链接函数CONCAT)。 3.1 selectKey 标签 在insert语句中,在Oracle经常使用序列、在MySQL中使用函数来自动生成插入表的主键,而且需要方法能返回这个生成主键。使用myBatis的selectKey标签可以实现这个效果。 下面例子,使用mysql数据库自定义函数nextval('student'),用来生成一个key,并把他设置到传入的实体类中的studentId属性上。所以在执行完此方法后,边可以通过这个实体类获取生成的key。 select nextval('student') INSERT INTO STUDENT_TBL(STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, STUDENT_PHOTO, CLASS_ID, PLACE_ID) V ALUES (#{studentId}, #{studentName}, #{studentSex}, #{studentBirthday}, #{studentPhoto, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, #{classId}, #{placeId}) 调用接口方法,和获取自动生成key StudentEntity entity = new StudentEntity(); entity.setStudentName("黎明你好"); entity.setStudentSex(1); entity.setStudentBirthday(DateUtil.parse("1985-05-28")); entity.setClassId("20000001"); entity.setPlaceId("70000001"); this.dynamicSqlMapper.createStudentAutoKey(entity); System.out.println("新增学生ID: " + entity.getStudentId()); selectKey语句属性配置细节: 属性描述取值keyProper ty selectKey 语句生成结果需要设置的属性。 resultTyp e 生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int 类型。 order 1:BEFORE,会先选择主键,然后设置keyProperty,再执行insert 语句; 2:AFTER,就先运行insert 语句再运行selectKey 语句。 BEFORE AFTER

mybatis-3-mapper

>

黑马程序员mybatis教程第二天:延迟加载

延迟加载 什么是延迟加载 resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。 需求: 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。 延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。 使用association实现延迟加载 需求 查询订单并且关联查询用户信息 mapper.xml 需要定义两个mapper的方法对应的statement。 1、只查询订单信息 SELECT * FROM orders 在查询订单的statement中使用association去延迟加载(执行)下边的satatement(关联查询用户信息) 2、关联查询用户信息 通过上边查询到的订单信息中user_id去关联查询用户信息

使用UserMapper.xml中的findUserById 上边先去执行findOrdersUserLazyLoading,当需要去查询用户的时候再去执行findUserById,通过resultMap的定义将延迟加载执行配置起来。 延迟加载resultMap 使用association中的select指定延迟加载去执行的statement的id。

MyBatis基础知识

1、#{}和${}的区别是什么? #{}是预编译处理,${}是字符串替换。 #{}是sql的参数占位符,Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值; ${}是Properties文件中的变量占位符,Mybatis在处理${}时,就是把${}替换成变量的值。使用#{}可以有效的防止SQL注入,提高系统安全性。 2、MyBatis是如何进行分页的? Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 3、在mapper中如何传递多个参数? 第一种:使用#{0},#{1}... mapper层: public selectUser(String username, String password); mapper.xml层: //对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二参数,更多参数一致往后加即可。 第二种:使用@param注解: mapper层: public selectUser(@param("username")String username,@param("password")String password); mapper.xml层: 4、Mybatis都有哪些Executor执行器?它们之间的区别是什么? Mybatis有三种基本的Executor执行器,SimpleExecutor、ReuseExecutor、BatchExecutor。 SimpleExecutor:每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象。

Mybatis3.1实战

Mybatis3.1实战 1、前言 (2) 2、什么是mybatis (2) 3、Mybatis入门实例 (2) 4、Mybatis中的增、删、改、查 (8) 5、Mybatis新特性介绍 (10) 6、mybatis-config.xml中的元素介绍 (11) 7、xml映射文件及用法 (18) 8、Mybatis参数传递 (20) 9、基于注解的sql语句 (21) 10、动态sql语句 (22) 11、mybatis中的一对多、一对一、多对多 (24) 12、自定义类型处理器 (28) 13、Spring3.1+springmvc+mybatis3.1集成 (31) 备注 (40) Like模糊查询 (40) 排序 (40) if元素中的条件语句 (40)

1、前言 随着开发团队转投Google Code旗下,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 (Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。 3、Mybatis入门实例 在maven中加入mybatis、mysql、junit的依赖包: junit junit 4.10 test org.mybatis mybatis 3.1.1

SpringMVC+Spring+Mybatis框架配置详细步骤(eclipse普通版)

SSI框架搭建 SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6 编号:SSI-SMVC3-S3-I3 版本:V1.0 级别:公开 编写时间:2016-02-17

目录 1导言 (1) 1.1目的 (1) 1.2范围 (1) 1.3说明 (1) 2搭建SpringMVC (2) 2.1搭建所需jar包 (2) 2.2其他依赖包 (3) 2.3搭建步骤 (4) 2.3.1创建项目 (4) 2.3.2导入jar包 (6) 2.3.3配置web.xml (7) 2.3.4配置spring-servlet.xml (9) 2.3.5配置applicationContext.xml (10) 2.3.6配置log4j.properties (10) 3整合mybatis (10) 3.1整合所需jar包 (10) 3.2其他依赖包 (11) 3.3整合步骤 (11) 3.3.1导入jar包 (11) 3.3.2配置config.properties (11) 3.3.3配置spring-dataSource.xml (12) 3.3.4 配置applicationContext.xml (15) 3.3.5配置mybatis-config.xml (16) 3.3.6创建实体model (17) 3.3.7创建实例化dao (19) 3.3.8 创建业务服务service (21) 3.3.9创建控制层controller (23)

3.3.10页面代码 (28) 3.3.11启动项目 (37)

1导言 1.1 目的 本文档是根据个人的工作经验搭建的轻量级SSI框架,也是实际应用中比较全面的基础框架,用于指导SSI框架初学者学习搭建SSI框架,希望能给各位使用者提供帮助,同时也希望朋友们尽量去帮助其他人。 1.2 范围 本次框架搭建的版本是SpringMVC3.1.2+Spring3.1.2+Mybatis3.2.6,数据库采用的是mysql,在eclipse开发工具下搭建直接搭建的web项目,页面采用的是h5,ajax实现数据访问,如果页面为jsp等,则修改controller的返回类型即可。 1.3 说明 本文档是个人总结的经验,仅供参考学习,同时欢迎朋友们一起沟通学习,文档中会对使用的jar做详细解说,对配置的过程使用图文说明,因为SSI博大精深,很多知识在搭建过程中没有使用到,只是一个基础框架的搭建,能测试通过就可以,所以对于高要求的开发,需要自己添加jar、增加方法和配置,同时文档中出现的纰漏希望朋友们等指正。 开发环境eclipse-jee-indigo-SR1-win32-dic,Tomcat7.0,JDK1.7,mysql。

mybatis实战教程之四:实现关联数据的查询

mybatis实战教程(mybatis in action)之四:实现关联数据的查询 有了前面几章的基础,对一些简单的应用是可以处理的,但在实际项目中,经常是关联表的查询,比如最常见到的多对一,一对多等。这些查询是如何处理的呢,这一讲就讲这个问题。我们首先创建一个Article 这个表,并初始化数据. 程序代码 Drop TABLE IF EXISTS `article`; Create TABLE `article` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) NOT NULL, `title` varchar(100) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- ---------------------------- -- 添加几条测试数据 -- ---------------------------- Insert INTO `article` VALUES ('1', '1', 'test_title', 'test_content'); Insert INTO `article` VALUES ('2', '1', 'test_title_2', 'test_content_2'); Insert INTO `article` VALUES ('3', '1', 'test_title_3', 'test_content_3'); Insert INTO `article` VALUES ('4', '1', 'test_title_4', 'test_content_4'); 你应该发现了,这几个文章对应的userid都是1,所以需要用户表user里面有id=1的数据。可以修改成满足自己条件的数据.按照orm的规则,表已经创建了,那么肯定需要一个对象与之对应,所以我们增加一个Article 的class 程序代码 package com.yihaomen.mybatis.model;

SSM基础框架搭建(SpringMVC+Spring+Mybatis)

SSM基础框架搭建(SpringMVC+Spring+Mybatis) SSM框架简述 到现在用了SSM框架也有一段时间了,对于基础的使用已经基本习惯,这段时间也多多少少搭了很多遍基础框架,当然每一次的搭建都会比原先搭建的东西更多些,也会更加完善,我相信大家也会从搭建的过程中成长去学到很多东西,SSM框架网上也有很多教程,不过我相信每个编写以及阅读的人总会从相似的文章中学到不同的东西. SSM框架基础概念 Spring 这里不得不说Spring非常强大,Spring拥有这IOC(控制反转,依赖注入)和AOP(面向切面编程)这两个强大的功能,这两个功能使框架足够的解耦,通过工厂模式和bean的配置完成对象的注入并且由bean生成的对象是单例的 SpringMVC SpringMVC分离了控制器,验证器,Servlet分发器,模型对象等 Mybatis Mybatis解除了程序与代码的耦合度,在一定程度上简化了sql的管理,只需要在XML中进行相应SQL的编写即可,Mybatis提供了相应的映射,配置起来更加容易 SSM基础框架搭建 这里就直接介绍SSM框架如何搭建了,至于环境配置和MAVEN项目的创建可以参考我的博客,也可以参考环境搭建,MAVEN项目搭建,下面开始搭建的教程,可能是对于上文链接博客的整合的完善与一些细微错误的纠正吧。 引入相关的JRA包 4.0.2.RELEASE 3.2.6 1.7.7 1.2.17 junit junit 4.11

Mybatis-3.3.0官方文档-中文.pdf

来获取。

Copyright ? 2010–2015 https://www.doczj.com/doc/3115571769.html,. All rights reserved.

XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务范围和控制方式的事务管理器(TransactionManager)。XML 配置文件的详细内容后面再探讨,这里先给出一个简单的示例: 当然,还有很多可以在XML 文件中进行配置,上面的示例指出的则是最关键的部分。要注意 XML 头部的声明,用来验证 XML 文档正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则是包含一组 mapper 映射器(这些 mapper 的XML 文件包含了 SQL 代码和映射定义信息)。 不使用 XML 构建 SqlSessionFactory 如果你更愿意直接从 Java 程序而不是 XML 文件中创建 configuration,或者创建你自己的 configuration 构建器,MyBatis 也提供了完整的配置类,提供所有和 XML 文件相同功能的配置项。

注意该例中,configuration 添加了一个映射器类(mapper class)。映射器类是 Java 类,它们包含 SQL 映射语句的注解从而避免了 XML 文件的依赖。不过,由于 Java 注解的一些限制加之某些 MyBatis 映射的复杂性,XML 映射对于大多数高级映射(比如:嵌套Join 映射)来说仍然是必须的。有鉴于此,如果存在一个对等的 XML 配置文件的话,MyBatis 会自动查找并加载它(这种情况下,BlogMapper.xml 将会基于类路径和 BlogMapper.class 的类名被加载进来)。具体细节稍后讨论。 从 SqlSessionFactory 中获取 SqlSession 既然有了 SqlSessionFactory ,顾名思义,我们就可以从中获得 SqlSession 的实例了。SqlSession 完全包含了面向数据库执行SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。例如: 诚然这种方式能够正常工作,并且对于使用旧版本 MyBatis 的用户来说也比较熟悉,不过现在有了一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口(比如说BlogMapper.class),你现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。 例如: 现在我们来探究一下这里到底是怎么执行的。

javaweb开发要学习的所有技术和框架总结:

学习javaweb开发要学习的技术和框架总结: 前言:当初想学习javaweb开发的时候,希望能够全方面地学习(这样找工作时就胸有成足了)。但是对这个根本不理解,又不认识从事这方面的熟人,所以学习起来无从下手。经过了一年的‘死’学习,从网上,从书本,从视频里面深入了解了java。想从事java的朋友,只要把这些技术全学会了,哪就业肯定没有问题了。 前端技术: HTML, CSS, JA V ASCRIPT, JQUERY, AJAX HTML “超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。 超文本标记语言的结构包括“头”部分(外语:Head)、和“主体”部分(外语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。 CSS 级联样式表是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。 JavaScript JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。 jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多)。jQuery在2006年1月由美国人John Resig在纽约的barcamp发布,吸引了来自世界各地的众多JavaScript高手加入,由Dave Methvin率领团队进行开发。如今,jQuery已经成为最流行的javascript库,在世界前10000个访问最多的网站中,有超过55%在使用jQuery。

mybatis入门教程(一)(超简单)

mybatis 第一天mybatis的基础知识 课程安排: mybatis和springmvc通过订单商品案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理(掌握) mybatis入门程序 用户的增、删、改、查 mybatis开发dao两种方法: 原始dao开发方法(程序需要编写dao接口和dao实现类)(掌握) mybaits的mapper接口(相当于dao接口)代理开发方法(掌握)mybatis配置文件SqlMapConfig.xml mybatis核心: mybatis输入映射(掌握) mybatis输出映射(掌握) mybatis的动态sql(掌握) 第二天:高级知识 订单商品数据模型分析 高级结果集映射(一对一、一对多、多对多) mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程 1对原生态jdbc程序中问题总结 1.1环境 java环境:jdk1.7.0_72 eclipse:indigo mysql:5.1 1.2创建mysql数据

sql_table.sql:记录表结构 sql_data.sql:记录测试数据,在实际企业开发中,最后提供一个初始化数据脚本 1.3jdbc程序 使用jdbc查询mysql数据库中用户表的记录。 创建java工程,加入jar包: 数据库驱动包(mysql5.1) 上边的是mysql驱动。 下边的是oracle的驱动。 程序代码: 1.4问题总结 1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。 设想:使用数据库连接池管理数据库连接。 2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。 设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。 3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。设想:将sql语句及占位符号和参数全部配置在xml中。

JavaEE测试题带答案教学提纲

1.在Java中的变量命名规范中,下面命名正确两项的是( ) (选择两项) a)¥money b)$int c)int d)*i 2.绘制流程图时,下面()代表判断和分支。(选择一项) a)矩形 b)椭圆 c)菱形 d)圆形 3.在Java环境中给出如下代码,编译运行的输出结果是()。 public class Test{ intx=1; inty=2; public int cal(intx,inty){ int z=x+y; return z; } public static void main(String args[]){ Test d = newTest(); z=d.cal(d.x,d.y); System.out.println(z); } }(选择一项) A) 3 B) 0

C) 编译错误 D) 编译通过,但运行时出错 4.下列选项中关于枚举说法错误的是()。(选择一项) a)枚举类型是从JavaSE5.0开始引入的一种新类型 b)枚举类型使用关键字enum定义 c)枚举是指由一组固定的常量组成的类型 d)在枚举中,除了可以定义枚举常量以外不能出现其他成员 5. 在Java中,以下关于多态说法错误的是()。(选择一项) a)实现多态的一个前提是要有继承关系 b)将一个父类的引用指向一个子类对象,要进行强制类型转换 c)父类引用变量指向其子类对象是实现多态的一个条件 d)使用多态可以提高代码的可扩展性和可维护性 6. 在Java中,如下代码段的输出结果为()。 Strings="hello"; s.substring(2,4); System.out.println(s.length());(选择一项) a) 5 b) 2 c) 4 d) 3 7. 在Java中,如下代码的输出结果是()。 public static void main(String[]args){ char c[]={'1','2','3','4'};

文本预览
相关文档 最新文档