MyBatis------------------MyBatis配置环境并完成第一个程序

1 MyBatis简介

1.1 MyBatis

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码

对jdbc的封装框架有哪些:Hibernate,dbutils,jdbcTemplate[spring],mybatis

原理:Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

 

1.2 jdbc程序代码

MyBatis------------------MyBatis配置环境并完成第一个程序

MyBatis------------------MyBatis配置环境并完成第一个程序

 

存在的问题

  1. 数据库连接频繁开启和关闭,会严重影响数据库的性能。
  2. 代码中存在硬编码,分别是数据库部分的硬编码和SQL执行部分的硬编码。

 

1.3 MyBatis的框架核心

  1. mybatis配置文件,包括Mybatis全局配置文件和Mybatis映射文件,其中全局配置文件配置了数据源、事务等信息;映射文件配置了SQL执行相关的 信息。
  2. mybatis通过读取配置文件信息(全局配置文件和映射文件),构造出SqlSessionFactory即会话工厂。
  3. 通过SqlSessionFactory,可以创建SqlSession即会话。Mybatis是通过SqlSession来操作数据库的。
  4. SqlSession本身不能直接操作数据库,它是通过底层的Executor执行器接口来操作数据库的。Executor接口有两个实现类,一个是普通执行器,一个是缓存执行器(默认)
  5. Executor执行器要处理的SQL信息是封装到一个底层对象MappedStatement中。该对象包括:SQL语句、输入参数映射信息、输出结果集映射信息。其中输入参数和输出结果的映射类型包括HashMap集合对象、POJO对象类型

 

 

 

  1. Mybatis入门

2.1 环境准备

创建数据库表

MyBatis------------------MyBatis配置环境并完成第一个程序

 

下载MyBatis

mybaits的代码由github.com管理,下载地址:https://github.com/mybatis/mybatis-3/releases

 

创建项目导包

导入下面的包

MyBatis------------------MyBatis配置环境并完成第一个程序

MyBatis------------------MyBatis配置环境并完成第一个程序

 

添加log4j.properties

Mybatis使用的日志包是log4j的,所以需要添加log4j.properties。

在classpath下创建log4j.properties如下:【文件内容可以从mybatis-3.2.7.pdf中拷贝】

# Global logging configuration

log4j.rootLogger=DEBUG, stdout

# Console output...

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

 

日志级别在开发阶段设置成DEBUG,在生产阶段设置成INFO或者ERROR

 

2.2 开发步骤

  1. 创建PO(model)类,根据需求创建;
  2. 创建全局配置文件SqlMapConfig.xml;
  3. 编写映射文件;
  4. 加载映射文件,在SqlMapConfig.xml中进行加载;
  5. 编写测试程序,即编写Java代码,连接并操作数据库。

         思路:

  1. 读取配置文件;
  2. 通过SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂。
  3. 通过SqlSessionFactory创建SqlSession。
  4. 调用SqlSession的操作数据库方法。
  5. 关闭SqlSession。

 

 

创建PO类

MyBatis------------------MyBatis配置环境并完成第一个程序

 

创建SqlMapConfig.xml

在classpath(src)下,创建SqlMapConfig.xml文件【SqlMapConfig.xml(文件头可以从mybatis-3.2.7.pdf文档的2.1.2小节中拷贝)

<?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>

<!-- 配置mybatis的环境信息 -->

<environments default="development">

    <environment id="development">

         <!-- 配置JDBC事务控制,由mybatis进行管理 -->

         <transactionManager type="JDBC"></transactionManager>

         <!-- 配置数据源,采用dbcp连接池 -->

         <dataSource type="POOLED">

             <property name="driver" value="com.mysql.jdbc.Driver"/>

             <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>

             <property name="username" value="root"/>

             <property name="password" value="123456"/>

         </dataSource>

    </environment>

</environments>

</configuration>

 

映射文件

在classpath下,创建sqlmap文件夹。在sqlmap目录下,创建User.xml映射文件。

Mybatis的映射文件头(可以从mybatis-3.2.7.pdf文件中拷贝)】

<?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">

<!--

     namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离

     注意:使用mapper代理开发时,namespace有特殊且重要的作用

 -->

<mapper namespace="test">

     <!--

          [id]:statement的id,要求在命名空间内唯一 

          [parameterType]:入参的java类型

          [resultType]:查询出的单条结果集对应的java类型

          [#{}]: 表示一个占位符?

          [#{id}]:表示该占位符待接收参数的名称为id。注意:如果参数为简单类型时,#{}里面的参数名称可以是任意定义

      -->

     <select id="findUserById" parameterType="int" resultType="com.gyf.domain.User">

          SELECT * FROM USER WHERE id = #{id}

     </select>

</mapper>

配置文件加载映射文件

MyBatis------------------MyBatis配置环境并完成第一个程序

 

测试类

MyBatis------------------MyBatis配置环境并完成第一个程序