一、什么是Mybatis
-
mybatis:是一种简化和实现了java数据化持久层(persistence layer)的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单的API和数据交互方式。
-
mybatis的背景:MyBatis的前身是iBATIS,iBATIS于2002年由ClintonBegin创建。MyBatis3是iBATIS的全新设计,支持注解和Mapper(映射器)。
- MyBatis流行的主要原因在于它的简单性和易使用性。
-
在Java应用程序中,数据持久化层涉及到的工作有:
- 将从数据库查询到的数据生成所需要的Java对象;
- 将Java对象中的数据通SQL持久化到数据库中。
- 优点:MyBatis通过抽象底层的JDBC代码,自动化SQL结果集产生Java对象、Java对象的数据持久化数据库中的过程使得对SQL的使用变得容易。
-
iBATIS一词来源于internet和abatis的组合,是一个在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。
-
ibatis的官网 http://ibatis.apache.org/ 进去官网会看到下面提示:
-
apache ibatis is retired at the apache software foundation (2010/06/16)
-
the original project team has moved to mybatis hosted at google code. see http://www.mybatis.org/ for more.
-
然而http://www.mybatis.org/这个地址一直处于打不开状态…
-
但是我们最终是可以在github中找到mybatis的相关下载的:
mybatis在github中的地址 https://github.com/mybatis/mybatis-3 最新版本的mybatis的下载地址 https://github.com/mybatis/mybatis-3/releases doc文档 http://www.mybatis.org/mybatis-3/
-
-
-
Mybatis的优点:
-
1。消除了大量的JDBC冗余代码:java通过JDBC的API操作关系型数据库,需要大量的底层代码完成操作数据库,mybatis简化了JDBC的大量底层代码
例如: 第一步:在SQLMapper映射文件(自定义类型接口的xml文件)中完成对sql语句的配置 <insert id="insertStudent" parameterType="Student"> INSERT INTO STUDENTS(ID,NAME,EMAIL) VALUES(#{ id},#{ name},#{ email}) </insert> id:和自定义接口中的方法名保持一致 parameterType:指定自定义pojo类 第二步:创建一个StudentMapper接口 public interface StudentMapper{ void insertStudent(Student student); } 第三步:编写Java代码完成插入操作 SqlSession session = getSqlSessionFactory().openSession(); StudentMapper mapper = session.getMapper(StudentMapper.class); mapper.insertStudent(student);
-
2.较低的学习曲线:MyBatis能够流行的首要原因之一在于它学习和使用起来非常简单,开发人员很熟悉Java和SQL,他们会发现MyBatis入门非常简单。
-
3.更好的和数据库协同工作:Mybtis相比于其他框架(例如:hibernate),更加灵活(开发人员自主修改sql语句)
- hibernate:需要将实体类以及属性完全映射到数据表,使得修改比较麻烦
-
4.Mybtis接受sql语句:
- 类比于其他ORM框架,例如hibernate,hibernate框架推荐让框架自动生成sql语句,这样以来就不能完全利用到数据库的一些特有的特性。
- mybatis框架则是推荐程序自己控制sql语句,这样就可以充分利用数据库特有的特性并且可以准备自定义的查询。
-
5.提供了与Spring框架的集成支持
- MyBatis提供了与Spring框架的集成支持,这将进一步简化MyBatis的使用
-
6.提供了与第三方缓存类库的集成支持
- MyBatis有内建的SqlSession级别的缓存机制,用于缓存Select语句查询出来的结果。除此之外,MyBatis提供了与多种第三方缓存类库的集成支持,如EHCache,OSCache等。
-
7.Mybatis支持数据库连接池,不必为每次连接创建数据库连接
-
8.Mybatis提供了内建的缓存机制,在SqlSession级别1提供了对Sql查询结果的缓存
-
二、使用Mybatis
-
数据库表对应的实体类pojo类:动态代理技术反射去创建newInstance对应对象,需要无参构造器
-
Mybatis的jar包:
- Mybatis核心jar包:mybatis-3.x.x.jar
- E:\杰普实训\第二阶段\mybatis\10-12 Day1\day1\mybatis-3.4.6(包含mybatis的使用文档mybatis-3.4.6.pdf)
- 其他依赖jar包:log4j.jar,ojdbc8.jar等等(在下载的压缩包中可以找到)
- E:\杰普实训\第二阶段\mybatis\10-12 Day1\day1\mybatis-3.4.6\lib
- Mybatis核心jar包:mybatis-3.x.x.jar
-
Mybatis的框架的xml配置文档:
-
第一种:Mybatis框架文档:包含重要的两项environments,mappers标签
-
名字固定:mybatis-config.xml
-
位置一般在java project项目的src下面
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 两种dtd约束路径 1.下载dtd约束文件到本地 "-//mybatis.org//DTD Config 3.0//EN"(在preferences中XML catalog中添加约束),需要添加到eclipse中,指定mybatis-3-config.dtd文件 2.通过url访问服务器上的dtd约束 "http://mybatis.org/dtd/mybatis-3-config.dtd" <configuration> <typeAliases> <typeAlias alias="Student" type="com.briup.pojo.Student" /> </typeAliases> <!--数据库环境,连接数据库四要素,可以配置多个数据库环境(例如:不同的阶段使用不同的数据库,开发,测试)--> <!--开发阶段--> <environments default="development"> <environment id="development"> <transaction Manager type="JDBC" /> <dataSource type="POOLED"> <!-- <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> --> <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" /> <property name="username" value="test" /> <property name="password" value="test" /> </dataSource> </environment> </environments> <!--自定义类的映射配置文件--> <mappers> <mapper resource="com/briup/pojo/StudentMapper.xml" /> </mappers> </configuration>
-
-
第二种:Mybatis的映射文件:映射接口名.xml对应自定义接口
-
名称固定:映射接口名.xml
-
位置:一般放在和映射接口同一包下
-
对应实体类的表的数据库操作sql语句(增,删,改,查)
- #{}预编译处理: Mybatis在处理#{}时,会将sql中的#{}替换为?号 ,防治SQL注入。
- 比如说网页表单提交将参数,网页链接存在参数传递,后台并没有对用户的输入进行过滤,导致用户的输入直接被SQL解释器执行。SQL注入的产生条件: 有参数传递 ; 参数值带入数据库查询并且执行
- 是
- #{}预编译处理: Mybatis在处理#{}时,会将sql中的#{}替换为?号 ,防治SQL注入。
-
-