发表于: 2017-08-23 23:17:22

2 1067


今天学习了mapper.xml的写法,了解到Mybatis可以通过mapper.xml接口绑定,只需编写好xml文件,无需编写数据操作类。写了个不完善待修改的xml文件(代码链接)。

>>关于类文件的别名:在MybatisConfig.xml的Configuration中,添加属性typeAlias即可:

<typeAlias type="cn.cage.Student" alias="Student"/>
  1. 头文件(1~2行):同上,这里是约束mapper元素的结构为链接中的DTD文件所约束的那样。
  2. 命名空间(3行):最基本的意义,是给这个mapper命名用于区分;更为高级的用法,则是接口绑定(面向接口编程)。namespace的命名方式分为两种:完全限定名和短名称。本例中使用的就是完全限定名。使用短名称时,必须确保这个短名称在系统中是唯一的,否则只能使用完全限定名。
    • 接口绑定:将namespace设为DAO接口,将接口中的方法都通过mapper中的元素实现(元素id与接口方法一一对应),就可以不用写DAO实现类,Mybatis会通过绑定自动找到要执行的sql语句。
  3. mapper顶级元素:mapper中有8个顶级元素,分别是insert,delete,update,select(映射增删改查语句),sql(重用sql语句块),resultMap(描述如何从结果集中加载对象),cache(缓存配置),cache-ref(其他namespace缓存配置)。
    1. insert、delete、update:基本格式就是<元素名 元素属性>sql语句</元素名>。其中,元素名即为insert/delete/update中的一个,可设定的元素属性有9个,这里只列出5个,一般设定1,2即可。在sql语句中,用#{}表示占位符,执行时将#{}替换为?,然后将括号内的参数传递给?。
      常用元素属性:
      1. id:元素标识。
      2. parameterType:接受的参数类型,可为完全限定名或别名。默认为unset。传入多个参数时,这个属性应忽略,在#{}中直接以各参数名表示。(如:17~22行)【存疑,待测试】
      3. flushCache:为true时,调用sql会清空本地缓存和二级缓存。在insert,delete,update中默认为true,在select中默认为false。
      4. timeout:驱动程序等待数据库返回结果的最大时间,超出则抛出异常。默认为unset。
      5. statementType:可选STATEMENT/PREPARED/CALLABLE,分别让Mybatis使用Statement,PreparedStatement,CallableStatement。默认为PREPARED。
    2. select:基本格式同上。select可设定的元素属性有13个,除了上述的5个属性之外,还有2个常用属性。当数据库列名与POJO属性名不一致时,可以在sql语句中使用别名(as),或使用resultMap。
      1. resultType:此select语句的返回值类型。如果返回集合,应该写集合包含的类型。
      2. resultMap:外部resultMap的引用。和resultType不能同时使用。
    3. resultMap:基本属性有id,type和autoMapping,分别是本resultMap的标识,对应的POJO类,是否自动映射。
      resultMap有6个可用元素:
      1. constructor:在类实例化时,注入结果到构造方法中。其中,idArg是ID参数(标记结果为ID,可以提高整体效能),arg是注入到构造函数的普通结果。
        其中,idArg和arg常用属性如下:
        • column:对应数据库中的列名。
        • javaType:完全限定名/别名。映射到HashMap时必须指定,其他时候可以省略。
        • name:构造函数的形式参数名。
      2. id:ID结果。标记结果为ID,可以提高整体效能。
      3. result:注入到属性的普通结果。
        id和result的常用属性如下:
        • property:POJO类中的属性名。
        • column:对应数据库中的列。
        • javaType:完全限定名/别名。映射到HashMap时必须指定,其他时候可以省略。


明天先完善mapper.xml,然后编写测试类进行测试,根据测试结果进一步修改。


问题:

1.mapper.xml中,insert,update,delete的返回值能否设置为boolean?

2.通过接口绑定,用mapper.xml自动生成数据操作类的话,mapper.xml中需要实现接口中的所有方法吗?

3.能否在mapper.xml中,将sql的结果进一步操作(比如获取的Date类型结果,进行toString()操作)


返回列表 返回列表
评论

    分享到