初学Mybatis的注意点

Mr_Czg

发布于 2018.01.26 16:26 阅读 2774 评论 0

一、Mybatis解决jdbc编程的问题

1、数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。

2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

二、xml中配置文件 设置映射注意点

 1.   <mapper resoure=""/> 方式
    使用相对路径的 资源 

    例如:<mapper resource="sqlmap/User.xml" />
2. <mapper class=""/>
    使用mapper接口路径
    例如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中
3. <package name=""/>
    注册指定包下的所有Mapper 接口
    例如:<package name="cn.itcast.mybatis.mapper"/>
    注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中

三、resultMap和resultType 区别:

    当配置resultType时,就不需要配置resultMap,看似resultType方便,但是会被受限制,没有resultMap开放多。

    相同点:都是表示查询结果集的类型。

    不同点:resultMap需要手动配置映射关系,而resultType是直接指定java类型或者自定义的实体类型,查询结果集的列名必须和实体属性名称一致(实体类:名称大小写可以忽略;java类型,如Map集合的key大小写要一致,尽量都大小写规范,如果不放心可以select ID id,...)。

优缺点:

    1、resultType结果集列名要与java属性名一样,但是resultMap不受限制,因为resultMap有column来规定。

    2、由于SQL类型与Java中类型部分不匹配,resultMap可以通过typeHandler=""来匹配(如:SQL中的0和1来表示java中的false和true;Date类型的转换),但是resultType无能为力。




四、parameterMap和patameterType区别:

表示传入参数的对应关系,前者不推荐使用,只是mybatis为了适应以前的版本。

提示:看到Map字眼的想到映射关系,看到Type字眼的想到类型。

    五、#{}和${}区别

相同点:都是用来作为占位符。

不同点:#{}在预编译的时候会呗替换为?,而${}在预编译的时候直接将变量的值替换进去,而且没有引号(所以还要加上“'${...}'”),故一般都是用前者,个别情况会使用后者:如需进行排序,且排序字段为参数时可以使用${}(order by后面不喜欢被预编译,所以使用${}更为恰当)。