mybatis框架如何实现java语句与数据库语句的分离——映射文件
通过在映射文件中写入动态sql语句,完成增删改查操作。映射文件中的元素都包含在根节点< mapper>< /mapper>下,mapper中一般具有一个namespace的属性,该属性用来指明定义的Dao接口类。例如接口定义如下:
public interface IDao{}
则namespace配置为:
<mapper namespace="IDao">
这里只需对应好相对应的接口就可以了,正是通过这种方式,使Dao接口类不需要利用java语句在程序中进行重写,只需在文件体中写入相应的动态sql语句即可。
常用的元素标签有select,insert,update,delete,也就是对应的“增删改查”操作,跟数据库完全一致。这里需要对元素中常用到的一些参数进行说明:
1. id:这里的id就是对应的接口类中声明的函数名。例如上例中的:
public interface IDao{
List<T> selectById(String id);
}
这是的id=”selectById”,通过这个配置来完成逐个函数的一一对应
2. parameterType:参数的类型.可以是基本类型String,int等,也可以是引用类型或者一个map,注意的是用map传参后不可以直接使用模糊查询,或写成
select * from table where columnId like CONCAT('%',#{Id},'%')
这种格式。
3. resultType和resultMap:这里需要对这两种属性进行区分,在单条返回数据时,两者的作用相同,均是返回数据类型。但当返回多条数据时,只能使用resultMap。
<resultMap id="UserMap" type="User">
<id property="id" column="id" />
<result property="userName" column="userName"/>
<result property="password" column="password"/>
</resultMap>
<select id="selectUsers" resultMap="UserMap">
select id, userName, password from UserTable
</select>
可以看出,使用resultMap这个参数之前,需要对resultMap进行配置,id就是自定义的返回类型,type是返回的数据类型。之后的就是数据表中的关键字,除了id主键外,定义在result属性中与数据表中的关键字列标签为一一对应关系。之后通过select语句可以查询到UserTable表中的所有数据。
4. statementType:有STATEMENT,PREPARED 和 CALLABLE三种。分别对应于Statement,PrepareStatement 和 CallableStatement,默认为PREPARE
针对于insert方法,还有两个常遇到的属性
5. keyProperty:标记一个属性,mybaits框架会调用getGeneratedKeys方法或者通过insert语句中的selectKey子元素来设置值,默认为不需要。
6. useGeneratedKeys:mybatis框架同样调用getGeneratedKeys方法来取出数据内部自增属性的主键,常用的就是id,当需要取id的时候会用到该属性,可用于多张表之间的关联操作,默认是不需要的,设置为false。