您的位置:首页 > 其它

Mybatis-01-简介及入门

2017-09-27 17:15 435 查看

一.Mybatis简介

1.MyBatis 框架的历史

MyBatis 原本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月MyBatis 迁移到Github

2.MyBatis框架的特点

MyBatis是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁杂的过程代码Mybatis通过xml或注解的方式配置各种statement(statement、preparedStatemnt、CallableStatement),并通过java对象和statement中的SQL 进行映射生成最终交给数据库执行的SQL 语句,最后由mybatis框架执行SQL 并将结果映射成java对象并返回

二.Mybatis框架运作流程图





三.Mybatis框架执行流程中的重要节点

1.配置文件

SqlMapConfig.xml:Mybatis的全局配置文件,配置了Mybatis的运行环境等信息

mapper.xml:SQL映射文件,文件中配置了操作数据库的SQL语句,此文件需要在SqlMapConfig.xml中加载。

2.SqlSessionFactory接口

通过Mybatis环境等配置信息构造SqlSessionFactory,即会话工厂,由会话工厂创建SqlSession即会话,操作数据库通过SqlSession进行。

3.Executor接口

Mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

4.MappedStatement类

MappedStatement类简介

MappedStatement是Mybatis一个底层封装类,它包装了Mybatis配置信息及SQL映射信息等。mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id

MappedStatement类功能作用

1.MappedStatement类对操作数据库的SQL语句的输入参数进行定义,包括HashMap、基本类型、pojo、Executor等种类的参数,通过MappedStatement在执行SQL前将输入的参数对象映射至SQL中,这个过程可以类比JDBC编程中使用preparedStatement对SQL语句设置参数

2.MappedStatement类对SQL语句执行数据库后的输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过MappedStatement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于JDBC编程中对结果的解析处理过程

四.Mybatis的简单使用

1.搭建环境

1.创建一个maven项目,在pom.xml文件中加入对mybatis的依赖

<properties>
<mybatis.version>3.2.8</mybatis.version>

eae3
<mybatis.spring.version>1.2.2</mybatis.spring.version>
<mybatis.paginator.version>1.2.15</mybatis.paginator.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis.spring.version}</version>
</dependency>
<dependency>
<groupId>com.github.miemiedev</groupId>
<artifactId>mybatis-paginator</artifactId>
<version>${mybatis.paginator.version}</version>
</dependency>
</dependencies>


再加入数据库mysql和数据库链接池的依赖包

<mysql.version>5.1.32</mysql.version>
<druid.version>1.0.9</druid.version>

<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>


2.创建一个数据库并准备一些数据



2.创建并配置项目的配置文件



项目结构如图所示

在resource目录下分别创建日志文件log4j.properties,写有数据库连接信息的文件jdbc.properties,和Mybatis的全局配置文件sqlMapConfig.xml

sqlMapConfig.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">
<configuration>
<!-- 1.将jdbc连接数据库的相关配置加载进配置文件    -->
<properties resource="jdbc.properties"/>

<!-- 2.设置Mybatis的运行环境    -->
<environments default="development">
<environment id="development">
<!-- 2.1使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 2.2配置数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url"
value="jdbc:mysql://localhost:3306/babasport?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="***" />
</dataSource>
</environment>
</environments>

<!-- 3.配置Mybatis映射文件的位置 -->
<mappers>
<mapper resource="BbsEmployeeMapper.xml"></mapper>
</mappers>

</configuration>


关于映射文件的位置信息:resource属性指的是项目的根目录,我的BbsEmployeeMapper.xml映射文件没有放在根目录下,而是放在com.sandking.mybatis.mapper包下,所以我将映射文件所在的目录设置为resource类型的目录



设置目录为resource类型的目录(即目录下的文件直接放在根目录下)



3.创建持久化类(BbsEmployee)和映射文件(BbsEmployeeMapper.xml)

3.1 持久化类BbsEmployee(省略了get,set方法)

public class BbsEmployee {
private String username;
private String password;
private String degree;
private String email;
private Boolean gender;
private String imgUrl;
private String phone;
private String realName;
private String school;
private Boolean isDel;
......


3.2 配置映射文件

<?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.sandking.mybatis.mapper.BbsEmployeeMapper" >
<!-- 设置查询配置-->
<select id="queryTest" parameterType="String"
resultType="com.sandking.mybatis.pojo.BbsEmployee">
SELECT * FROM `bbs_employee` WHERE username  = #{username}
</select>

</mapper>


1.mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id

2.parameterType属性用来声明输入参数的类型

3.resultTypey属性用来声明输出结果的类型,如果是持久化类,则填写其全路径

4.#{ }是输入参数的占位符,相当于JDBC中的PreparedStatement类编程中的 ? 占位符

4.编写测试程序

public class BbsDao {

private SqlSessionFactory sqlSessionFactory = null;
//加载配置文件,在对数据库的查询操作执行前执行
@Before
public void init() throws IOException {
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream("SqlMapConfig.xml");
this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
}

@Test
public void testQuery(){
SqlSession sqlSession = sqlSessionFactory.openSession();
//selectOne方法查询一条数据
//1.传入sql语句对应的id
//2.传入查询参数
BbsEmployee bbsEmployee = sqlSession.selectOne("queryTest","admin");
System.out.println(bbsEmployee.getUsername);
sqlSession.close();
}
}


查询结果:



从控制台可以看到Mybatis的发出的SQL语句,查询参数,查询结果数量(Total:1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: