1.持久化和orm
总结参考
1.持久化:从瞬时到持久又从持久到瞬时的一个过程称为持久化atis.org/mybaturation.html
2.orm :定义:对象关系映射Object relatation mapper
mapper.xml ---->实体类mybatis核心mybatis
⒉核心对象
1.SqlsesionFactory mybatisutil定义成了成员变量
作用域:全局
生命周期:应用的生命周期相同2.SqlSessionFactoryBuild
作用域:局部
生命周期:只限于方法体类
3.SqlSession
作用域:一次请求request一次会话生命周期一次会话
3.mybatis的mybatis-config.xml
MyBatis 的配置文件包含了会深深影响MyBatis行为的设置和属性信息。配置文档的顶层结构如下:. configuration(配置)
o properties(压性)_配置database.properties这个文件o settings(设置)_配置日志自动映射缓存懒加载o typeAliases(类型别名)
o typeHandlers (类型处理器)o objectFactory_(对象工厂)o plugins (插件)
o environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)dataSource(数据源)
o databaseldProvider (数据库厂商标识)o mappers(映射器)
1。properties属性
<properties resource="文件路径"></properties>
2.settings属性logback.xml
这是MyBatis 中极为重要的调整设置,它们会改变MyBatis的运行时行为。下表描述了设置中各项设置的含义、默认值等。设置名
描述
有效值
默认值
cacheEnabled
全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
true | false
true
仍可正常工作(如Derby) .
autoMappingBehavior
指定MyBatlis应如何自动映射列到字段或属性。NONE表示关闭自动映NONE,PARTIAL,FULL PARTIAL射;PARTIAL只会自动映射没有定义嵌套结果映射的字段。FULL 会自
动映射任何复办的结果集(无论是否嵌套)。
未
loglmpl
指定MyBatis所用日志的具体实
SLF4] |LOG4](3.5.9起废弃)|LOG4J2|JDK_LOGGING|
现,未指定时将自动查找。
COMMONS_LoGGING | STDOUT_LOGGING | NO_LOGGING
设置
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="autoMappingBehavior" value="PARTIAL"/></ settings>
3类型别名(typeAliases)
类型别名可为Java类型设置一个缩写名字。它仅用于XML配置,意在降低冗余的全限定类名书写。例如;
<typeA7iases>
<paclkage name="实体类的包名"/></typeAliases>
4/环境配置(environments)
MyBatis可以配置成适应多种环境,这种机制有助于将SQL映射应用于多种数据库之中,现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同Schema的多个生产数据库中使用相同的SQL映射。还有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个SqlSessionFactory'实例只能选择一种环境。
<environments defau1t="development">
<environment id="development"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager>
<datasource type="POOLED">
<property name="driver" value="${driver}" /><property name="ur7" value="${ur1}"/>
<property name="username" value="${username}" /><property name="password" value="${password}" /></ datasource>
</environment></ environments>
4.mapper.xml映射文件
XML映射器
MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的XML文件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进行对比,你会立即发现省掉了将近95%的代码。MyBatis致力于减少使用成本,让用户能更专注于SQL代码。sQL映射文件只有很少的几个顶级元素(按照应被定义的顺序列出)∶
cache -该命名空间的缓存配置。
cache-ref-引用其它命名空间的缓存配置。
resultMap -描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。
parameterMap -老式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使用行内参数映射。文档中不会介绍此元素。 sq1-可被其它语句引用的可重用语句块。
insert-映射插入语句。
update-映射更新语句. delete-映射删除语句。select’-映射查询语句。
1.查询select
多参入参
1.实体类
<select id="selectPerson" parameterType="sysuser" resu7tType="hashmap">SELECT *FROM PERSON WHERE ID = #{id} and rea1Name=#{rea1Name}
</select>
2.map保证你的key值和#{名字}相同
<select id="selectPerson" parameterType="java.uti1.Map" resultType="sysUser">SELECT *FROM PERSON limit#{pageIndex} ,#{pagesize}
</ select>
3.@Param如果入参的列名在实体类里面没有就需要自己指定保证@Param和#→名字一样
/☆棍
map传参r @return* /
SysUser queryUserNameAndPasswordLimit(@Param("pageIndex") Integer pageIndex,@Param("pageSize")Integerpagesize);
<select id="selectPerson" parameterType="sysUser" resultType="hashmap"">
SELECT *FROM PERSON 1imit#{pageIndex] ,#{pagesize}
</select>
4.List批量插入删除
<l---动态sq7-->
<select id="getuserByAddressIn" resultType="sysuser" parameterType="java.uti1.List">
select fromt_sysuser whereaddress in
<foreach collection="addressList" item="address" open=" (" separator="," close=")"">
#{address}
</foreach></select>
5.单个数据类型
2.联表查询ResultMap assicotion collection
1 --1 ( 2) 1
<! --非常复杂的结果映射-->
<resu7tMap id="detailedB1ogResu1tMap" type="B1og"><constructor>
<idArg column=""b1og_id" javaType="int" /></ constructor>
<result property="title" column="b1og_title"/><association property="author" javaType="Author"><id property="id" column="author_id"/>
<result property="username" column="author_username" /><result property="password" column="author_password" /><result property="emai1" column="author_emai7"/>
<result property="bio" column="author_bio" />
<result property="favouriteSection" column="author_favourite_section" /></association>
<co1lection property="posts" ofType="Post"><id property="id" column="post_id"/>
<result property="subject" column="post_subject" /><association property="author" javaType="Author" /><co1lection property="comments" ofType="Comment"><id property="id" column="comment_id" />
</collection>
<co1lection property-"tags" ofType="Tag" ><id property="id" column="tag_id" />
</co1lection>
<discriminator javaType="int" column="draft"><case value=""1" resu1tType="DraftPost"/></discriminator>
</collection>
</resultMap>
结果映射(resultMap)
constructor
-用于在实例化类时,注入结果到构造方法中
oidArg - ID参数;标记出作为ID的结果可以帮助提高整体性能arg-将被注入到构造方法的一个普通结果
id -一个ID结果;标记出作为ID的结果可以帮助提高整体性能
result-注入到字段或JavaBean 属性的普通结果
. association一对一―多对一
-—个复杂类型的关联;许多结果将包装成这种类型
。嵌套结果映射–关联可以是resu1tMap元素,或是对其它结果映射的引用
co7lection一对多
-—个复杂类型的集合
。嵌套结果映射–集合可以是resultMap元素,或是对其它结果映射的引用
discriminator
–使用结果值来决定使用哪个
resu7tMap
3.动态SQL
动态SQL是MyBatis 的强大特性之一。如果你使用过JDBC或其它类似的框架,你应该能理解根据不同条件拼接SQL语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态SQL,可以彻底摆脱这种痛苦。
使用动态SQL并非一件易事,但借助可用于任何SQL映射语句中的强大的动态SQL语言,MyBatis 显著地提升了这一特性的易用性。如果你之前用过JSTL或任何基于类XML语言的文本处理器,你对动态SQL元素可能会感觉似曾相识。在MyBatis之前的版本中,需要花时间了解大量的元素。借助功能强大的基于OGNL的表达式,MyBatis 3替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
if
choose (when, otherwise)· trim (where, set)
- foreach
1。if+trim查询set if +trim修改
trim prefix加前缀 prefixOverrides忽略前缀suffix加后缀update拼接忘记suffixOverrides 忽略后缀
<trim prefix="WHERE" prefixoverrides="AND |OR ">
...
</trim>
bind
bind元素允许你在OGNL表达式以外创建一个变量,并将其绑定到当前的上下文。比如:
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() +'%""/>
SELECT *FROM BLOG
WHERE title LIKE #{pattern}
</select>
重点功能联表动态salforeach核心v对象二个