设为首页 收藏本站
查看: 962|回复: 0

[经验分享] mybatis的sql映射配置文件

[复制链接]

尚未签到

发表于 2016-11-26 09:42:23 | 显示全部楼层 |阅读模式
 
插入后返回ID
 
<selectKeyresultType="int" keyProperty="bean.id">
 select last_insert_id() as ID from users limit1
</selectKey>
 
 
 
 
<?xmlversion="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mappernamespace="pageAccessURL" >
 
<!--
l cache - 配置给定命名空间的缓存。
l cache-ref – 从其他命名空间引用缓存配置。
l resultMap – 最复杂,也是最有力量的元素,用来描述如何从数据库结果集中来加载你的对象。
l parameterMap – 已经被废弃了!老式风格的参数映射。内联参数是首选,这个元素可能在将来被移除。这里不会记录。
l sql – 可以重用的SQL块,也可以被其他语句引用。
l insert – 映射插入语句
l update – 映射更新语句
l delete – 映射删除语句
l select – 映射查询语句
-->
 
<!--默认不开启二级缓存,开启缓存<cache eviction="FIFO" flushInterval="60000"size="512" readOnly="true"/>
eviction:缓存策略eviction = LRU、FIFO、SOFT、WEAK(默认LRU)
1)LRU:最近最少使用的:移除最长时间不被使用的对象
2)FIFO:先进先出:按对象进入缓存的顺序来移除它们。
3)SOFT:软引用:移除基于垃圾回收器状态和软引用规则的对象。
4)WEAK:弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
    flushInterval:刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒形式的时间段。
     默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。
    size:引用数目可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的可用内存资源数目。默认值是1024。
   readOnly:属性可以被设置为true或false。只读的缓存会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。
   这提供了很重要的性能优势。可读写的缓存会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是false。
   ----------------------------------------------------------------------------------------------
    使用自定义缓存
<cachetype=”com.domain.something.MyCustomCache”>
<propertyname=”cacheFile” value=”/tmp/my-custom-cache.tmp”/>
</cache>
    type属性指定的类必须实现org.mybatis.cache.Cache接口
   ----------------------------------------------------------------------------------
    引用另外的缓存<cache-refnamespace=”com.someone.application.data.SomeMapper”/>
-->
 
 
<!-- 
select元素:
1)parameterType:参数类型
2)resultType:从这条语句中返回的期望类型的类的完全限定名或别名。
注意集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用。
3)resultMap:命名引用外部的resultMap。返回map是MyBatis最具力量的特性,对其有一个很好的理解的话,许多复杂映射的情形就能被解决了。
使用resultMap或resultType,但不能同时使用。
4)flushCache:是否清空缓存,默认false,不清空,如果为true每次查询都会清空缓存。
5)useCache:将其设置为true,将会导致本条语句的结果被缓存。默认值:true。
6)fetchSize:这是暗示驱动程序每次批量返回的结果行数。默认不设置(驱动自行处理)。
7)statementType:STATEMENT,PREPARED或CALLABLE的一种。这会让MyBatis使用选择使用
Statement,PreparedStatement或CallableStatement。默认值:PREPARED。
8)resultSetType:FORWARD_ONLY|SCROLL_SENSITIVE|SCROLL_INSENSITIVE中的一种。默认是不设置(驱动自行处理)。
-->
<!--这里的pageAccessURL是由typeAliases定义的 -->
 
<selectid="selectPageAccessURL" parameterType="int"resultType="pageAccessURL" >
select* from tables where URL_ID = #{id}
</select>
 
<selectid="selectPageAccessURLByClass"parameterType="pageAccessURL"resultType="pageAccessURL">
select* from tables where URL_ID = #{urlId} and URL = #{url}
</select>
 
<!-- 
sql:这个元素可以被用来定义可重用的SQL代码段,可以包含在其他语句中。
-->
<sqlid="usercolumns">URL_ID asurlId,url,moduleId,state,mark</sql>
<selectid="selectPageAccessURL2" parameterType="int"resultType="pageAccessURL">
select<include refid="usercolumns" /> 
fromtables where URL_ID = #{id}
</select>
 
<!--动态sql语句 使用OGNL表达式-->
 
