Les relations que nous apprenons principalement aujourd'hui sont des relations individuelles et des relations un-à-plusieurs.
1. Relation individuelle
Expliquons-le à travers des exemples. (Une femme correspond à un mari).
1) Informations sur la base de données
Créer la table t_wife (id int key primaire auto_increment, femme_name varchar (), fk_husband_id int); créer la table t_husband (id int primaire key auto_increment, mari_name varchar ()); insérer dans t_husband valeurs (null, 'bonjour'); insert dans les valeurs t_wife (null, 'kitty',))
2) Code javabean correspondant
Bien qu'il n'y ait qu'une seule touche étrangère configurée par une partie dans la base de données, cette relation individuelle est une relation bidirectionnelle.
Huiber.java
Package com.cy.mybatis.beans; import java.io.serializable; / *** one to one * @author acer ** / public classe sa mariée implémente sérialisable {private static final SerialversionUid. épouse) {super (); this.id = id; this.name = name; this.wife = épouse;} public Integer getID () {return id;} public void setid (entier id) {this.id = id;} public String getName () {return name;} public void setName (name) {this.name = nom;} void Setwife (épouse de femme) {this.wife = épouse;} @ OverRidepublic String toString () {return "mari [id =" + id + ", name =" + name + ", femme =" + femme + "]";}} FemmeBean.java
Package com.cy.mybatis.beans; import java.io.serializable; / *** one to one * @author acer ** / public class wifebean implémente sérialisable {private static final SerialversionUid. mari) {super (); this.id = id; this.name = name; this.husband = mari;} public Integer getID () {return id;} public void setid (entier id) {this.id = id;} public String getName () {return name;} public Void setName (String name) {this.name = new mari;} public void Sethusband (mari de mari) {this.husband = mari;} @ overRidepublic String toString () {return "femme [id =" + id + ", name =" + name + ", mari =" + mari + "]";}} 3) Ensuite, établissez deux interfaces, époudeur et wifemapper.
Épouvantail
Package com.cy.mybatis.mapper; Import com.cy.mybatis.beans.husbandbean; Interface publique Hébauche {/ *** Informations sur le mari basé sur ID * @param id * @ return * @throws exception * / public huibean seletesthusbandbyid (int id) lance une exception; / *** exception de la query et de la femme basée sur id * @Param ID * @ Retour * @ remerciant son époux et les informations sur la femme basées sur ID * @Param ID * @ Retour * @ Retourning Fichebrows Informations sur la femme sur la question sur ID * @Param * @ Retour * @ Retourn SELECTHUSBANDANDWIFE (int id) lève une exception;} 4) Définissez le fichier de marinmapper.xml
<? xml version = "." Encoding = "UTF -"?> <! Doctype Mapper public "- // mybatis.org/dtd mappeur." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.husbandmapper "> <resultmap type =" hadbean "id =" hushandwife "> <id property =" id "column =" id "javatype =" java.lang. propriété = "name" chronn = "name" javatype = "java.lang.string" /> <! - Association une association de type complexe; De nombreux résultats seront emballés dans ce type Association de la carte de résultats intégrés, ou se référeront à une colonne = "ID" L'ID se réfère ici à l'ID de clé primaire de la table T_Wife. Cette épouse de requête, il existe donc une méthode dans la femme Mappeur -> <association Property = "Wife" Column = "ID" Javatype = "WifeBean" select = "com.cy.mybatis.mapper.wifemapper.SelectWifeBusbandId"> </ Association> </ ResultMap> <! - ResultType retourne le nom ou les allias entièrement qualifiés de la classe du type attendu de cette déclaration. -> <select id = "selecthusbandByid" resultType = "houdbean"> select * from t_husband where id = # {id} </lect> <! - ResultMap Name références external resultMap. Renvoie une collection. -> <select id = "selecthusbandandwife" resultmap = "marindwife"> select * from t_husband où id = # {id} </lect> </caper>Il existe une méthode dans wifemapper.xml
<? xml version = "." Encoding = "UTF -"?> <! Doctype Mapper public "- // mybatis.org/dtd mappeur." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.wifemapper "> <select id =" selectWifeByHusband "resultType =" wemeBean "> SELECT * from t_wife où fk_husband_id = # {id} </capper> 5) Écrivez une implémentation
Package com.cy.mybatis.service; import org.apache.ibatis.session.sqlSession; import com.cy.mybatis.beans.husbandbean; import com.cy.mybatis.mapper.husbandmapper; import com.cy.mybatis.tools.dbtools) Classe publique OneTooneSevice {public voide Main (] {selecthusbandandwife ();} private static void selecthusbandandwife () {sqlSession session = dbtools.getSession (); houdmapper hm = session.getmapper (drowmapper.class); try {houdBean huid = hm.selecthusbandandwife (); System.out.println (mari); session.Cormit (); {e.printStackTrace ();}}} Remarque: La classe d'outils a été écrite dans le chapitre précédent, qui est assez similaire à celui établi sur la base d'hier.
Avis:
Mybatis fonctionne en fait sur XML. Toutes nos méthodes sont directement définies dans XML. L'écriture d'une interface est juste pour mieux se conformer à notre pensée à trois couches. Si vous n'écrivez pas d'interface, vous pouvez exploiter directement les méthodes dans XML via la session.
Tant qu'il existe des méthodes dans XML, elle peut être utilisée et que la méthode d'appel est: Nomspace + Nom de la méthode;
Lorsque vous utilisez ResultType pour exception, assurez-vous de vous assurer que votre nom d'attribut est le même que le nom du champ;
Si ce n'est pas la même chose, utilisez le résultat.
2. Relation un à plusieurs
Expliquons-le à travers des exemples. (Un verrou correspond à plusieurs clés).
2.1) Il n'y a pas de données ajoutées ici dans les informations sur la base de données, nous utilisons un lot pour ajouter des données
Créer la table T_KEY (ID int primaire clé AUTO_INCREME, KEY_NAME VARCHAR (), FK_LOCK_ID INT); Créer la table t_lock (id int key primaire auto_increment, lock_name varchar ());
2.2) Classe d'entité
Keybean.java
Package com.cy.mybatis.beans; import java.io.serializable; / *** ManyToOne * ** / public class KeyBean implémente sérialisable {private static final long SerialVersionUid = l; private Integer id; private String Key {super (); this.id = id; this.key = key; this.lock = lock;} public Integer getID () {return id;} public void setid (return key;} public void setKey (string key) {this.key = key;} public lockbean getlock () {return lice; Lock) {this.lock = lock;} @ OverRidepublic String toString () {return "keybean [id =" + id + ", key =" + key + ", lock =" + lock + "]";}} lockbean.javapackage com.cy.mybatis.beans; import java.irializable; ** / classe publique Lockbean implémente Serializable {private static final long SerialVersionUID = l; ID entier privé; Lock de chaîne privée; Liste privée <yeyBean> Keys; Public Lockbean () {super ();} public Lockbean (ID INGER, Lock, List <Keybean> Keys) {super (); this.id = id; this.LOCK = Lock; this.Keys = keys; getID () {return id;} public void setid (INGER ID) {this.id = id;} public String getlock () {return Lock;} public void setLock String toString () {return "lockbean [id =" + id + ", keys =" + keys + ", lock =" + lock + "]";}} 2.3) Établir une interface
Keymapper.javapackage com.cy.mybatis.mapper; import java.util.list; import org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.keybean; interface publique keymapper {/ *** Ajouter des keys dans le lot * @ return * Il est recommandé d'utiliser @param ("keys") * / public Inth Batchsavekeys (@param ("clés") Liste <keybean> clés);} lockmapper.javapackage com.cy.mybatis.mapper; import org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.lockBean; interface publique Lockmapper {/ *** Ajouter le verrou Savelock (@Param ("Lock") Lockbean Lock); / *** interroge les informations du verrou basé sur l'id * @param id * @ return * / public Lockbean findlockbyid (int id); / *** interroger les informations du verrou et de la touche basée sur l'ID * ONEMANY * @param id * @ return * / public Lockbean FindLockEys (int id);} ID * @ return * / public Lockbean FindLockEys (int id);};} 2.4) Créer un fichier XML
Keymapper.xml
<? xml version = "." Encoding = "UTF -"?> <! Doctype Mapper public "- // mybatis.org/dtd mappeur." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.keymapper "> <resultMap id =" keymap "type =" keybean "> <id property =" id "column =" id "javatype =" java.lang.inger " Property = "key" chronn = "key_name" javatype = "java.lang.string" /> </sultMap> <! - La collection est un élément utilisé pour la traversée (requise), les tableaux de support, la liste, set -> <! - L'élément représente les alias lorsque l'élément de la collection est itéré. -> <! - Le séparateur indique quel symbole est utilisé comme séparateur entre chaque itération. -> <insert id = "batchsavekeys"> insérer dans les valeurs t_key <foreach collection = "keys" item = "key" séparateur = ","> (null, # {key.key}, # {keylock.id}) </ foreach> </ insert> <Select id = "findKeysByLockid" ResultMap = "keymap"> SELECT * from t_key_lockid where # {id} </ select> </ mapper> LockMapper.xml <? xml version = "." Encoding = "UTF -"?> <! Doctype Mapper public "- // mybatis.org/dtd mappeur." "http://mybatis.org/dtd/mybatis-mapper.dtd"><mapper namespace =" com.cy.mybatis.mapper.lockmapper "> <! - Custom return type -> <resultmap id =" Lockmap "type =" LockBean "> <id property =" id "collumn =" id "" javatype = "java.lang.integer" /> <résultat propriété = "lock" colonnen = "lock_name" javatype = "java.lang.string" /> <result propriété = "lock" collumn = "lock_name" javatype = "id" " select = "com.cy.mybatis.mapper.keymapper.findkeysbylockid"> </ collection> </sultMap> <insert id = "Savelock"> Insérer dans les valeurs t_lock (null, # {lock.lock}) </ insert> <select id = "findlockid" ResultMap = "Lockmap"> select * from t_lock where where where where id = # {id}; id = "findLockandKeys" resultMap = "LockandKeysmap"> Sélectionner * FROM T_LOCK WHERE ID = # {id} </lect> </caper> 2.5) Implémentation
package com.cy.mybatis.service; import java.util.arraylist; import java.util.list; import org.apache.ibatis.session.sqlSession; import com.cy.mybatis.beans.keybean; import com.cy.mybatis.beanss.lockbean; import com.cy.mybatis.mapper.keymbper; import; com.cy.mybatis.mapper.lockmapper; import com.cy.mybatis.tools.dbtools; classe publique OnetomanyService {public static void main (String [] args) {// servelock (); // batchsavekeys (); findlockandKeys ();} private static void FindlockAndKeys () {SqlSession Session = dbtools.getSession (); LockMapper lm = session.getMapper (Systemmapper.class); Lockbean Lock = lm Dbtools.getSession (); LockMapper lm = session.getMapper (LockMapper.class); keyMapper km = session.getMapper (keyMapper.class); Lockbean Lock = lm.FindLockById (); List <KeyBean> Keys = New ArrayList <KeyBean> (); pour (int i =; i ++) {KeyBean KeyBean = NewBean (null, i <; i ++) { "key" + i, lock); keys.add (key);} km.batchsavekeys (clés); session.commit ();} private static void savelock () {sqlSession session = dbtools.getSession (); lockmapper lm = session.getmapper (lockapper.class); Lockbean Lock = new LockBean (null, "lock", " null); lm.savelock (lock); session.commit ();}} Les résultats montrent:
3. Fonctionnement par lots et pagination
Ici, j'utiliserai l'utilisateur du chapitre précédent et j'écrirai le code principal.
Définissez d'abord l'objet de pagination.
Package com.cy.mybatis.beans; import java.util.list; / *** définir un objet de pagination * * @ auteur * * / classe publique pager {private int pageno; // numéro de page actuel intratic privé pagetotal pagetotal; // numéro total de page int rowstotal; // nombre total de listes de listes privées; Ensemble de données renvoyé public int getpageno () {return pageno;} public void Setpageno (int pageno) {this.pageno = pageno;} public int getpagetotal () {return pagetotal;} public void setPagetotal (int pagetotal) {this.pagetotal = pagetotal; getrowStotal () {return rowstotal;} public void setRowstotal (int rowstotal) {this.rowstotal = rowstotal; pagetotal = rowstotal% pagesize ==? RowStotal / PageSize: RowStotal / PageSize +;} public int getPageSize () {return pageSize;} public void setPageSize (int pageSize) {this.pageSize = pageSize;} public list <?> getList () {return list;} public void setList (list <object> list) {this.List = list;} @ swotIBLIC {return "pager [pageno =" + pageno + ", pagetotal =" + pagetotal + ", rowstotal =" + rowstotal + ", pagesize =" + pageSize + ", list =" + list + "]";}} usermapper.java interface. Package com.cy.mybatis.mapper; import java.util.list; import java.util.map; import org.apache.ibatis.annotations.param; import com.cy.mybatis.beans.userbean; public interface Utilisateur) lève une exception; / *** Utiliser * @Param User * @param id * @ return * @throws exception * / public int updateUser (@param ("u") Userbean User, @ param ("id") int id) lève exception; / *** exception * @param id * @ return * @throws exception * / public int deleserer (int id) exception; / *** Query Query Exception * / public userbean selectUserById (int id) lève une exception; / *** requête toutes les informations de l'utilisateur * @ return * @throws exception * / public list <userbean> selectAllUser () lève exception; / *** batch add * @param user * @ return * @throws exception * / public int batchinserTenser (@param ("utilisateur") Liste <userbean> user) @ return * @throws exception * / public int batchdeleteuser (@param ("list") List <Integer> list) lève une exception; / *** Données de requête de pagination * @param parma * @ return * @throws exception * / public list <userbean> paginusers (map <string, objet> Parmors) lance une exception de pagination * @ redout * CountUser (Map <String, Object> Parmas) lève une exception;} fichier xml <? xml version = "." Encoding = "UTF -"?> <! Doctype Mapper public "- // mybatis.org/dtd mappeur." "http://mybatis.org/dtd/mybatis-mapper.dtd"><Mapper namespace =" com.cy.mybatis.mapper.usermapper "> <! - Retour de retour personnalisé Set -> <résultatmap id =" usermap "type =" userbean "> <id property =" id "Column =" id "" javatype = "java.lang.integer"> </ id> <le résultat propriété = "username" chronn = "username" javatype = "java.lang.string"> </ résultat> <résultat propriété = "mot de passe" chronn = "mot de passe" javatype = "java.lang.string"> </ résultat> <résultat Property = "Compte" column = "Cade" javatype = "java.lang.double"> </sult> </sultMap> <! - L'attribut ID dans divers balises doit être le même que le nom de la méthode dans l'interface, et la valeur d'attribut ID doit être unique et ne peut pas être réutilisée. La propriété ParamETERTYPE spécifie le type de paramètre utilisé lors de la requête, et la propriété ResultType spécifie le type de jeu de résultats renvoyé par la requête -> <! - UseGeneratedKeys: (il est uniquement utile pour insérer) Il indique à MyBatis pour utiliser les données de gestion des clés principales par les données (par exemple, le champ auto SqlServer). Valeur par défaut: false. -> <! - KeyProperty: (utile uniquement pour l'insert) Marquez une propriété. MyBatis définira sa valeur via GetGeneratedKeys ou via l'élément enfant SelectKey de l'instruction INSERT. Par défaut: pas défini. -> <! - # {} Le contenu est un espace réservé. Lorsque le paramètre est un JavaBean, il indique la valeur de propriété de l'objet bean qui est placé -> <insert id = "inserser" usegeneratedKeys = "true" keyproperty = "user.id"> insérer dans T_User (nom d'utilisateur, mot de passe, compte) (# {user.Username}, # {user.Password}, # # {user.Account} id = "UpdateUser"> Update T_User set username = # {u.userName}, mot de passe = # {u.password}, account = # {u.account} où id = # {id} </ update> <delete id = "DeleteUser" ParametType = "Int"> supprimer iDIDE WHERE ID = # {id} </ Delete> ParameterType = "int" resultMap = "usermap"> Sélectionner * dans T_User où id = # {id} </lect> <select id = "selectAlUser" resultMap = "userMap"> SELECT * FROM T_USER </ECLORD> <! - Paramètre de lot et foreach tags -> <insert id = "batchInserTer" T_User Values <Foreach Collection = "Users" item = "Users" séparateur = ","> (null, # {Users.Username}, # {users.password}, # {users.account}) </foreach> </serser> <delete id = "BatchDeleserUser"> Supprimer de T_User où ID dans (<pour la collection = "List =" List = "List" séparateur = ","> # {id} </foreach>) </pellete> <! - La collection est un élément utilisé pour la traversée (requise), les tableaux de support, la liste, le set -> <! - L'élément représente l'alias lorsque chaque élément de l'ensemble est itéré. -> <! - Le séparateur représente quel symbole est utilisé comme séparateur entre chaque itération. -> <select id = "pageruser" ParameterType = "java.util.map" resultmap = "usermap"> select * from t_user where = <if test = "username! = null"> and username like '% $ {username}%' </ if> limite $ {index}, $ {pageSize} </ select> id = "Counter" paramètreType = "java.util.map" resultType = "int"> SELECT COUNT (*) FROM T_USER WHERE = <if test = "username! = null"> Et le nom d'utilisateur comme '% $ {username}%' </f> </ecoly $ Lors de la génération de SQL, les devis ne seront pas assemblés. Il peut être utilisé pour les classes de test d'assemblage des paramètres telles que l'ordre par package com.cy.mybatis.service; importer java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; import org.apache.ibatis.session.sqlSeshe com.cy.mybatis.tools.dbtools; import com.cy.mybatis.mapper.usermapper; public class userservice {/ *** @param args * / public static void main (String [] args) {// insertus (); // deleteUser (); // updateUser (); // SelectUser (); BatchInserSerser (); // BatchDeleserUser (); // countUser (); pagerUser ();} private static void countUser () {sqlSession session = dbtools.getSession (); userMapper Mappel = new Hashmap <string, objet> (); params.put ("nom d'utilisateur", "kitty"); int index =; params.put ("index", index); // à partir de quelle page démarrer. mysql commence par params.put ("pagesize",); // le nombre de bandes de données affichées par page int int. Dbtools.getSession (); userMapper Mappeur = session.getmapper (userMapper.class); map <string, object> params = new hashmap <string, object> (); params.put ("username", "kitty"); params.put ("index",); // à partir de quelle page. MySQL commence par params.put ("PageSize",); // Le nombre de bandes de données affichées par page essaie {list <serBean> u = mAper.PagerUser (params); pour (Userbean userbean: u) {System.out.println ("----------" + userbean);}} catch (exception e) {e.printStackTrace ();}} Private Static Void BatchdeleserAser () {SqlSession Session = dbtools.getSession (); UserMapper) ids = new ArrayList <Integer> (); for (int i =; i <; i ++) {ids.addd (i);} try {mappe.batchdeleteser (ids); session.commit ();} catch (exception e) {e.printstackTrace ();}} private Vend batchInserSertuser () {SQLSESSION = SESSESSE = SEPROSSE PRIVÉ VOID BATCHINSERTUSER () {SQLSESSION = SESSESSE = SEPROSSE STATIQUE PRIVE Dbtools.getSession (); userMapper Mapper = session.getMapper (userMapper.class); list <seryBean> users = new ArrayList <Derserbean> (); for (int i =; i <; i ++) {userbean user = new userbean ("kitty" + i, ",.); Userbean (user);} {mapper.batchInsertUser(users);session.commit();} catch (Exception e) {e.printStackTrace();}}/*** New user*/private static void insertUser() {SqlSession session = DBTools.getSession();UserMapper mapper = session.getMapper(UserMapper.class);UserBean user = new UserBean("Yi", "",.); essayez {mapper.inserserser (user); System.out.println (user.toString ()); session.Commit ();} catch (exception e) {e.printstackTrace (); session.rollback ();}} / *** Delete User * / private static vide deleserer () {SQLSSessionSession Session = dbtools.getSession (); userMapper Mapper = session.getmapper (userMapper.class); try {mapper.deleteUser (); session.commit ();} catch (exception e) {e.printStackTrace () Session = dbtools.getSession (); userMapper Mapper = session.getMapper (userMapper.class); userbean user = new Userbean ("xiao ming", "",.); try {Mapper.updateuser (user,); session.commit ();} catch (exception e) {e.printStackTrace (); session.rollback (); id * / private static void SelectUserById () {SqlSession Session = dbtools.getSession (); Userperper Mapper = session.getMapper (userMapper.class); try {userbean user = mAper.SelectUserById (); System.out.println (User.ToString ()); session.Commit ();} attraper (exception e) gens user = mapper.selectaluser (); System.out.println (user.toString ()); session.Commit ();} catch (exception e) {e.printStackTrace (); session.rollback ();}}} Jetez un œil au projet global:
Tout doit être persisté!