一、mybatis配置文件sqlmapconfig.xml
该配置文件一般需要配置数据源,别名的定义,加载属性文件的定义,全局参数配置(如开启二级缓存),加载映射文件的配置等
1、配置数据源(与spring整合后将不需要配置)
<environments default="development"> <environment id="development"> <!-- 事务控制--> <transactionManager type="JDBC" /> <!-- 数据库连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments>
2、别名的定义(定义了别名在配置mapper的映射文件时就不用写类的完全限定名了,一般直接指定包名)
<!-- 定义别名 --> <typeAliases> <!-- 批量别名定义 指定包名,mybatis自动扫描包中的po类,自动定义别名,别名就是类名(首字母大写或小写都可以) --> <package name="cn.itcast.mybatis.po"/> </typeAliases>
3、加载属性文件(如db.properties文件,这样分开来写方便后期维护)
<!-- 加载属性文件 --> <properties resource="db.properties"> <!--properties中还可以配置一些属性名和属性值 --> <!-- <property name="jdbc.driver" value=""/> --> </properties>
4、全局参数配置(需要时开启,如开启二级缓存)
<settings> <!-- 打开延迟加载 的开关 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 将积极加载改为消极加载即按需要加载 --> <setting name="aggressiveLazyLoading" value="false"/> <!-- 开启二级缓存 --> <setting name="cacheEnabled" value="true"/> </settings>
5、加载Mapper的映射文件
<mappers> <!--通过resource方法一次只能加载一个映射文件 --> <mapper resource="sqlmap/UserMapper.xml"/> <!-- 批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载 遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中 --> <package name="cn.itcast.mybatis.mapper"/> </mappers>
二、XXXMapper.xml文件解析
一般在该文件中需要我们根据实际需求写各种sql,增删改查对应的标签为<insert/><delete/><update/><select/>,下面主要详细记录这些标签中的一些属性以及XXXMapper.xml中其他常用且实用的标签
1、增删改查等标签的各个属性
1.1、id(必配):起到唯一标识作用,mapper中的对应方法名需要与该id一致;
1.2、parameterType(根据具体需求)
parameterType即输入参数类型,如果需要有条件查询则需配置该属性,其可以指定输入参数的类型(可以是简单形,map,pojo及其的包装类)。
1.3、resultType(根据具体需求)
resultType即输出参数类型,如果需要sql返回结果则需配置该属性,其可以指定输出参数的类型。需要注意的是,使用该属性需要使查询到的列名与该属性的值(一般为实体类)一致,否则会导致输出映射的数据不全或是失败
1.4、resultMap(根据具体需求)
resultMap也能指定输出参数的类型,但相比于resultType其不要求查询到的列名与其属性值的属性名一致,适用于多表查询或对于查询结果有特殊要求的需求,但是它需要单独配置,一般配置如下:
<!-- 定义resultMap 将SELECT id id_,username username_ FROM USER 和User类中的属性作一个映射关系 type:resultMap最终映射的java对象类型,可以使用别名 id:对resultMap的唯一标识,也就是select等标签中resultMap的属性值 --> <resultMap type="user" id="userResultMap"> <!-- id表示查询结果集中唯一标识 column:查询出来的列名 property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) --> <id column="id_" property="id"/> <!-- result:对普通名映射定义 column:查询出来的列名 property:type指定的pojo类型中的属性名 最终resultMap对column和property作一个映射关系 (对应关系) --> <result column="username_" property="username"/> </resultMap>
2、其他常用标签
2.1、sql片段
在配置文件中有时候某一sql或是列名我们会重复使用,我们可以将他们提取出来放在我们定义的sql片段中,一般配置如下:
定义sql片段:
<!-- id:sql片段的唯 一标识 注意:是基于单表来定义sql片段,这样的话这个sql片段可重用性才高在sql片段中不要包括 where --> <sql id="query_user_where"> <!-- 这里可以写sql、列名等,也可以写if、foreach标签 --> </sql>
调用sql片段:
<!-- 引用sql片段的id,如果refid指定的id不在本mapper文件中,需要前边加namespace --> <include refid="query_user_where"></include>
2.2、if标签
在开发中我们会遇到一些需求,如对查询条件进行判断,如果输入参数不为空才进行查询条件拼接。使用if标签就不用我们在业务层对参数进行判断而是直接在配置文件中进行判断,下面展示一个实例:
<!-- where标签可以自动去掉拼接的查询条件中的第一个and,不至于会报错 --> <where> <if test="填if()中的表达式,返回结果为boolean型"> and user.sex = #{userCustom.sex} </if> </where>
2.3、foreach
如果参数是一个list的话我们需要遍历该list,这就需要使用foreach标签了,配置可参考下面的代码:
<!-- 使用 foreach遍历传入ids collection:指定输入对象中集合属性 item:每个遍历生成对象 open:开始遍历时拼接的串 close:结束遍历时拼接的串 separator:遍历的两个对象中需要拼接的串 --> <!-- 使用实现下边的sql拼接: AND (id=1 OR id=10 OR id=16) --> <foreach collection="ids" item="user_id" open="AND (" close=")" separator="or"> <!-- 每个遍历需要拼接的串 --> id=#{user_id} </foreach>
2.4、占位符
${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中,使用${}拼接sql,引起 sql注入
${value}:接收输入 参数的内容,如果传入类型是简单类型,${}中只能使用value
至此,mybatis中用到的配置文件的解析就差不多记完了,下篇准备记录mybatis的延迟加载和缓存。