<!-- 
resultMap元素:
1)constructor:类在实例化时,用来注入结果到构造方法中
a)idArg:ID参数;标记结果作为ID可以帮助提高整体效能
b)arg:注入到构造方法的一个普通结果
2)id:一个ID结果;标记结果作为ID可以帮助提高整体效能
3)result:注入到字段或JavaBean属性的普通结果
4)association:一个复杂的类型关联;许多结果将包成这种类型
5)collection:复杂类型的集
6)discriminator:使用结果值来决定使用哪个结果映射
a)case:基于某些值的结果映射
---------------------------------------------------        
resultMap下id、result 元素:
    1)property:映射到列结果的字段或属性
   2)column:从数据库中得到的列名,或者是列名的重命名标签。这也是通常和会传递给resultSet.getString(columnName)方法参数中相同的字符串。
   3)javaType:一个Java类的完全限定名,或一个类型别名(参加上面内建类型别名的列表)。如果你映射到一个JavaBean,MyBatis通常可以断定类型。
   然而,如果你映射到的是HashMap,那么你应该明确地指定javaType来保证所需的行为。
   4)jdbcType:在这个表格之后的所支持的JDBC类型列表中的类型。JDBC类型是仅仅需要对插入,更新和删除操作可能为空的列进行处理。
   这是JDBC的需要,而不是MyBatis的。如果你直接使用JDBC编程,你需要指定这个类型-但仅仅对可能为空的值。
   5)typeHandler:。使用这个属性,你可以覆盖默认的类型处理器。这个属性值是类的完全限定名或者是一个类型处理器的实现,或者是类型别名。
resultMap下constructor 元素:将查询到的对象映射到javabean时,如果javabean的构造函数有参数,则可以使用该元素来指定
resultMap下association 元素:关联,比如查询博客和该博客的用户,通过博客关联用户,association里面就是用户属性。
resultMap下collection 元素:集合,一个博客下有很多文章,collection就是存放文章的集合属性。
resultMap下discriminator 元素:鉴别器,有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。
鉴别器元素就是被设计来处理这个情况的,还有包括类的继承层次结构。鉴别器非常容易理解,因为它的表现很像Java语言中的switch语句。
<resultMapid="detailedBlogResultMap" type="Blog">
<constructor>
<idArgcolumn="blog_id" javaType="int"/>
</constructor>
<resultproperty="title" column="blog_title"/>
<associationproperty="author" column="blog_author_id" javaType="Author">
<idproperty="id" column="author_id"/>
<resultproperty="username" column="author_username"/>
<resultproperty="password" column="author_password"/>
<resultproperty="email" column="author_email"/>
<resultproperty="bio" column="author_bio"/>
<resultproperty="favouriteSection"column="author_favourite_section"/>
</association>
<collectionproperty="posts" ofType="Post">
<idproperty="id" column="post_id"/>
<resultproperty="subject" column="post_subject"/>
<associationproperty="author" column="post_author_id"javaType="Author"/>
<collectionproperty="comments" column="post_id" ofType="Comment">
<idproperty="id" column="comment_id"/>
</collection>
<collectionproperty="tags" column="post_id" ofType=" Tag">
<idproperty="id" column="tag_id"/>
</collection>
<discriminatorjavaType="int" column="draft">
<casevalue="1" resultType="DraftPost">
<resultproperty=”doorCount” column="door_count" />
</case>
</discriminator>
</collection>
</resultMap>               
-->
 
<!--insert 元素:
1)useGeneratedKeys:这会告诉MyBatis使用JDBC的getGeneratedKeys方法来取出由数据
(比如:像MySQL和SQLServer这样的数据库管理系统的自动递增字段)内部生成的主键。默认值:false。
2)keyProperty:标记一个属性(自动生成的那个属性,比如主键id),MyBatis会通过getGeneratedKeys或者通过insert语句的selectKey子元素设置它的值。默认:不设置。
 
-->
<insertid="insertTest" >
<!-- 
selectKey:在插入数据前先执行selectKey语句,将返回的值作为keyProperty属性值插入
1)order:这可以被设置为BEFORE或AFTER。如果设置为BEFORE,那么它会首先选择主键,设置keyProperty然后执行插入语句。
如果设置为AFTER,那么先执行插入语句,然后是selectKey元素-这和如Oracle数据库相似,可以在插入语句中嵌入序列调用。        
2)statementType:和前面的相同,MyBatis支持STATEMENT,PREPARED和CALLABLE语句的映射类型,分别代表PreparedStatement和CallableStatement类型。
-->
<selectKeykeyProperty="id" resultType="int" order="BEFORE"statementType="PREPARED">
SELECTFLOOR(1 + (RAND() * 1000000));
</selectKey>
insertinto table values(xx,xx);
</insert>
 
 
</mapper>
 
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305746-1-1.html 上篇帖子: mybatis 参数为id的坑 下篇帖子: Mybatis 一对多(OneToOne)关系映射
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表