恰是一种蜕变

博客园 首页 联系 订阅 管理
1、MVC
它是一个设计模式,它强制性的使应用程序的输入、处理和输出分开,它的是三个核心部件是:
模型、视图、控制器
 
2、什么是ORM
ORM(Object/Relational Mappering)即对象/关系映射,是一种数据持久化技术,它在对象模型和
关系模型数据库之间建立起对应关系,并且提供了一种机制,通过JavaBean对象去操作数据库
表中的数据。在MyBatis中指的是sql语句与实体类之间的映射。
 
3、数据持久化概念
数据持久化是将内存中的数据模型转化为存储模型,以及将存储模型转化为内存中的数据模型
 
4、MyBatis框架是一个开源的数据持久层框架。其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。
 
5、MyBatis的优、缺点
优点:减少代码量,小巧并且简单易学,SQL语句彻底从程序代码中分离出来,降低耦合度,便
于统一管理和优化,并可重用,支持编写动态SQL语句,支持对象与数据库的ORM字段
关系映射。
缺点:SQL语句的编写工作量较大,对开发人员编写SQL语句的功底有一定要求,数据库可移植
性差,不能随意更换数据库。
 
6、MyBatis环境搭建
6.1、导入MyBatis jar包
6.2、编写实体类
6.3、编写MyBatis核心配置文件 mybatis-config.xml
在项目工程下新建Source Folder类型的resources目录,并在此目录下添加MyBatis的核心配置文
件。
<?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">
<configuration>
<!--引入database.properties文件,注意外部引入的文件属性高于内部设置的属性-->
<!--第一种方式-->
<!--<properties resource="database.properties" />-->
<!--第二种方式-->
<properties resource="database.properties">
<property name="driver" value="com.mysql.jdbc.Driver">
<property name="url" value="jdbc:mysql://localhost:3306/smbms">
<property name="username" value="root">
<property name="password" value="root">
</properties>
<!--设置mybatis运行的一些行为-->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!--设置类型别名-->
<typeAliases>
<!--默认所有实体pojo包下类的类型别名为当前的类名-->
<package name="com.kawa.pojo">
<!--这种方式比较繁琐,需要每个单独设置-->
<!--<typeAlias alias="User" type="com.kawa.pojo.User">-->
</typeAliases>
<!--environments可配置mybatis多套运行环境,将SQL映射到同的数据库上,该节点下可以
配置多个environment子元素节点,但是必须指定其中一个默认的运行环境(通过default指
定)-->
<environments default="development">
<environment id="development">
<!--配置事物管理,采用JDBC的事物管理 。
mybatis提供了两种事物管理,JDBC\MANAGED -->
<transactionManager type="JDBC"/>
<!--dataSource元素使用标准的JDBC数据源接口类配置JDBC连接对象的资源,
MyBatis提供了三种数据源类型(UNPOOLED、POOLED、JNDI)-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--将mapper文件加入到配置文件中,mappers的作用是告诉mybatis去哪里找到SQL映射文
件-->
<!--使用类资源路径获取资源--->
<mappers>
<mapper resource="com/kawa/dao/UserMapper.xml"/>
</mappers>
<!--使用URL获取资源-->
<!--<mappers>
<mapper url="file:///E:/..."/>
</mappers>-->
</configuration>
<!---注意:mybatis-config.xml文件的元素节点是有一定顺序的,节点位置若不按顺序排位,
那么XML文件会报错->
 
 
6.4、编写MyBatis实体类的映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kawa.dao.UserMapper">
<select id="count" parameterType="int" resultType="int">
select * from User where id = #{id}
</select>
<select id="getUserList" resultType="User">
select * from smbms_user
</select>
</mapper>
注意:SQL映射文件一般都对应于相应的POJO,所以一般都是采用POJO的名称+Mapper的规则
来进行命名
 
