mybatis框架搭建及应用

mybatis介绍及环境搭建

- 数据化持久化概念

数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称,例如:文件的存储,数据的读取等都是数据持久化操作。数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型,XML,二进制流等;
- mybatis框架及ORM
mybatis是一个开源的持久化的框架,内部封装了通过JDBC访问数据库的操作,支持普通的SQL语句,主要思想是将程序中的大量的SQL语句剥离出来,配置在配置文件中实现SQL的灵活配置,好处是将SQL与程序代码分离,在不修改代码的情况下直接在配置文件修改SQL;
ORM(object/relational Mapping)即对象/关系映射,是一种数据持久化技术,它对象模型和关系型数据库之间建立对应关系,并且提供了一种机制,通过Javabean对象去操作数据表中的数据。
- mybatis环境搭建及框架优缺点
1.下载jar包
这里写图片描述这里写图片描述
URL下载:https://github.com/mybatis/mybatis-3/releases
2.部署jar包
将下载好的mybatis-3.2.2jar包,MySQL-connector-java-5.1.0-bin.jar,log-1.2.17jar丢到web工程的WEB-INF下lib目录中
3.创建mybatis核心配置文件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">
<!-- 通过这个配置文件完成mybatis与数据库的连接 -->
<configuration>
    <!-- 引入数据源配置 database.properties 文件 -->
    <properties resource="database.properties"></properties>
    <settings>
        <!-- 设置Mybatis的log实现为LOG4J -->
        <setting name="logImpl" value="LOG4J"/>
        <setting name="autoMappingBehavior" value="NONE"/>
    </settings>
    <typeAliases>
        <package name="cn.smbms.entity"/>
    </typeAliases>
    <!-- 配置mybatis运行环境 -->
    <environments default="dev">
        <environment id="dev">
            <!-- 采用jdbc事务管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 采用Mybatis自带的数据源 POOLED -->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 将mapper文件加入到配置文件中 -->
    <mappers>
        <mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
    </mappers>
</configuration>

mybatis-config.xml
(1)configuration, 文件的几个常用元素的作用如下,
(2)properties:通过配置文件的根元素节点,resource属性从外部指定properties属性文件(datibase properties). 该属性位置也是在resurce目读下,文能推述数据库连接的相关配置数据库驱动,连接数据库的数据本用户名 数据库电码)
(3) sttings: 设置MyBatis即使用log4j实现日志功能。
typeAliases:配置类型别名,通过与mybatis的SQL映射文件相关联,减少输入多余的完整类名,以简化操作;
4 envronments: 表示配置MyBatis的多套运行环境,将SOL映射到多个不同的数据库上,该无素节点下可以配置多个environment子元素节点但是必须指定其中个默认运行环境(通过 default旨定)。

运行中的一些行为, 比如此处设置MyBatis 的log日志实现为 LOG4J.
(5) environment: 配置MyBatis的一套运行环境,需指定运行环境ID、事务管理、数据源配置等关信息。
(6) mappers: 作用是告诉MyBatis去哪里找到SQL映射文件(该文件内容是开发者定义的映射L语句),整个项目中可以有1个或多个SOL映射文件。
(7) mapper: mappers 的子元素节点,具体指定SQL映射文件的路径.其中resource属性的值表SOL映射文件的路径(类资源路径)。

必须注意的是,mybatis-configxm 文件的无素节点是有一定顺序的,节点位置若不按顺店北行那么XML文件会报错。
4.创建POJO和SQL映射文件
POJO (Plain Ordinary Java Object), 从字面,上来讲就是普通Java对象。POJO 类可以简单地理解为符合JavaBean规范的实体类,它不需要继承和实现任何特殊的Java基类或者接口。JavaBean 对象的状态保存在属性中,访问属性必须通过对应的getter 和setter方法。
在mybatis中,不需要POJO类名与数据库表名一致,因为mybatis是POJO与SQL语句之间的映射机制,一般情况下,保证POJO对象的属性与数据库的字段名一致即可
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="cn.smbms.dao.user.UserMapper">
    <!-- 查询记录数 -->
    <select id="count" resultType="int">
        SELECT COUNT(1) as 'count' FROM smbms_user
    </select>
</mapper>

xmI定义了SQL语句,其中各元素的含义如下。
mapper:映射文件的根元素节点,只有一个属性namespace:
namespace:用于区分不同的mapper,全局唯一。
select:表示查询语句,是MyBatis最常用的元素之一,常用属性如下:
id属性:该命名空间下唯标识符。
resultType属性:表示SQL语句返回值类型,此处通过SQL语句返回的是int数据类型。

