XML映射配置

使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

在Mybatis中使用XML映射文件方式开发,需要符合一定的规范:

  1. XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  2. XML映射文件的namespace属性为Mapper接口全限定名一致
  3. XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

数据封装

  • 实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。
  • 如果实体类属性名和数据库表查询返回的字段名不一致,不能自动封装。

    解决方案:

    • 手动结果映射

      在Mapper接口方法上,通过 @Results及@Result 进行手动结果映射。

      @Results({@Result(column = "create_time", property = "createTime"),
                @Result(column = "update_time", property = "updateTime")})
      @Select("select id, name, create_time, update_time from dept")
      public List<Dept> findAll();
    • 起别名

      在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样。

      @Select("select id, name, create_time createTime, update_time updateTime from dept")
      public List<Dept> findAll();
    • 开启驼峰命名

      如果字段名与属性名符合驼峰命名规则,mybatis会自动通过驼峰命名规则映射。驼峰命名规则: abc_xyz => abcXyz

      • 表中字段名:abc_xyz
      • 类中属性名:abcXyz

        会自动把数据库中字段名id_card 映射为:idCard

      在application.yml中做如下配置,开启开关。

      mybatis:
        configuration:
          map-underscore-to-camel-case: true

      要使用驼峰命名前提是 实体类的属性 与 数据库表中的字段名严格遵守驼峰命名。

  • 如果在mapper接口中,需要传递多个参数,可以把多个参数封装到一个对象中。 在SQL语句中获取参数的时候,#{...} 里面写的是对象的属性名【注意是属性名,不是表的字段名】。

    /**
     * 保存部门
     */
    @Insert("insert into dept(name,create_time,update_time) values(#{name},#{createTime},#{updateTime})")
    void insert(Dept dept);