MyBatis
是什么
是一种ORM框架 实体类和SQL语句之间建立映射关系
O===>Object R===>Relation M===>Mapping
特点
基于SQL语法,简单易学
能了解底层封装过程
SQL语句封装在配置文件中,便于统一管理和维护,降低程序的耦合度
方便程序的代码调式
使用MyBatis的开发步骤
下载mybatis-3.2.2.jar包并导入工程
编写MyBatis核心配置文件(默认configuration.xml 建议自定义)
创建实体类-POJO
DAO层-SQL映射文件(mapper.xml)
创建测试类
读取全局配置文件mabatis-config.xml
创建SqlSessionFactory对象,读取配置文件
创建SqlSession对象
调用mapper文件进行数据操作
导入MyBatis源码
选中引入工程中(即Referenced Libraries中)的mybatis-3.2.2.jar包
右键===》properties===>Java Source Attachment===》导入到Location path
folder ------->External Folder(解压后)
JAR ------->Workspace
zip ------->External File(未解压)====》到自己相应的目录找到源码压缩包====》Apply
mybatis核心配置文件的详细配置
01、创建source folder 统一管配置志文件resources
02、resources
log4j.properties
database.properties
mybatis-config.xml(语义化命名的mybatis核心配置文件)
03、mybatis-config.xml配置详细
001、copy文件头
<?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">
002、根节点configuration
<configuration> <!--注意各个节点的顺序-->
<!-- 引入database.properties文件 -->
<properties resource="database.properties"/>
<!--设置运行时的属性-->
<settings>
<setting name="logImpl" value="LOG4J" />
</settings>
<!-- 配置多套运行环境,并指定默认运行环境-->
<environments default="development">
<environment id="development">
<!-- 事务管理采用JDBC-->
<transactionManager type="JDBC">
</transactionManager>
<!-- 配置数据源,POOLED是mybatis自带的,
也可用Tomcat的JNDI-->
<dataSource type="POOLED">
<!--数据库连接四要素,结合自己的properties-->
<property name="driver" value="${dirver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<!--下面可以配置多套运行环境。注意id唯一,不要重复-->
</environments>
<!--将mapper文件加入到配置文件中-->
<mappers>
<mapper resource="cn.smbms.dao.user.UserMapper.xml" />
</mappers>
</configuration>
DAO层xxx-Mapper.xml文件配置
01、copy文件头
<?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">
<!-- 上一行是网络引入dtd文件,由于网络限制,需要手动引入 ->
02、根节点mapper
<!--namespace用于区别其他mapper,达到全局唯一。-->
<mapper namespace="cn.smbms.dao.user.UserMapper">
<!-- 查询用户表的记录数 -->
<select id="count" resultType="int">
select count(1) as count from smbms_user
</select>
<!---查询用户列表-> <!---返回类型用完全限定名->
<select id="getUserList" resultType="cn.smbms.pojo.User">
select * from smbms_user
</select>
</mapper>
手动引入dtd
01、找到dtd文件
jar包===》解压===》org/apache/ibatis/builder/xml/xxx.dtd
放到自己想放的位置
02、复制PUBLIC 后的 -//mybatis.org/DTD Mapper 3.0//EN
03、引入dtd
点击MyEclipse的window===>preferences===>搜xml
选中User Specified Entries===>点击Add===file System 到自己刚才存放位置找dtd文件
将刚才复制的 -//mybatis.org/DTD Mapper 3.0//EN 粘贴在 key 中
测试,执行刚才配置的sql语句
01、创建测试类
建一个source folder 来放测试类
New===》Other===>Junit Test Case===>填写包名,类名
02、书写Test方法
@Test public void test(){} String resource="mybatis-config.xml"; int count=0; SqlSession sqlSession = null; try { //1、获取mybatis-config.xml的输入流 InputStream is=Resources.getResourceAsStream(resource);//导入的是ibatis.io的包 //2、创建SqlSessionFactory对象,完成对配置文件的读取 SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //3、创建sqlSession sqlSession=factory.openSession(); count = sqlSession.selectOne("cn.smbms.dao.user.UserMapper.count"); logger.debug("UserMapperTest count ----->" + count); } catch(IOException e) { e.printStackTrace(); } finally { sqlSession.close(); } }
MyBatis的优缺点
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案,
适用于性能要求较高或者需求多变的互联网项目
优点
与JDBC相比,减少了50%以上的代码量
最简单的持久化框架、小巧简单易学
SQL代码从程序代码中彻底分离,可重用
提供XML标签、支持编写动态SQL
提供映射标签、支持对象与数据库的ORM字段关系映射
缺点
SQL语句编写工作量大,对开发人员有一定要求
数据库移植性差
SqlSessionFactory优化---创建MyBatisUtil单例类
(并非最优,后期可集成Spring)
public class MyBatisUtil{ private static SqlSessionFactory factory; static{ try { InputStream is= Resources.getResourceAsStream("mybatis-config.xml"); factory=new SqlSessionFactoryBuilder().build(is); } catch (IOException e){ e.printStackTrace(); } } public static SqlSession createSqlSession(){ return factory.openSession(false); } public static void closeSqlSession(SqlSession sqlSession){ if(null!= sqlSession){ sqlSession.close(); } } }
接口映射器--->UserMapper
//与映射同包
public interface UserMapper{
public List<User> getUserList();//与映射id同名
}
//修改测试类中的相应代码
userList=sqlSession.getMapper(UserMapper.class).getUserList();
系统核心配置文件
mybatis-config.xml-系统核心配置文件
configuration 配置
properties 可以配置在Java属性配置文件中
setting 修改MyBatis在运行时的行为方式
typeAliases 为Java类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
environment 环境变量
transactionManager 事务管理器
dataSource 数据源
mappers 映射器
配置 properties元素的两种方式
通过外部指定的方式 database.properties,实现动态配置
配置properties的resource指定(较高的优先级)
<properties resource="database.properties" />
直接配置为xml,实现动态配置
配置property的name和value
<properties>
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms" />
<property name="user" value="root" />
<property name="password" value="" />
</properies>
settings元素(9个)
用来修改MyBatis运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
typeAliases
方式一:<typeAlis alias="user" type="cn.smbms.pojo.User" /><!--指定一个类的别名-->
方式二:<package name="cn.smbms.pojo" /><!--为全包指定默认名,JavaBean的非限定类名-->
environments元素
配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
子元素节点:environment,但是必须指定其中一个默认运行环境(通过default指定)
id 运行环境ID
transactionManager 事务管理器
<transactionManager type="[JDBC][MANAGED]" /> MANAGED--托管
dataSource 数据源
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
有三种内建的数据源类型
<dataSource type="[UNPOOLED][POOLED][JNDI]">