mybatis映射器文件配置
来源:互联网 发布:nba1516数据库· 编辑:程序博客网 时间:2024/06/04 23:18
所谓的映射器可以理解为前面配置的mapper.xml文件,在这个文件中我们通过namespace将配置和指定的Dao层接口关联起来,准确的来说是为每个Dao层接口中的方法配置具体的sql语句;另外mapper文件中还可以为查询语句灵活的配置返回结果对象(javaBean),根据需要构建动态sql等功能。在映射器中可以定义的元素有select insert delete update等代表具体sql操作类型的元素,另外还有sql(预定义好的一部分sql语句,可以在其它地方引用),resultMap(用来实现从数据库查询结果集到Java对象的映射,是最复杂和强大的元素),cache(给定命名空间的缓存配置),cache-ref(其它命名空间缓存配置)。下面来看下这些元素的具体配置。
1.select元素
select元素可以说是最强大也是最常用的sql元素,基本的过程是在执行查询之前需要指定参数的类型,这个类型可以是简单的int float,也可以是复杂的JavaBean,Map等元素
在执行查询之后,可以通过ResultMap将查询结果映射为指定的Java Bean。具体的可配置参数如下,
parameterType:用于指定从接口传入参数的类型,参数可能是基本类型也有可能是Java Bean或其它集合类型.对于单个参数,可以直接用参数名引用,对于多个参数(无论是多个java Bean还是多个普通类型的参数,其实都是以Map形式传入的,如果使用了@param注解,那么Map的key就是注解中的参数名,如果只有一个参数,则可以直接通过名字引用否则就只能通过下标形式进行引用),传入Collections集合的处理(比如传入一个基本类型的list,或传入一个Java Bean类型的list)。
一个简单例子:统计名称中包含指定关键词的商品数目。
<select id="countProductByName" parameterType="string" resultType="int"> select count(1) as total from product where product_name like concat('%',#{productName},'%') </select>
这里通过id来标识这条sql对应的方法,parameterType定义参数类型,resultType定义返回值类型。
自动映射:如果只要返回的数据库字段和javaBean的属性一致,Mybatis就会帮助我们回填这些字段,而无需额外的配置。autoMappingBehavior属性可以用来指定是否需要开启这种自动映射,有三个可选项:NONE(取消自动映射) PARTIAL(只会自动映射,没有定义嵌套结果集映射的结果集) FULL(会自动映射任意复杂的结果集,包括嵌套结果集情况)。默认的是PARTIAL,只会映射当前对象,使用FULL嵌套映射,性能可能会下降。如果数据库是下划线命名方式而JavaBean是驼峰式,那么可以在setting中配置mapUndersorceToCamelCase为true,实现下划线转驼峰.自动映射的JavaBean是通过resultType属性指定的。
多参数传递:少量参数使用@Param方式注解,在mapper.xml文件中可以直接通过@Param指定的名字进行引用;大量参数可以封装成JavaBean传入,通过ParameterType指定参数类型之后,在mapper.xml文件中,可以通过JavaBean的属性名称进行引用。对于单个参数,可以直接传递,直接通过名字引用。当参数数目比较少的时候,可以通过@Param方式传入,如果参数
数目过多,可以封装成Java Bean的形式传入,如果传入的参数中既有基本类型又有JavaBean类型,则还是需要通过@Param参数进行区分。
2.insert元素
insert元素比select元素简单很多,mybatis会在插入之后返回一个整数,表示插入的条数;对于insert元素来说,和select一样,首先都需要关注参数的
传递.可以配置的属性一些和select元素是相同的,另外一些是特有的,主要看下特有的属性。
insert中的主键回填:
如果在数据库中定义了自增主键,那么在有些情况下在插入数据之后希望能获得生成的主键以便进行另外的操作。在mybatis中设置了keyProperty和keyColumn之后,再把useGeneralKeys设为true,则可以实现主键的回填。
使用SelectKey实现自定义主键:
如果数据库不支持自动生成主键或者数据库默认生成主键的规则不能满足我们的要求,那么可以通过这个元素来进行主键的生成,可以配置的属性:
keyProperty:需要被selectKey语句设置的目标属性列名
resultType:结果类型,一般mybatis可以默认计算出
order:可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。
其实在selectKey中只是给propertyKey指定的属性赋了一个值,这个值甚至可以是完全随机的,也可以是根据mybatis现有主键值进行生成的。
3.update和delete元素
这两个元素和insert元素类似,都是返回操作影响的行数,主要需要关注的是参数的传递。总的来说,映射文件中配置的select insert update和delete几个sql元素,对应的就是sql中的几个语句.对于这些元素来说,都需要关心的是参数的传递,sql语句的组织(动态sql),另外对于select元素来说还需要关心查询结果的映射。对于参数的传递,可以配置的属性是parameterType 对于结果集的映射主要通过resultMap元素来进行配置。这两个属性在上面都已经涉及到,至于动态sql的拼装,会在后面进行学习。
4.sql元素
sql元素的作用在于预先定义好一个sql的片段,然后在其它地方就可以直接引用。最简单的示例如下:
<sql id="columns"> branch_id,name,city,state,zip </sql> <select id="test" resultType="branch"> select <include refid="columns"/> from branch where branch_id=#{branchId} </select>
更复杂一点,还可以往sql中传入动态的属性,注意这里的变量不能用#定义而要用$定义,如下:
<sql id="columns"> ${prefix}.branch_id,${prefix}.name,${prefix}.city,${prefix}.state,${prefix}.zip </sql> <select id="test" resultType="branch"> select <include refid="columns"> <property name="prefix" value="branch"/> </include> from branch where branch_id=#{branchId} </select>
5.resultMap属性
前面在select元素已经提到了resultMap元素,这里进行更详细的了解。目前来说,resultMap的主要作用是实现结果集的映射以及配置类型转换器。
首先来看下resultMap元素的构成,前面用到的主要是id和result两个元素,但是除此之外还有很多其它元素,所有可配置的属性如下:
<resultMap> <constructor> <idArg/> <arg/> </constructor> <id/> <result/> <association/> <collection/> <discriminator> <case/> </discriminator></resultMap>
constructor元素用来配置构造器,适用于有些JavaBean没有提供无参构造器的情况,比如Branch对象只有一个 public Branch(int branch_id, String name)形式的构造器,那么就需要配置如下的constructor元素,这样mybatis才知道需要那个构造器来构造POJO对象。
<constructor> <idArg column="branch_id" javaType="int"/> <arg column="name" javaType="string"/> </constructor>
这里的int 和string都是mybatis默认定义的系统别名,分别对应Integer和String类型。
id元素用来指明那个列是表的主键,如果有是联合主键,则可以配置多个id元素,result用来定义数据库列名到POJO属性的映射。
id和result元素都有以下属性可以进行配置:
property //POJO中属性名 columns //数据库中列名 javaType //属性的Java类型 jdbcType //列对应的数据库类型 typeHandler //数据库类型向Java类型转换的转换器
此外的association collection discriminator都是和级联相关的几个字段,暂时不做介绍。
- mybatis映射器文件配置
- MyBatis之XML文件配置实现映射器Mapper
- Mybatis SQL语句映射文件的配置
- mybatis 生成映射文件generatorConfig.xml配置
- mapper.xml映射文件配置 mybatis
- mybatis映射器配置细则
- MyBatis的XML映射文件、映射器
- mybatis-generator-core生成配置mybatis映射文件
- spring+mybatis整合,不需要配置映射文件,多路径配置
- mybatis配置关联映射
- mybatis 找不到映射器xml文件解决方法
- mybatis映射文件语法
- mybatis之映射文件
- MyBatis映射文件
- mybatis--映射文件详解
- Mybatis映射文件
- Mybatis映射文件
- Mybatis映射文件
- Find All Numbers Disappeared in an Array(leetcode)
- [Lucas定理+中国剩余定理]1951—— [Sdoi2010]古代猪文
- 程序员必备的11个辅助开发的软件神器
- 阿里云ECS如何部署并运行一个JavaWeb项目
- poj 2385
- mybatis映射器文件配置
- 神经网络 opencv实现
- u盘安装centos7.2
- 使用LVS实现负载均衡原理及安装配置详解
- 基于C#的异步Socket程序(TCP)
- Linux 制作回收站
- mvp_greendao_recyclerview_fresco_retrofit2_butterknife_eventbus_ViewPage
- 自定义控件实现轮播图
- 第14周项目2- 用哈希法组织关键字