Mybatis 框架 3

来源:互联网 发布:mac终端查询ip地址 编辑:程序博客网 时间:2024/06/05 18:01

SqlMapConfig.xml里的配置

这里是eclipse的代码提示所有的配置信息

这里写图片描述

1.properties配置说明

<!--通过外部的db.properties一次性配置里面的property  ${username}为取值方法--><properties resource="db.properties"></properties><!--内部可以做多个property效果等同配置文件里的--><!--url配置的是带协议的地址 如 http:开头的地址--><properties resource="db.properties" url="">        <property name="username" value="scott"/>    </properties>

一般正常都是统一配置在外部或者统一配置在内部,如果一起配置存在重复的name ,
外部的配置会覆盖内部的

2.settings全局参数

mybatis框架在运行时可以调整一些运行参数,比如:开启二级缓存、开启延迟加载等
全局参数将会影响mybatis的运行行为。
详细参见MyBatist参考手册
这里写图片描述

<settings>        <setting name="cacheEnable" value="true"/></settings>

3.typeAliases取别名

在mapper.xml中,定义的statement需要parameterType指定输入参数的类型、需要resultType指定输出结果的映射类型。如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,方便开发。

<!--情况1:单个取别名--><!--SqlMapConfig.xml中--><typeAliases>        <typeAlias type="com.nue.model.emp" alias="emp"/></typeAliases><!--关联的mapper.xml中--><!--原<select id="selectUser" parameterType="int" resultType="com.nue.model.emp"></select>--><select id="selectUser" parameterType="int" resultType="emp"></select>
<!--情况2:批量取别名--><!--SqlMapConfig.xml中--><typeAliases>        <package name="com.nue.model"/></typeAliases><!--关联的mapper.xml中--><!--返回的对象类型emp要在com.nue.model的emp.java保持名相同 但可以不区分大小写--><select id="selectUser" parameterType="int" resultType="emp"></select><!--原<select id="selectUser" parameterType="int" resultType="com.nue.model.emp"></select>-->

4.typeHandlers

用于处理 java —>数据库 的类型转换 比如:int 到 oracle的 number形
框架已经配置好 不需要我们再进行设定,可以忽略它

5.environments

可以配置多个环境
default:当使用多个环境时 运行过程中默认采取id与default相同的环境

和spring整合后environments 配置将废弃

<environments default="ccc">        <environment id="ccc">....</environment>        <environment id="xxx">....</environment></environments>

6.mapper

配置映射文件
可以单个配置 可以多个整合配置

<!-- <mapper    class="myBatisTest.dao.UserDao"/> --><!-- <mapper resource="myBatisTest/dao/UserDao.xml"/>  --><package name="myBatisTest.dao"/> 

第一条 通过dao包的一个UserDao.java接口文件找到同名的UserDao.xml配置文件 必须同名
第二条 直接关联UserDao.xml
第三条 将dao包所有配置导入

7.映射文件mapper.xml中

  1. cache – 配置给定模式的缓存
  2. cache-ref – 从别的模式中引用一个缓存
  3. resultMap – 这是最复杂而却强大的一个元素了,它描述如何从结果集中加载对象
  4. sql – 一个可以被其他语句复用的SQL 块
  5. insert – 映射INSERT 语句
  6. update – 映射UPDATE 语句
  7. delete – 映射DELEETE 语句
  8. select - 映射SELECT语句

7.MyBatis核心对象

SqlSessionFactory

一旦被创建,SqlSessionFactory 应该在你的应用执行期间都存在。没有理由来处理或重 新创建它。
使用 SqlSessionFactory 的最佳实践是在应用运行期间不要重复创建多次。 这样的 操作将被视为是非常糟糕的。
因此 SqlSessionFactory 的最佳范围是应用范围。 有很多方法可 以做到, 最简单的就是使用单例模式或者静态单例模式。
mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

SqlSession

SqlSession是一个面向用户(程序员)的接口。
SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。
SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。
SqlSession最佳应用场合在方法体内,定义成局部变量使用。

8.开发dao的原始方法与mapper方法

原始方法

这里写图片描述

程序员需要写dao接口和dao实现类。
需要向dao实现类中注入SqlSessionFactory,
在方法体内通过SqlSessionFactory创建SqlSession

原始dao开发问题

1、dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,
大大减轻程序员的工作量。
2、调用sqlsession方法时将statement的id硬编码了
3、调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,
即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

mapper代理方法

程序员只需要mapper接口和mapper.xml映射文件,mybatis可以自动生成mapper接口实现类代理对象。
程序员编写mapper接口需要遵循一些开发规范。
mapper代理开发规范
1、在mapper.xml中namespace等于mapper接口地址
2、mapper.java接口中的方法名和mapper.xml中statement的id一致
3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的
parameterType指定的类型一致。
4、mapper.java接口中的方法返回值类型和mapper.xml
中statement的resultType指定的类型一致。

总而言之可以把dao的实现类给干掉