MyBatis核⼼配置⽂件标签简介
XML 映射配置⽂件
MyBatis的配置⽂件包含了影响MyBatis⾏为甚深的设置(settings)和属性(properties)信息。⽂档的顶层结果如下:
configuration配置
properties属性
setting设置
typeAliases类型命名
typeHandlers类型处理器
objectFactory对象⼯⼚
plugins插件
environments环境
environment环境变量
transactionManager事务管理器
dataSource数据源
databaseIdProyider数据库⼚商标识
mappers映射
properties
属性都是可外部配置且可动态替换的,既可以在典型的Java属性⽂件中配置,亦可通过properties元素的⼦元素来传递。
例如:
<!--
mybatis的核⼼配置⽂件
1.数据库的连接信息(连接池)
-->
<properties resource="jdbc.properties"></properties>
其中的属性就可以在整个配置⽂件中使⽤来替换需要动态配置的属性值。
⽐如:
做一个小程序需要什么<!-- 默认连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${url}"/>
<property name="username" value="${userid}"/>
<property name="password" value="${password}"/>
aspects什么意思</dataSource>
properties属性:将数据库连接参数单独配置在jdbc.properties中,只需要在l⽂件中加载jdbc.properties的属性值。 在l中就不需要对数据库连接参数硬编码(硬编码是指将可变变量⽤⼀个固定值来代替的⽅法)。在properties 元素体内定义的属性⾸先被读取。然后会读取properties元素中resource或url加载属性,它会覆盖已读取的同名属性。
注意:如果在properties标签⾥⾯定义的属性被${}所引⽤了,对#{}不管⽤。那么它不会读取parameterType⾥⾯的参数值。⽐如properties⾥⾯定义了id属性,值为40,在映射⽂件中引⽤该值,${id}那么我从parameterType⾥⾯传值时,不管我传基本类型还是引⽤类型进去都不会覆盖这个${id}值。始终都会读取40.
属性也可以被传递到SqlSessionBuilder.build()⽅法中。
例如:
SqlSessionFactoryBuilder源码:
public SqlSessionFactory build(Reader reader, Properties properties) {
return build(reader, null, properties);
}
public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
try {
XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
return build(parser.parse());
} catch (Exception e) {
throw ExceptionFactory.wrapException("Error building SqlSession.", e);
} finally {
ErrorContext.instance().reset();
try {
reader.close();
} catch (IOException e) {
/
/ Intentionally ignore. Prefer previous error.
}
}
}
typeAliases
类型别名是为Java类型设置⼀个短的名字。它只和XML配置有关,存在意义仅在于⽤来减少类完全限定名的冗余。
例如:
超实用的小程序<!-- 给类定义别名 -->
<typeAliases>
<typeAlias type="cn.et.lesson02.annotion.Food" alias="food"/>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>
当这样配置时,Blog可以⽤在任何使⽤domain.blog.Blog的地⽅。
也可以指定⼀个包名,MyBatis会在包名下⾯搜索需要的Java Bean
⽐如:
<typeAliases> <package name="domain.blog"/> </typeAliases>
mysql语句的执行顺序每⼀个包domain.blog中的Java Bean,在没有注解的情况下,会使⽤Bean的⾸字母⼩写的⾮限定类名来作为它的别名。⽐如
domain.blog.Author的别名为author;若有注解,则别名为其注解值。看下⾯的例⼦:
@Alias("author") public class Author { ... }
mapper标签(映射配置):加载映射⽂件
<mappers>
<!--
通过resource加载单个映射⽂件
加载单个类路径下的映射⽂件
使⽤相对于类路径的资源:
-->
<mapper resource="cn/et/l"/>
微机唯一能够直接识别和处理的语言是<!--
使⽤类路径加载单个映射⽂件
<mapper url="cn.domarvel.dao.UserMapper"/>
注意:此种⽅法要求mapper接⼝名称和mapper映射⽂件名称相同,且放在同⼀个⽬录中。并且还有⼀个前提是:使⽤的是mapper代理⽅法
-->
<!--
⾃动批量加载指定包下的所有Mapper接⼝配置⽂件
<package name="cn.domarvel.dao"/>
注意:此种⽅法要求mapper接⼝名称和mapper映射⽂件名称相同,且放在同⼀个⽬录中。并且还有⼀个前提是:使⽤的是mapper代理⽅法 -->
</mappers>
Mapper XML⽂件
MyBatis的真正强⼤在于他的映射语句,也是它的魔⼒所在,由于它的异常强⼤,映射器的XML⽂件就显得相对简单。如果拿它跟具有相同功能的JDBC代码进⾏对⽐,你会⽴即发现省掉了将近95%的代码。MyBatis就是针对SQL构建的,并且⽐普通的⽅法做的更好。
mapper标签:映射⽂件的根节点,在根节点中⽀持九个元素。
namespace是⽤于绑定Dao接⼝的,当你的namespace绑定接⼝后,你可以不⽤写接⼝实现类,mybatis会通过该绑定⾃动帮你到对应要执⾏的SQL语句
注意:接⼝中的⽅法与映射⽂件中的SQL语句的ID⼀⼀对应
<mapper namespace="a">
</mapper>
<mapper namespace="cn.l.FoodMapper" >
</mapper>
SQL映射⽂件有很少的⼏个顶级元素(按照它们应该被定义的顺序):
cache:给定命名空间的缓存配置
cache-ref:其命名空间缓存配置的引⽤。
resultMap:是最复杂也是最强⼤的元素,⽤来描述如何从数据库结果集中来加载对象。
parameterMap:已废弃,⽼式风格的参数映射。内联参数是⾸选,这个元素可能在将来被移除,这⾥不会记录。
sql:可被其他语句引⽤的可重⽤语句块。
insert:映射插⼊语句
update:映射更新语句
delete:映射更新语句
select:映射查询语句
select
查询语句是MyBatis中最常⽤的元素之⼀,光能把数据存到数据库中价值并不⼤,如果还能重新取出来才有⽤,多数应⽤也都是查询⽐修改要频繁。对每个插⼊、更新或删除操作,通常对应多个查询操作。这是MyBatis的基本原则之⼀,也是将焦点和努⼒放在查询和结果映射的原因。简单查询的select元素时⾮常简单的。
⽐如
<select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </select>
这个语句被称作selectPerson,接收⼀个int(或Integer)类型的参数,并返回⼀个HashMap类型的对象,其中的键是列名,值便是结果⾏中的对应值。
注意参数符号:#{id}
select元素有很多属性允许你配置,来决定每条语句的作⽤细节。
SELECT多条件查询
parameterType⽤于传递参数多参数可以使⽤传⼊对象以及map的⽅式传递多个参数。
#{}表⽰传递的参数值 类同jdbc的? ${}表⽰直接将参数值替换类同'%值%'
⽐如:
<select id=“selectPerson” parameterType=“map” resultType=“person”>
SELECT * FROM PERSON WHERE ID = #{id} and name like ‘%${name}%’
</select>
Map中必须存在id和name的键值对
SELECT调⽤存储过程
创建存储过程prg_add(p1 in number,p2 in number,p3 out number)
Mybatis映射⽂件中使⽤select调⽤存储过程
<select id=“prgAdd" statementType="CALLABLE"> <![CDATA[
{call pro_hello (
#{p1,mode=IN,jdbcType=NUMBER},
#{p2,mode=IN,jdbcType=NUMBER},
#{result,mode=OUT,jdbcType=NUMBER})}
]]>
</select>
测试调⽤过程
Map<String, String> param = new HashMap<String, String>();
param.put(“p1”, 1); param.put(“p2”, 2);
String returnValue = (String) session.selectOne(" prgAdd ", param);
System.out.println("result=" + ("result"));
房产网System.out.println("returnValue=" + returnValue);
insert、update和delete
数据更变语句insert、update和delete的实现⾮常接近
<insert id="insertAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" keyProperty="" keyColumn="" useGenera <update id="updateAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" timeout="20">
<delete id="deleteAuthor" parameterType="domain.blog.Author" flushCache="true" statementType="PREPARED" timeout="20">
insert、update和delete参数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论