学习目标掌握映射文件中常用元素的使用了解MyBatis的基础知识核心对象的作用熟悉配置文件中各个元素的作用7.1MyBatis的核心对象 7.1.1SqlSessionFactory什么是SqlSessionFactory?SqlSessionFactory是MyB atis框架中十分重要的对象,它是单个数据库映射关系经过编译后的内存镜像,其主要作用是创建SqlSession。SqlSessio nFactory对象的实例可以通过SqlSessionFactoryBuilder对象来构建,而SqlSessionFactory Builder则可以通过XML配置文件或一个预先定义好的Configuration实例构建出SqlSessionFactory的实 例。构建SqlSessionFactory通过XML配置文件构建出的SqlSessionFactory实例现代码如下:InputS treaminputStream=Resources.getResourceAsStream("配置文件位置");SqlSe ssionFactorysqlSessionFactory=newSqlSessionFactoryBuilder(). build(inputStream);SqlSessionFactory对象是线程安全的,它一旦被创建,在整个应用执行期间都会存在 。如果我们多次的创建同一个数据库的SqlSessionFactory,那么此数据库的资源将很容易被耗尽。为此,通常每一个数据库都会 只对应一个SqlSessionFactory,所以在构建SqlSessionFactory实例时,建议使用单列模式。7.1.2S qlSession1.什么是SqlSession?SqlSession是MyBatis框架中另一个重要的对象,它是应用程序与持久层 之间执行交互操作的一个单线程对象,其主要作用是执行持久化操作。每一个线程都应该有一个自己的SqlSession实例,并且该实例是不 能被共享的。同时,SqlSession实例也是线程不安全的,因此其使用范围最好在一次请求或一个方法中,绝不能将其放在一个类的静态字 段、实例字段或任何类型的管理范围(如Servlet的HttpSession)中使用。使用完SqlSession对象后要及时关闭,通 常可以将其放在finally块中关闭。SqlSessionsqlSession=sqlSessionFactory.open Session();try{//此处执行持久化操作}finally{sqlSession.close();}2.Sql Session中的方法查询方法:TselectOne(Stringstatement);TselectOne (Stringstatement,Objectparameter);ListselectList(Strin gstatement);ListselectList(Stringstatement,Objectpara meter);ListselectList(Stringstatement,Objectparameter, RowBoundsrowBounds);voidselect(Stringstatement,Objectparame ter,ResultHandlerhandler);插入、更新和删除方法:intinsert(Stringstatemen t);intinsert(Stringstatement,Objectparameter);intupdate(Stri ngstatement);intupdate(Stringstatement,Objectparameter);int delete(Stringstatement);intdelete(Stringstatement,Objectpara meter);其他方法:voidcommit();提交事务的方法。voidrollback();回滚事务的方法。voidcl ose();关闭SqlSession对象。TgetMapper(Classtype);返回Mapper接口的代理 对象。ConnectiongetConnection();获取JDBC数据库连接对象的方法。3.创建SqlSession为了简化 开发,通常在实际项目中都会使用工具类来创建SqlSession。publicclassMybatisUtils{priv atestaticSqlSessionFactorysqlSessionFactory=null;static{t ry{Readerreader=Resources.getResourceAsReader("mybatis-confi g.xml");sqlSessionFactory=newSqlSessionFactoryBuilder().buil d(reader);}catch(Exceptione){e.printStackTrace();}}publi cstaticSqlSessiongetSession(){returnsqlSessionFactory.openS ession();}}7.2配置文件mybatis-config.xml7.2.1主要元素7.2.2es>元素创建db.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=j dbc:mysql://localhost:3306/mybatisjdbc.username=rootjdbc.password =root配置文件:引入数据库配置torytype="com.unknown.mybatistest.factory.MyObjectFactory">:自定义工 厂UBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dt d/mybatis-3-config.dtd">properties"/>type="com.unknown.mybatistest.po.User"/>ectFactorytype="com.unknown.mybatistest.factory.MyObjectFactory" >>--1.2.配置id为mysql的数据库环境-->rcetype="POOLED">"${jdbc.driver}"/>"${jdbc.url}"/>e="${jdbc.username}"/>"value="${jdbc.password}"/>onments>known/mybatistest/mapper/CustomerMapper.xml"/>com/unknown/mybatistest/mapper/UserMapper.xml"/>iguration>7.2.3元素元素主要用于改变MyBatis运行时的行为,例如开启二 级缓存、开启延迟加载等。配置方式如下:abled"value="true"/>true"/>>seGeneratedKeys"value="false"/>ior"value="PARTIAL"/>...7.2.4元素Aliases>元素用于为配置文件中的Java类型设置一个简短的名字,即设置别名。别名的设置与XML配置相关,其使用的意义在于减少 全限定类名的冗余。配置是以下二选一。1.使用元素配置别名的方法如下:< typeAliasalias="user"type="com.unknown.mybatistest.po.User"/>< /typeAliases>2.当POJO类过多时,可以通过自动扫描包的形式自定义别名,具体如下: MyBat is框架默认为许多常见的Java类型提供了相应的类型别名,如下表所示。7.2.5元素typeHandl er的作用就是将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型),或者从数据库取出结 果时将jdbcType转换为javaType。元素可以在配置文件中注册自定义的类型处理器,它的使用方式 有两种。1.注册一个类的类型处理器wn.mybatistest.type.CustomtypeHandler"/>2.注册一个包中 所有的类型处理器ype"/>7.2.6元素MyBatis中默认的ObjectFa ctory的作用是实例化目标类,它既可以通过默认构造方法实例化,也可以在参数映射存在的时候通过参数构造方法来实例化。通常使用默认的 ObjectFactory即可。大部分场景下都不用配置和修改默认的ObjectFactory,如果想覆盖ObjectFactor y的默认行为,可以通过自定义ObjectFactory来实现,具体如下:1.自定义一个对象工厂publicclassMyOb jectFactoryextendsDefaultObjectFactory{privatestaticfinall ongserialVersionUID=-4114845625429965832L;publicTcreate (Classtype){returnsuper.create(type);}publicTcreate (Classtype,List>constructorArgTypes,List |
|