myBatis-1

来源:互联网 发布:淘宝实名认证怎么弄 编辑:程序博客网 时间:2024/06/06 12:46

MyBatis主配置文件

配置MyBatis的运行环境,主要是配置数据源和事务管理器;首先在mybatis.dtd中找到配置文件头,然后在下面由xml模式的configuration,然后使environments标签,

标签中可以包含多个运行环境<environment>,但default属性指定了当前运行所使用的环境,在environment中配置单标签<transactionMananger type="JDBC">

指明了所用的事务管理器,mybatis支持两种事务管理器,JDBC和MANAGED;

使用JDBC,即通过Connection的commit()方法提交,通过roolback()方法回滚,也可以设置为自动提交;

使用MANAGED,则由容器来管理整个生命周期(如Spring容器);

<dataSource>标签,用于配置MyBatis使用的数据源类型于数据库连接的基本属性,比如连接驱动属性和连接端口号和用户名称和密码等参数;

其中有type=UNPOOLED 不使用连接池,即每次请求都为其创建一个DB连接,使用完毕就关闭;

POOLED使用连接池;来维护连接;

JNDI:数据源可以定义到应用外部,通过JNDI容器来获取数据库连接;


指定映射文件mapper.xml;

新建的xml文件,文件头也在MyBatis的文档中可以查到;

主体部分:<mapper resource="xxx.xml>指定映射文件;

也可以用<mapper url="file:///e:\E:\xxx.xml">

当然,可以在mappers中指定多个mapper文件,但是id不能相同;

<mappers>

<mapper resource="xxx.xml/>

<mapper class="xxx.xxDao/>  指定映射dao接口类名

</mappers>

Dao中需要通过SqlSession对象来操作db,而SqlSession是由工厂对象创建的;需要工程对象SqlSessionFactory,SqlSeesionFactory对象,需要通过其构造器对象SqlSessionFactoryBuilder的build方法,该方法的参数是主配置文件的输入流对象,输入刘对象为Resources.getResourceAsStream("mybatis.xml");

在mapper.xml文件中指定的是操作的数据对象,和操作的类型(DDL/DML)

然后调用factory.openSession()方法来获得连接和操作,session.commit()提交;最后还要关闭; session.close();

其中Resources类是用来读取资源文件的,有很多方法来家在解析资源文件,返回不同类型的IO流对象;

因为SqlSessionFactorybuilder对象的build()方法在创建万工厂对象之后就完成了使命,可以立即被销毁,所以一般将其对象创建为一个方法内的局部对象;

其中重载的方法也很多;

SqlSessionFactory接口

SqlSeesionFactory接口对象是一个重量级的对象(系统开销巨大),是线程安全的,所以一个应用只需要一个该对象即可,创建SqlSession需要SQlSeeeionFactory接口的openSession()方法;

openSession(true)创建一个有自动提交功能的SqlSession();

opentSession(false)创建一个非自动提交功能的SqlSession();需要手动提交;默认为false;

SqlSession接口

SqlSession接口对象用于执行持久化操作,一个SqlSession对应着一次数据库会话,一次会话以SqlSession对象的创建开始;以该对象的关闭结束;

SqlSession接口对象是线程不安全的,所以每次数据库会话结束前需要马上调用其close()方法将其关闭;再次会话,再次创建;而且在关闭的时候会自动判断当前的SqlSession是否被提交,若没被提交,则会回滚后关闭;若已被提交,则直接将SqlSession关闭,所以无需手工回滚;

SqlSession常用的方法有insert(String arg0)/insert(String arg0,Object arg1);delete(),update();select();selectList();selectMap();selectOne();

commit();rooback();close();

所以执行数据库操作增删改查等实质上都是执行了SqlSession对象的insert()方法,该方法第一个参数是mapper.xml映射文件中的id,第二个参数是映射的对象;

而且其实在解析加载主配置文件的输入流对象创建并使用完之后不用手工关闭,SqlSessionFactory的build()方法会自动关闭输入流;

SqlSession对象的创建需要使用SqlSessionFactory接口对象的openSession()方法;SqlSessionFactory届欧的实现类为DefaultSqlSeeionFactory

从源码上看,所谓创建SqlSession,实际上就是通过configuration加载主配置文件,通过主配置文件来连接数据库,然后创建了一个执行器对象(将来用于执行映射文件中的SQL

语句),初始化了一个DB数据是否被修改的标志变量为dirty,初始化为false,关闭了自动提交功能;

增删改的执行

对于SqlSession的insert(),delete(),update()方法,其底层均是调用执行了update()方法;并且由源码可知,无论执行增删改查都是对数据进行修改,军将dirty变量设置成了true,且在获取到映射文件中指定的id的SQL语句后,由执行器excutor执行;


原创粉丝点击