MyBatis 框架的优点

  (1) 与JDBC相比,减少了50%以上的代码量。

  (2) MyBatis是最简单的持久化框架,小巧并且简单易学。

  (3) MyBatis 相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML从程序代码中彻底分离,降低耦合度,便于统一管理和优化, 并可重用。(4) 提供XML标签,支持编写动态SQL语句。

  (5)提供映射标签,支持对象与数据库的ORM字段关系映射。

MyBatis 框架的缺点

      (1) sOL语句的编写工作量较大,对开发人员编写SOL语句的功底有一定要求;
      (2)SQL语句依赖于数据库导致数据库移相性差不能随意更换数据库
  • *

mybatis核心对象及核心配置文件


mybatis三大要素:
核心接口和类
mybatis核心配置文件
SQL映射文件
这里写图片描述
(1)每个MyBatis的应用程序都以一个SqlSessionFactory对象的实例为核心。
(2)首先获取SqlSessionFactryBuilder对象,可以根 据XML配置文件或Configuration类的头例构建该对象。
(3)然后获取SqlSessionFactory对象,该对象实例可以通过SqlSessionFactoryBuilder对象来获得,
(4)有了SqlSessionFactory 对象之后,就可以进而获取SqlSession实例,SqlSession对象中完全包含以数据库为背景的所有执行SQL操作的方法。可以用该实例来直接执行已映射的SQL语句。
1. sqlsessionfactorybuilder的作用
sqlsessionfactorybuilder负责构建sqlsessionfactory,并且提供了多个builder方法的重载
sqlsessionfactorybuilder的最大特点是用过即丢。一旦创建了sqlsessionfactory对象之后,这个类就不需要了,因此sqlsessionfactorybuilder的最佳范围是存在于方法体内也就是局部变量
2.sqlsessionfactory的作用
.sqlsessionfactory简单的理解就是创建sqlsession实例的工厂,mybatis所有的应用都是以sqlsessionfactory实例为中心,sqlsessionfactory的实例可以通过sqlsessionfactorybuilder对象来获得,所以就可以通过sqlsessionfactory提供的opensession()方法来获取sqlsession实例
3.SqlSessionFactory生命周期与作用域
SqlSessionFactory对象一旦创建,就会 在整个应用运行过程中始终存在。没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory. 因此SqlSessionFactory的最佳作用域是Application, 即随着应用的生命周期-一同存在。那么这种“存在于整个应用运行期间,并且同时只存在一个对象实例“的模式就是所谓的单例模式(指在应用运行期间有且仅有一个实例)。
下面就需要把获取SqlSessionFactory 的代码进行优化,最简单的实现方式就是放在静态代码块以保证SqlSessionFactory对象只被创建一次

public class MyBatisUtil {
    private  static SqlSessionFactory factory;
    static{
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    //创建sqlsession对象
    public  static SqlSession createSqlSession(){
        return factory.openSession(false);//true为自动提交事务
    }
    //关闭sqlsession对象
    public static void closeSqlSession(SqlSession sqlSession){
        if(null!=sqlSession){
            sqlSession.close();
        }
    }
}

4.SqlSession的作用
SqlSession是用于执行持久化操作的对象,类似于JDBC中Connection,他提供了面向数据库执行SQL命令所需的所有方法。
5.SqlSession的生命周期和作用域
SqlSessionFactory对象一旦创建,就会 在整个应用运行过程中始终存在。没有理由去销毁或再创建它,并且在应用运行中也不建议多次创建SqlSessionFactory. 因此SqlSessionFactory的最佳作用域是Application, 即随着应用的生命周期-一同存在。那么这种“存在于整个应用运行期间,并且同时只存在一个对象实例“的模式就是所谓的单例模式(指在应用运行期间有且仅有一个实例)。
下面就需要把获取SqlSessionFactory 的代码进行优化,最简单的实现方式就是放在静态代码块以保证SqlSessionFactory对象只被创建一次

测试如下:

public  void test2(){
            SqlSession sqlSession = null;
            int count =0;
            try {
                sqlSession = MyBatisUtil.createSqlSession();
                count = sqlSession.getMapper(UserMapper.class).count();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                MyBatisUtil.closeSqlSession(sqlSession);;
            }
            logger.debug("UserMapperTest count---->"+count);

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值