1.Mybatis介绍
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
摘自《百度百科》
- Mybatis是 ibatis的前身,属于apache基金会
- 2010.6转gooogle code 改名为mybatis,并做了优化
- spring对改名后的mybatis不再整合, mybatis自己整合了spring, 写了jar
2.为什么要用Mybatis有什么用?
(1) Mybatis的地位:
jdbc——Spring jdbc——Mybatis——Hibernate
手洗——搓衣板——半自动洗衣机——全自动洗衣机
开发效率逐步增高, 执行效率逐步降低
Mybatis是中庸产品, 其比Hibernate更灵活,但比jdbc开发效率更高。
(2) 为什么要使用Mybatis?
Mybatis封装jdbc重复代码,sql语句放在单独的xml中,程序员只关注业务,开发效率上升。
Mybatis开发比jdbc快,但比Hibernate灵活,比Hibernate执行效率快(尤其是大批量场景)。
(3) Mybatis的优势:
设计中庸,但灵活,且开发效率跟得上
4.Mybatis案例搭建
github地址:
Mybatis项目:
1.创建项目,在pom.xml导包,maven管理jar包
mybatis框架: org.mybatis 3.4.5 3.5.0
mysql驱动: mysql.mysql-connector-java 5.0.8
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.0.8</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
2.java类
xxDao接口 xxDaoImpl实现接口
3.入门案例|配置文件:
主清单文件:configuration.xml文件 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>
<!--mysql连接配置文件-->
<properties resource="conf/mysql.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!--mysql连接信息配置-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc_driverClass}"/>
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_userName}"/>
<property name="password" value="${jdbc_userPassword}"/>
</dataSource>
</environment>
</environments>
<!--mybatis子清单文件-->
<mappers>
<mapper resource="mapper/user.xml"/>
</mappers>
</configuration>
子清单文件:xx.xml xxMapper.xml 业务sql
<?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="org.example.dao.UserDao">
<!--根据id获得用户信息-->
<select id="findUserById"
resultType="org.example.entity.User"
parameterType="java.lang.Integer">
select
id,
user_name as name,
user_password as password,
address
from t_user
where id = #{id}
</select>
</mapper>
其他配置文件:
mysql.properties(数据库连接)
jdbc_driverClass=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8
jdbc_userName=xx
jdbc_userPassword=xxxxx
log4j.properties (日志配置)
# Set The RootLogger
log4j.rootLogger=debug, console
# Direct Log Messages To Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L - %m%n
4.创建工具类:
com.tarena.util.mybatisUtil.java:
加载总清单文件,mybatis使用连接对象sqlSession, 其等同于jdbc,用来实现连接数据库,并进行之后的数据操作。
package org.example.util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
String resource = "conf/configuration.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 开链接
*/
public static SqlSession getSession(){
SqlSession sqlSession=sqlSessionFactory.openSession();
return sqlSession;
}
}
5.功能实现:Mybatis使用自己的api解析清单文件,api操作增删改查
6.编写单元测试进行测
5.细节
5.1清单文件|配置文件
前情提要:清单文件和配置文件、资源文件说法不同,其实是一个东西。
1.各个清单文件都包含什么?
resource/conf/配置文件:
configuration.xml文件,包含属性文件加载、数据库连接、数据库事务配置、子清单文件加载等
mysql.properties 数据库连接配置
resource/mapper子清单文件:xx.xml 跟业务对应的sql
mapper 的namespace命名空间,同意个命名空间下sql语句的id不能相同
resultType结果集:数据查询后的返回类型
parameterType 参数类型: 用于查询的参数类型
resource/log4j.properties: 开启log4j日志管理
2.各个清单文件都是用来做什么的?
- 工具类根据指定路径加载总清单文件,总清单文件中指定了子清单文件、mysql连接信息
- 工具类解析总清单文件,获取获得sqlSessionFactory(用于开启连接)
- 注意清单文件里用/而不是.来分割路径
3.Mybatis的总配置文件:configuration.xml 配置项是有顺序的
configuration :
properties:资源引入
settings
typeAliases:设置别名
typeHandlers
ObjectFactory
plugins
environments
environment:
transactionManager:事务管理
dataSource:数据库连接信息
5.2连接数据库和之前有什么区别?
之前开链接:
//获得连接
Connection con=DriverManager.getConnection("url","username","password");
//开启事务
con.setAutoCommit(false);
现在等价于:MyBatisUtil中
Sqlsession sqlSession=sqlSessionFactory.openSession();//直接开启事务
其中sqlSessionFactory的作用:开链接,相当于事务开启
1. getSession()——>SqlSession
2. openSession()——>开链接,相当于事务开启
SqlSession sqlSession=sqlSessionFactory.openSession();
老写法: sqlMapper,现在叫sqlSession,等同于jdbc的connetion
工具类加载总清单文件——总清单文件加载子清单文件。——mybatisUtil用于获取mybatis连接对象sqlSession|sqlMapper等同于jdbc的Connection
6.设计模式:
工厂模式:SqlSessionFactory SqlSession sqlSession=sqlSessionFactory.openSession();
构建者模式:new SqlSessionFactoryBuilder().build(inputStream);
7.补充:xml的不自动提示怎么解决?
(1)关于智能提示:指到本地dtd文件【指向本地】本地dtd文件在jar包里
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
将其替换为本地的dtd文件即可,一般在下载的mybatis jar包里有
(2)最好用maven下载,其余方式很难下载
(3)static: 静态块:只加载一次,费时,且只需加载一次多处使用的资源
(4)最快的学习方式,基于文档学习
(5)两个相关的包记录一下:
mybatis-jpetstore-6.0.1-bundle.zip 基本用法案例包
mybatis-spring-1.2.0-bundle.zip 自己整合spring
(6)configuration.xml中$和#的区别:
#{}
用于引用properties对象的值
${}
用于引用已经交给了spring管理的值在SpringMVC主配置文件applicationContext.xml文件中${}和#{}有什么区别_applicationcontext ${}-CSDN博客