mybatis
1.什么是mybatis?
Mybatis是一个优秀的持久层框架,他对jdbc(要回顾)的操作数据库的过程进行了封装,使开发者只需要关注SQL本身,而不需要去花费精力去处理注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc复杂的过程代码。
(1).mybatis-config.xml是Mybatis的核心配置文件,通过其中的配置可以生成SqlSessionFactory,也就是SqlSession工厂。(工厂模式)
(2).基于SqlSessionFactory可以生成SqlSession对象。
(3).SqlSessions是一个既可以发送SQL去执行,并返回结果,类似于JDBC中的Connection对象,也是Mybatis中至关重要的一个对象。
(4).Executor是SqlSession底层的对象,用于执行SQL语句。
(5).MapperStatement对象也是SqlSession底层的对象,用于接收输入映射(SQL语句中的参数),以及做输出映射(即将SQL查询的结果映射成相应的结果)
2.Mybatis快速入门。
(1).准备数据,创建库和表(略)
(2).导入所需要的jar包(junit、mysql、mybatis、log4j)
在pom.xml中引入相关依赖即可:
<dependencies>
<!-- junit单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!-- 整合log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
</dependencies>
(3).在resource目录下添加mybatis-config.xml文件
文件头信息:
<?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">
(4).mybatis-config的详细配置信息如下:
<!-- MyBatis的全局配置文件 -->
<configuration >
<!-- 1.配置环境,可配置多个环境(比如:develop开发、test测试) -->
<environments default="develop">
<environment id="develop">
<!-- 1.1.配置事务管理方式:JDBC/MANAGED
JDBC:将事务交给JDBC管理(推荐)
MANAGED:自己管理事务
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 1.2.配置数据源,即连接池 JNDI/POOLED/UNPOOLED
JNDI:已过时
POOLED:使用连接池(推荐)
UNPOOLED:不使用连接池
-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/yonghedb?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 2.导入Mapper配置文件,如果mapper文件有多个,可以通过多个mapper标签导入 -->
<mappers>
<mapper resource="EmpMapper.xml"/>
</mappers>
</configuration>
(5)编写EmpMapper.xml文件
头信息如下:
<?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=" ">
<select id=" " resultType=" ">(只有查询时才会有resultType)
sql语句
</select>
</mapper>
(6).通过工厂模式执行sql语句的代码如下:
1.读取mybatis-config.xml的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
2.根据配置文件获取一个SqlSessionFactory工厂对象
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(In);
3.通过工厂获取一个SqlSession对象
SqlSession session = fac.openSession();
//4.通过namespace+id找到要执行的sql语句并执行sql语句
List<Emp> list = session
.selectList("EmpMapper.findAll");
5.输出结果
优化:使用mapper接口开发。
开发步骤:
1.创建一个接口,接口的全限定类名要与mapper文件的namespace值一样。
2.在接口中提供方法,方法名要与mapper文件中sql标签上的id值一致。
3.mapper接口中方法接收的参数类型要和mapper.xml中的sql语句接收的参数类型相同。
4.接口方法中的返回值类型和sql标签上的resultTyype的类型相同(如果方法返回值是集合,resultType只需要指定集合中的泛型)。
5.创建测试类:
1.读取mybatis-config.xml的核心配置文件
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
2.根据配置文件获取一个SqlSessionFactory工厂对象
SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(In);
3.通过工厂获取一个SqlSession对象
SqlSession session = fac.openSession();
4.获取Mapper接口对象
EmpMapper map = session.getMapper("EmpMapper.class");
5.调用接口对象的方法进行查询
List<Emp> list = map.findAll();
6.输出结果