Java三大框架之MyBatis详
MyBatis本是Apache的一个开源项目iBatis,年这个项目由ApacheSoftwareFoundation迁移到了GoogleCode,并且改名为MyBatis。年11月迁移到GitHub。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQLMaps和DataAccessObjects(DAOs)。
MyBatis的作用MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(PlainOrdinaryJavaObject,普通的Java对象)映射成数据库中的记录。
持久化是什么持久化就是把数据存在磁盘而不是内存:
程序产生的数据首先都是在内存。
内存是不可靠的,断电数据就没了。
那可靠的存储地方是哪里,硬盘、U盘、光盘等。
我们的程序在运行时说的持久化通常就是指将内存的数据存在硬盘。
硬盘用哪些地方能存?数据库文件、XML文件、反正你将来能将数据读出来的文件都行。
说白了:持久化就是将数据从瞬时态转化为持久态,长久保存。
持久层是什么业务是需要操作数据的
数据是在磁盘上的
具体业务调用具体的数据库操作,耦合度太高,复用性太差
将操作数据库的代码统一抽离出来,自然就形成了介于业务层和数据库中间的独立的层
MyBatis的优缺点1.SQL语句与代码分离,存放于XML配置文件中:
优点:便于维护管理,不用在Java代码中找这些语句;
缺点:JDBC方式可以用打断点的方式调试,但是MyBatis不能,需要通过Log4j日志输出日志信息帮助调试,然后在配置文件中修改。
2.用逻辑标签控制动态SQL的拼接:
优点:用标签代替编写逻辑代码;
缺点:拼接复杂SQL语句时,没有代码灵活,拼写比较复杂。不要使用变通的手段来应对这种复杂的语句。
3.查询的结果集与Java对象自动映射:
优点:保证名称相同,配置好映射关系即可自动映射或者,不配置映射关系,通过配置列名=字段名也可完成自动映射。
缺点:对开发人员所写的SQL依赖很强。
4.编写原生SQL:
优点:接近JDBC,比较灵活。
缺点:对SQL语句依赖程度很高;并且属于半自动,数据库移植比较麻烦,比如mysql数据库编程Oracle数据库,部分的SQL语句需要调整。
5.最重要的一点,使用的人多!公司需要!但是因为用了反射,效率会下降,所有有些公司会使用原生的JDBC。
给初学者的建议对于一些初学框架的朋友,看完以上概念和介绍可能还是懵懵的状态,对其中的概念难以理解。其实不用把框架想的很难很复杂(确实有点复杂),框架就是别人给你写好的类和接口,就像jar包一样,通过别人写好的类和接口实现自己的功能。框架的作用在于节省你写简单重复代码的时间,从而更好的面向对象开发、缩短开发周期。当你使用得多了自然就会慢慢理解其中的概念了。
正式学习MyBatis数据库MyBatis是持久层的框架,所以我们需要先准备一个相应的数据库,比如创建一个名为SSM的数据库,里面有一张user表,表里有三个参数为主键ID、username、password。
我的数据库username和password都是用的root,以下配置也是以这个为准,需要改动的朋友自行修改。
CREATEDATABASE`ssm`;USE`ssm`;DROPTABLEIFEXISTS`user`;CREATETABLE`user`(`id`int(20)NOTNULL,`username`varchar(30)DEFAULTNULL,`password`varchar(30)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8;insertinto`user`(`id`,`username`,`password`)values(1,张三,),(2,李四,abcdef),(3,小五,);工程环境搭建及配置
由于当时我要做的是几个工程的整合,所以我们采用父子工程来新建工程,建议大家也使用这个方法(如果在公司这是经常要用的)。
1.新建一个名为ssm_study的Maven工程,然后把src文件夹删除。
2.然后再新建一个Maven模块名为mybatis:
项目总体预览:
3.在父工程里进行版本约束,也就是在父工程的pom.iml配置版本信息(上图第二个)加入以下配置,插件用到了Lombok。
modelVersion4.0.0/modelVersiongroupIdorg.example/groupIdartifactIdssm-study/artifactIdversion1.0-SNAPSHOT/versionmodulesmodulemybatis/module/modulespackagingpom/packagingpropertiesjunit.version4.12/junit.versionmybatis.version3.5.3/mybatis.versionmysql-connector-java.version8.0.21/mysql-connector-java.versionlombok.version1.16.18/lombok.versionhikari.version2.1/hikari.version/propertiesdependencyManagementdependencies!--单元测试--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion{junit.version}/versionscopetest/scope/dependency!--mybatis核心--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion{mybatis.version}/version/dependency!--数据库确定--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion{mysql-connector-java.version}/versionscoperuntime/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion{lombok.version}/versionscopeprovided/scope/dependencydependencygroupIddev.tuxjsql/groupIdartifactIdhikaricp-cp/artifactIdversion{hikari.version}/version/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.12/version/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-nop/artifactIdversion1.7.30/version/dependency/dependencies/dependencyManagement
各个配置的作用
mybatis-config.xml是系统核心配置文件,核心配置文件主要配置MyBatis一些基础组件和加载资源,核心配置文件中的元素常常能影响MyBatis的整个运行过程。
能配置的内容如下,顺序不能乱:
properties是一个配置属性的元素
settings设置,MyBatis最为复杂的配置也是最重要的,会改变MyBatis运行时候的行为
typeAliases别名(在TypeAliasRegistry中可以看到MyBatis提供了许多的系统别名)
typeHandlers类型处理器(比如在预处理语句中设置一个参数或者从结果集中获取一个参数时候,都会用到类型处理器,在TypeHandlerRegistry中定义了很多的类型处理器)
objectFactory对象工厂(MyBatis在构建一个结果返回的时候,会使用一个ObjectFactory去构建pojo)
plugins插件
environments环境变量
environment环境变量
transactionManager事务管理器
dataSource数据源
databaseIdProvider数据库厂商标识
mappers映射器
4.子工程pom.iml配置,数据源用到了hikari,不懂的可以百度一下这里不多赘述。
dependenciesdependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactId/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependencydependencygroupIddev.tuxjsql/groupIdartifactIdhikaricp-cp/artifactId/dependency!--Hikari的日志实现--dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactId/dependencydependencygroupIdorg.slf4j/groupIdartifactIdslf4j-nop/artifactId/dependency/dependencies!--处理资源被过滤问题--buildplugins!--下面这段是从网上粘贴的--plugingroupIdorg.apache.maven.plugins/groupIdartifactIdmaven-surefire-plugin/artifactIdversion2.12.4/versionconfigurationskipTeststrue/skipTests/configuration/plugin/pluginsresourcesresourcedirectorysrc/main/java/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resourceresourcedirectorysrc/main/resources/directoryincludesinclude**/*.properties/includeinclude**/*.xml/include/includesfilteringfalse/filtering/resource/resources/build
5.编写MyBatis核心配置文件:mybatis-config.xml。
configurationenvironmentsdefault="development"environmentid="development"transactionManagertype="JDBC"/!--设置Hikari的路径,用于寻找到对应的配置--dataSourcetype="
转载请注明:http://www.sonphie.com/jbzl/14472.html