[JAVA] Comment utiliser l'annotation MyBatis Mapper

MyBatis vous permet de définir un Mapper avec des annotations au lieu de Mapper XML. Cette fois, je vais résumer comment utiliser l'annotation.

environnement

@Insert, @Update, @Select, @Delete Il peut être spécifié pour chaque méthode, et chacun correspond au SQL à exécuter. Chaque annotation peut prendre une chaîne ou un tableau de chaînes comme argument et transmettre le SQL que vous souhaitez exécuter. Si un tableau est spécifié, les chaînes de caractères seront combinées séparées par un espace demi-largeur.

Comme avec XML, vous pouvez incorporer des valeurs avec # {hoge}, et si vous voulez profiter du SQL dynamique, vous devrez mettre le tout dans <script>.

@Select("SELECT id, title FROM table WHERE id=#{id}")
Todo findById(Integer id);

@Select({
  "<script>",
  "SELECT id, title FROM table",
  "<where>",
  "<if test=\"id != null\">AND id=#{id}</if>",
  "<if test=\"title != null\">AND title=#{title}</if>",
  "</where>",
  "</script>"
})
List<Hoge> find(@Param("id") Integer id, @Param("title") String title);

D'ailleurs, dans le cas de XML, l'attribut resultType a été spécifié, mais il n'est pas nécessaire de le spécifier car le type de retour de la méthode est automatiquement appliqué.

@InsertProvider, @UpdateProvider, @SelectProvider, @DeleteProvider Il peut être spécifié pour une méthode, et chacun correspond au SQL à exécuter. Pour chaque annotation, spécifiez l'objet de classe dans l'attribut type et le nom de la méthode sous forme de chaîne de caractères dans l'attribut method. Exécute la chaîne retournée par les méthodes spécifiées par eux en tant que SQL.

La méthode de création de SQL peut être réalisée en construisant simplement une chaîne, mais elle peut également être construite à l'aide du générateur SQL fourni par MyBatis. Vous pouvez également utiliser la syntaxe de contrôle Java pour créer du SQL dynamique. http://www.mybatis.org/mybatis-3/ja/statement-builders.html

Vous pouvez définir la valeur directement dans SQL, mais il y a un risque d'injection, il est donc préférable d'utiliser le format # {hoge}.

@SelectProvider(type = TodoSQLProvider.class, method = "select")
List<Todo> find2(@Param("id") Integer id, @Param("title") String title);

public class TodoSQLProvider {
  public String select(@Param("id") Integer id, @Param("title") String title) {
    return new SQL() {
      {
        SELECT("*");
        FROM("todo");
        if (id != null) {
          WHERE("id = #{id}");
          // WHERE("id = " + id);C'est un risque d'injection
        }
        if (title != null) {
          WHERE("title = #{title}");
        }
      }
    }.toString();
  }
}

@Option Vous pouvez définir les options suivantes qui peuvent être spécifiées pour la méthode, telles que «