6.5、编写测试类测试
@Test
public void testGetUserList(){
String resource="mybatis-config.xml";
SqlSession sqlSession = null;
try{
//获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//创建sqlSessionFactoru对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建SqlSession对象
sqlSession = factory.openSession();
userList = sqlSession.selectList("com.kawa.dao.UserMapper.getUserList");
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭sqlSession
  sqlSession.close();
}
for (User user : userList) {
  logger.info("testGetUserList userCode:"+user.getUserCode()+"......
  and userName:"+user.getUserName());
  }
}
 
7、MyBatis基本要素--------核心对象
1)、SqlSessionFactoryBuilder
作用:负责构建SqlSessionFactory,并且提供了多个build()方法的重载,配置信息可以以三种
形式提供给SqlSessinFactoryBuild的build()fangfa,分别是:InputStream(字节流)、
Reader(字符流)、Configuration(类).
生命周期和作用域:
用过几丢,推荐作用域范围:方法体内
2)、SqlSessionFactory
作用:
创建SqlSession实例的工厂,所有的MyBatis应用都是以SqlSessionFactory实例为中心
,可以通过SqlSessionFactory提供的openSession()方法来获取SqlSession实例
生命周期和作用域:
生命周期应与应用的生命周期相同,最佳作用域范围:应用的全局作用域
3)、SqlSession
作用:
SqlSession是用于执行持久化操作的对象,类似于JDBC中的connection,它提供了面
向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的
SQL语句。
生命周期与作用域:
最佳的作用域范围是request作用域或者方法体内作用域
生命周期为线程级。
每次访问数据库的时候都需要创建它,(注意:并不是说在SqlSession里只能执行一
次SQL,是完全可以执行多次的,但是若关闭了SqlSession,那么就需要从新创建。
SqlSessin两种使用方式:
例:
<!--查询用户列表-->
<select id="getUserList" resultType="cn.smbms.pojo.User">
select * from smbms_user
</select>
 
测试类:
第一种:通过调用selectList方法
String resource="mybatis-config.xml";
SqlSession sqlSession = null;
try{
//获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//创建sqlSessionFactoru对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建SqlSession对象
sqlSession = factory.openSession();
userList = sqlSession.selectList("com.kawa.dao.UserMapper.getUserList");
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭sqlSession
sqlSession.close();
}
for (User user : userList) {
logger.info("testGetUserList userCode:"+user.getUserCode()+"......
and userName:"+user.getUserName());
}
 
第二种:基于mapper接口方式的操作数据
创建绑定映射语句的接口UserMapper.java,并提供接口方法getUserList();
该接口称为映射器,
注意:接口的方法必须与SQL映射文件中SQL语句的ID一一对应
public interface UserMapper{
  public List<User> getUserList();
}
 
测试类:
String resource="mybatis-config.xml";
SqlSession sqlSession = null;
try{
//获取mybatis-config.xml文件的输入流
InputStream is = Resources.getResourceAsStream(resource);
//创建sqlSessionFactoru对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建SqlSession对象
sqlSession = factory.openSession();
//调用getMapper(Mapper.class)执行Mapper接口方法
userList = sqlSession.getMapper(UserMapper.class).getUserList();
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭sqlSession
sqlSession.close();
}
for (User user : userList) {
logger.info("testGetUserList userCode:"+user.getUserCode()+"......
and userName:"+user.getUserName());
}
8、MyBatis基本要素--------核心配置文件
mybatis-config.xml文件的元素节点有先后顺序,必须按顺序来,不然会报错。
configuration 配置
propertes :可以配置在Java属性配置文件种
settings:修改MyBatis在运行时的行为方式
typeAliases :为java类型命名一个别名(简称)
typeHandIers :类型处理器
objectFactory :对象工厂
plugins ;插件
environments :环境
environment :环境变量
transactionManager :事物管理器
dataSource :数据源
mappers :映射器
8.1、resource属性值得优先级高于properties子节点配置的值
<properties resource="database.properties">
<property name="driver" value="com.mysql.jdbc.Driver">
<property name="url" value="jdbc:mysql://localhost:3306/smbms">
<property name="username" value="root">
<property name="password" value="root">
</properties>
8.2、settings元素的作用是设置一些非常重要的设置选项,用于设置和改变MyBatis运行中的行为
settings支持的属性:
cacheEnabled:
对在此配置文件下的所有cache进行全局性开/关设置 允许值:true/false 默认值:true
lazyLoadingEnabled:
全局性设置懒加载,如果设为false,则所有相关联的都会被初始化加载
允许值:true/false 默认值:true
autoMappingBehavior:
MyBatis对于resultMap自动映射的匹配级别
允许值:NONE/PARTIAL/FULL 默认值:PARTIAL
8.3、typeAliases元素的作用是配置类型别名
<!--默认所有实体pojo包下类的类型别名为当前的类名-->
<package name="com.kawa.pojo">
<!--这种方式比较繁琐,需要每个单独设置-->
<typeAlias alias="User" type="com.kawa.pojo.User">
8.4、environments元素可以配置多套运行环境。但是不管增加几套运行环境,都必须要明确选择
出当前唯一一个运行环境。
<environments default="development">
<environment id="development">
<!--配置事物管理,采用JDBC的事物管理 。
mybatis提供了两种事物管理,JDBC\MANAGED -->
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
上述代码需注意以下几点:
(1)、默认的运行id:通过default属性来指定当前的运行环境id为development,对于环境
的id命名要确保唯一。
(2)、transactionManaget事物管理器,设置器类型为JDBC(MyBatis有两种事物管理类型
即JDBC、MANAGED)
(3)、DataSource元素使用标准的JDBC数据源接口来配置JDBC链接对象的资源
MyBatis提供了三种数据源类型(UNPOOLED、POOLED、JDBC),这里我们使用
POOLED数据源类型,该类型的实现利用“池”的概念将JDBC链接对象组织起来,
避免了创建新的连接实例时所需的初始化和认证时间,是MyBaits实现的简单的数
据库连接池类型。它使数据库连接可被复用,不必在每次请求时都去创建一个物理
连接。
8.5、mappers:映射器,用来定义SQL的映射语句。
(1)、使用类资源路径获取资源
<mappers>
<mapper resource="com/kawa/dao/UserMapper.xml" />
</mappers>
(2)、使用URL获取资源
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml" />
</mappers>
 
 
6、mybatis和hibernate的区别
1 简单简介
1.1 Hibernate 框架
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。
1.2 Mybatis框架
Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架。
 
2 两者区别
2.1 开发方面
在项目开发过程当中,就速度而言:
hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发;
Mybatis 属于半自动化,sql需要手工完成,稍微繁琐;
但是,凡事都不是绝对的,如果对于庞大复杂的系统项目来说,发杂语句较多,选择hibernate 就不是一个好方案。
2.2 sql优化方面
Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;
Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能;
2.3 对象管理比对
Hibernate 是完整的对象-关系映射的框架,开发工程中,无需过多关注底层实现,只要去管理对象即可;
Mybatis 需要自行管理 映射关系;
2.4 缓存方面
相同点:
 
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓 存方案,创建适配器来完全覆盖缓存行为。
 
不同点:
 
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
 
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
 
比较:
 
Hibernate 具有良好的管理机制,用户不需要关注SQL,如果二级缓存出现脏数据,系统会保存,;
Mybatis 在使用的时候要谨慎,避免缓存CAche 的使用。
 
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
 
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
 
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
 
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
 
Mybatis优势
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
 
MyBatis容易掌握,而Hibernate门槛较高。
 
一句话总结
Mybatis:小巧、方便、高效、简单、直接、半自动化
 
Hibernate:强大、方便、高效、复杂、间接、全自动化
 
 
posted on 2018-04-08 22:03  恰是一种蜕变  阅读(195)  评论(0)    收藏  举报