Maison > Java > javaDidacticiel > le corps du texte

Exemple de tutoriel de fichier de mappage SQL

零下一度
Libérer: 2017-07-17 15:15:58
original
1670 Les gens l'ont consulté

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;
    }
}
Copier après la connexion

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>
Copier après la connexion

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());
        }
}
Copier après la connexion

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>
Copier après la connexion

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());
        }
Copier après la connexion

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语句
Copier après la connexion
select * from student,grade
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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;

   。。。。。省略封装
Copier après la connexion

 <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>
    <!--这里使用了自动匹配-->
Copier après la connexion
<select id="getAllStudent" resultMap="studentMap"> SELECT * FROM student,grade WHERE student.stuGrade=grade.gradeId</select>
Copier après la connexion

测试类里直接调用即可

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

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

javaBean

  private int gradeId;private String gradeName;private List<student> gatStudent;
Copier après la connexion
 <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>
Copier après la connexion
 <!--查询对应年级的student-->
    <select id="getAll" resultMap="gradeMap">   select * from student,grade where stuGrade = gradeId and gradeId=1
    </select>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!