Principe de stratégie paresseuse: ce n'est que lorsque les données renvoyées par la requête SQL sont utilisées sont réellement émises à la base de données, sinon elles ne seront pas émises (principalement utilisées dans les requêtes conjointes de plusieurs tables)
1. Chargement paresseux un à un:
Supposons qu'il y ait une table de personne et une table de cartes dans la base de données: la table de personne a des champs pid, pname, page, psex, cid et table de cartes a des champs cid, cnum;
Supposons que vous souhaitiez interroger le nom et le numéro d'identification de quelqu'un:
Principe: Lors de l'interrogation du nom, la version réelle ne demande pas le numéro d'identification. Ce n'est que lorsque la station actuelle utilise le numéro d'identification qu'il émettra une requête sur la carte. Il s'agit d'une stratégie pour interroger le numéro d'identification;
Exemple d'implémentation:
Étapes de mise en œuvre:
1-Import Mybatis Dependency JAR Package
Fichier log4j 2-ADD (peut afficher les programmes d'exécution réels en mémoire)
1-principe: Ce n'est que lorsque la station actuelle utilise le numéro d'identification est utilisée, la requête de la carte sera émise, sinon la requête des informations sur la personne est émise.
2-ouverts paresseux: dans conf.xml
<messings> <paramètre name = "LazyLoadingEnabled" value = "true" /> <setting name = "AggressIvelAzyLoading" value = "false" /> </ Settings>
3. Implémentation:
(1) Dans le fichier de mappage MAPTER.XML:
<select id = "findcid" ParameterType = "int" resultType = "card"> sélectionner * à partir de la carte où cid = # {value} </ select> <resultmap type = "Person" id = "p_c1"> <id Column = "pid" propriété = "pid" /> <résultat Column = "pname" propriété = "pname" /> <résultat colonne Column = "psex" propriété = "psex" /> <association propriété = "card" javatype = "card" select = "findcid" column = "cid"> </ association> </sultMap> <select id = "selectPersonandCardlazyBype" ParametType = "int" ResultA 1 sélection: spécifiez l'énoncé de requête associée
2 colonnes: spécifiez quelle valeur du champ dans l'instruction principale est transmise sous forme de paramètre à l'instruction SQL d'esclaves
(2) Définissez la méthode dans l'interface du mappeur:
Personne publique SelectPersonandCardlazyByPid (int pid);
(3) Résultats des tests utilisant JUnit:
1. Voici une requête qui n'envoie que des informations sur les personnes;
@Test public void testSelectPersonandCardlazyByPid () {// Politique paresseuse personne à une personne p = pm.SelectPersonandCardlazyByPid (1); //System.out.println(p); System.out.println (p.getpname () + ","); //System.out.println(p.getpname () + "," + p.getcard (). GetCnum ()); }L'instruction de requête d'exécution du résultat:
2. La requête de la carte n'est émise que lorsque la station actuelle utilise le numéro d'identification
@Test public void testSelectPersonandCardlazyByPid () {// Politique paresseuse personne à une personne p = pm.SelectPersonandCardlazyByPid (1); //System.out.println(p); System.out.println (p.getpname () + ","); System.out.println (p.getpname () + "," + p.getcard (). GetCnum ()); // La requête de la carte est émise lorsque la station actuelle utilise le numéro d'identification}L'instruction de requête d'exécution du résultat:
2. Chargement paresseux un-à-plusieurs:
Exemple d'implémentation:
Supposons qu'il existe une table de personne et une table d'informations d'identité de carte dans la base de données, la table d'adresse Adder: où il y a des champs PID dans la table de personne, PNAME, PAGE, PSEX, CID, TABLE DE CARTE ET FIELDS CNUM dans la table Adder; La table Adder a des champs d'aide, Ashi, PID
Supposons que vous souhaitiez interroger le nom et l'adresse de quelqu'un, et votre numéro d'identification:
(1) Fichier de mappage MAPPER.XML:
<! - Stratégie paresseuse one-to-many -> <select id = "fingcard_adder" ParameterType = "int" resultType = "adder"> SELECT * FROM ADDER WHERE PID = # {value} </ select> <select id = "FindCid1" ParametType = "int" ResultType = "Card"> SELECT * FROM CARDE WHERE CID = # # {Value} Type = "Person" id = "P_C1_A1"> <id Column = "PID" Property = "PID" /> <Result Column = "PNAME" Property = "PNAME" /> <Result Column = "Page" Property = "Page" /> <Result Column = "PSEX" Property = "Psex" / Collumn = "Card" JavaType = " </ association> <collection Property = "adder" ofType = "adder" select = "fingcard_adder" chronn = "pid"> </ collection> </sultMap> <select id = "selectPersonandCardAndadderlazyBy(2) Méthode de définition de l'interface du mappeur:
1. Voici une requête qui n'envoie que des informations sur les personnes;
@Test public void testSelectPersonandCardAndAdderlazyByPid () {// Politique paresseuse personne à un à plusieurs p = pm.SelectPersonandCardAndadderlazyByPid (1); System.out.println (p.getpname () + ","); //// voici une requête qui n'envoie que des informations sur la personne}L'instruction de requête d'exécution du résultat:
2. Voici une question pour émettre des informations sur les personnes et les informations d'identité;
@Test public void testSelectPersonandCardAndAdderlazyByPid () {// Politique paresseuse personne à un à plusieurs p = pm.SelectPersonandCardAndadderlazyByPid (1); System.out.println (p.getpname () + ","); // voici une requête qui n'émet que des informations à la personne; System.out.println (p.getpname () + "," + p.getcard (). GetCnum ()); // voici une requête qui émet des informations sur les personnes et les informations d'identité; }L'instruction de requête d'exécution du résultat:
3. Informations sur la question, les informations d'identité et les informations sur l'identité sont émises ici;
@Test public void testSelectPersonandCardAndAdderlazyByPid () {// Politique paresseuse personne à un à plusieurs p = pm.SelectPersonandCardAndadderlazyByPid (1); System.out.println (p.getpname () + ","); // Il s'agit d'une requête qui n'émet que des informations à la personne; System.out.println (p.getpname () + "," + p.getcard (). GetCnum ()); // Il s'agit d'une requête qui émet des informations sur les personnes et les informations d'identité; //System.out.println(p.getpname () + "," + p.getcard (). GetCnum ()); pour (additionneur de l'additionneur: p.getAdder ()) {///// Les informations de la question de la personne, des informations d'identité et des informations d'adresse sont émises ici; System.out.println (adder.getashi ()); }} L'instruction de requête d'exécution du résultat:
Résumer
Ce qui précède est la méthode de retard de chargement de la stratégie paresseuse dans Mybatis qui vous a été introduit. J'espère que cela vous sera utile. Si vous avez des questions, laissez-moi un message. L'éditeur vous répondra à temps!