Maison  >  Article  >  Java  >  Exemple de tutoriel de fichier de mappage SQL

Exemple de tutoriel de fichier de mappage SQL

零下一度
零下一度original
2017-07-17 15:15:581670parcourir

Fichier de mappage SQL

La vraie puissance de MyBatis réside dans l'instruction de mappage. En comparant le prix avec jdbc avec des fonctions équivalentes, les fichiers de mappage économisent beaucoup de code. MyBatis est conçu pour se concentrer sur SQL.

Les fichiers de mappage SQL contiennent les éléments de niveau supérieur suivants : (dans l'ordre)

le cache configure le cache pour un espace de noms donné.

cache-ref fait référence à la configuration du cache à partir d'autres espaces de noms.

resultMap est l'élément le plus complexe et le plus puissant, utilisé pour décrire comment charger vos objets à partir du jeu de résultats de la base de données.

parameterMap est obsolète ! Cartographie des paramètres de style old-school. Les paramètres en ligne sont préférés, cet élément pourra être supprimé à l'avenir.

sql est un bloc SQL réutilisable et peut également être référencé par d'autres instructions.

insérer l'instruction d'insertion de mappage.

mettre à jour la déclaration de mise à jour de la cartographie.

supprimer les cartes supprimer les instructions.

sélectionnez l'instruction de requête de mappage.

MyBatis est conçu pour se concentrer sur SQL, en l'éloignant des méthodes ordinaires.

Les fichiers de mappage SQL ont quelques éléments de niveau supérieur (dans l'ordre dans lequel ils doivent être définis) :

>mapper : le nœud d'élément racine du fichier de mappage, avec seulement un attribut L'espace de noms de l'espace de noms est utilisé pour distinguer différents mappeurs. Il est globalement unique et le nom complet de l'interface DAO est lié à l'espace de noms, c'est-à-dire une programmation orientée interface. Le mappeur ici est équivalent à la classe d'implémentation de l'interface.

cache - Configure le cache pour l'espace de noms donné.

cache-ref – Configuration du cache de référence à partir d'autres espaces de noms.

resultMap - L'élément le plus complexe et le plus puissant, utilisé pour décrire comment charger vos objets à partir du jeu de résultats de la base de données.

parameterMap – Obsolète ! Cartographie des paramètres de style old-school. Les paramètres en ligne sont préférés, cet élément pourra être supprimé à l'avenir. Il ne sera pas enregistré ici.

sql – Bloc SQL qui peut être réutilisé et référencé par d'autres instructions.

insert - instruction d'insertion de mappage

update - instruction de mise à jour de mappage

delete - instruction de suppression de mappage

select - instruction de requête de mappage

1 : Utilisez select pour terminer la requête conditionnelle

Utilisez l'idée de l'outil et la base de données MySQL

Créez une classe d'entité

public class student {private int stuId;private String  stuName;private grade getGrade;private  int stuAge;public grade getGetGrade() {return getGrade;
    }public void setGetGrade(grade getGrade) {this.getGrade = getGrade;
    }public int getStuAge() {return stuAge;
    }   public student(int id,String name){

   }   public student(){}public void setStuAge(int stuAge) {this.stuAge = stuAge;
    }public int getStuId() {return stuId;
    }public void setStuId(int stuId) {this.stuId = stuId;
    }public String getStuName() {return stuName;
    }public void setStuName(String stuName) {this.stuName = stuName;
    }
}

Utilisez select pour compléter la requête conditionnelle

1 : Configurez d'abord le mappeur pour utiliser resultType

<!--模糊查询   使用resultType返回结果集-->    
    <select id="getAllStudentByLike" parameterType="String" resultType="stu">* from student where stuName like CONCAT('%',#{stuName},'%'</select>

Classe de test

 public  void Test() throws IOException {

        studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
        List<student> list = dao.getAllStudentByLike("z");for (student item:list) {
            System.out.println("----------"+item.getStuName());
        }
}

En plus de javaBean, les types complexes pris en charge par ParameterType incluent également le type Map

c'est-à-dire modifier le Mapper

 <!--模糊查询-->
    <select id="getAllStudentByLike" parameterType="Map" resultType="stu">select * from student where stuName like CONCAT('%',#{stuName},'%')</select>

Créez ensuite une collection HashMap dans la classe de test et utilisez-la directement comme paramètre de méthode

studentDao dao = MyBatis.getSessionTwo().getMapper(studentDao.class);
        Map<String,String> userMap = new HashMap<String, String>();
        userMap.put("stuName","z");
        List<student> list = dao.getAllStudentByLike(userMap);for (student item:list) {
            System.out.println("----------"+item.getStuName());
        }

Cependant, la valeur clé de la collection de cartes doit être la même que le nom du champ dans la classe.

Deux : utilisez resultMap pour compléter une requête à deux tables

Par exemple, si la table étudiant est associée à l'identifiant de clé primaire de la table de classe, si vous utilisez resultType, vous ne peut afficher que son identifiant, mais en pratique, vous vous concentrez souvent sur le nom de la classe, tous doivent utiliser resultMap pour mapper des résultats personnalisés.

<resultMap id="studentMap" type="entity.student">
<id property="stuId" column="stuId"></id>
        <result property="stuName" column="stuName"></result>
        <result property="gradeName" column="gradeName">
       
    </resultMap>

//sql语句
select * from student,grade

resultType représente directement le type de retour, y compris les types de base et les types de données complexes

resultMap est une référence au resultMap externe, correspondant au id du resultMap Indique à quel resultMap le résultat renvoyé est mappé. : Ses scénarios d'application sont les suivants : les informations des champs de base de données sont incohérentes avec les attributs de l'objet ou des requêtes conjointes complexes doivent être effectuées pour contrôler librement les résultats du mappage.

De plus, dans l'élément select de MyBatis, resultType et resultMap sont essentiellement les mêmes, les deux sont des structures de données Map. Mais les deux ne peuvent exister en même temps.

Trois : utiliser le niveau de mappage automatique de resultMap

MyBatis est divisé en trois niveaux de mappage

>AUCUN : désactiver la correspondance automatique

>PARTIEL :(Par défaut) : Faire correspondre automatiquement tous les attributs sauf ceux avec imbrication interne (association, collection)

>FULL : Faire correspondre automatiquement tous les

Définir autoMappingBehavior

 <settings>   <!--设置resultMap的自动映射级别为Full(自动匹配所有)--><setting name="autoMappingBehavior" value="FULL" />   <!--FULL要大写··--> </settings>

Lors de la définition de la valeur de autoMappingBehavior sur FULL, il n'est pas nécessaire de configurer les nœuds sous resultMap. Ils correspondront automatiquement en fonction de la base de données

Quatre. : Utilisez la mise à jour pour terminer la modification

 <update id="update">update student set stuName=#{0} where stuId=#{1}</update>

Voici une façon plus simple d'utiliser des espaces réservés comme paramètres. Remplissez simplement les paramètres. directement dans la classe de test.

Cinq : utilisez l'association d'attributs qui mappe les types complexes

Le résultat précédent ne peut être mappé qu'à un certain attribut "type simple" de javaBean, type de données de base et classe d'empaquetage, etc./

Mais lorsque vous souhaitez mapper des propriétés de types complexes, vous devez utiliser une association de classes complexes : c'est-à-dire qu'il y a un autre javaBean dans un javaBean, mais une association. ne gère que les relations individuelles

        stuAge;

   。。。。。省略封装

 <resultMap id="studentMap" type="entity.student">
       <!-- <id property="stuId" column="stuId"></id>
        <result property="stuName" column="stuName"></result>-->
        <!--关联另一个 属性-->
        <association property="getGrade" javaType="grade">
       <!-- <id property="gradeId" javaType="Integer" column="gradeId"></id>
       <result property="gradeName" javaType="String" column="gradeName"></result>-->
        </association>
    </resultMap>
    <!--这里使用了自动匹配-->
<select id="getAllStudent" resultMap="studentMap"> SELECT * FROM student,grade WHERE student.stuGrade=grade.gradeId</select>

测试类里直接调用即可

六:前面说到association仅处理一对一的管理关系

    如果要处理一对多的关系,则需要使用collection,它与 association元素差不多,但它映射的属性是一个集合列表,即javaBean内部嵌套一个复杂数据类型属性。

javaBean

  private int gradeId;private String gradeName;private List<student> gatStudent;
 <resultMap id="gradeMap" type="grade">
        <!--<id property="gradeId" column="gradeId"></id>
        <result property="gradeName" column="gradeName"></result>-->
        <collection property="gatStudent" ofType="stu">
             <!-- <id property="stuId" column="stuId"></id>
              <result property="stuName" column="stuName"></result>-->
        </collection>
    </resultMap>
 <!--查询对应年级的student-->
    <select id="getAll" resultMap="gradeMap">   select * from student,grade where stuGrade = gradeId and gradeId=1
    </select>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn