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>
<update id="update">update student set stuName=#{0} where stuId=#{1}</update>
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!