1. Requête
En plus de la requête d'un seul enregistrement, nous essayons ici de demander un ensemble d'enregistrements.
Ajoutez la méthode suivante à l'interface iusermapper:
List <utilisateur> getUsers (nom de chaîne);
Ajouter user.xml:
<resultMap type = "user" id = "userList"> <! - Type est le nom complet ou l'alias de la classe qui renvoie l'élément de liste -> <id column = "id" propriété = "id" /> <résultat chronn = "name" property = "name" /> <result Column = "Age" Property = "Age" /> <le résultat colonnel = "adresse" Property = "Address" /> </ resultMap ParameterType = "String" resultMap = "UserList"> <! - ResultMap est la liste d'utilisateurs définie ci-dessus -> SELECT * dans `User` où le nom comme # {name} </lect>Méthode de test:
@Test public void queryListTest () {SqlSession Session = SqlSessionFactory.OpenSession (); essayez {iUserMapper Mappeur = session.getMapper (iusermapper.class); List <ser utilisateur> users = mapper.getUser ("% a%"); //% représente n'importe quel caractère dans SQL. pour (utilisateur utilisateur: utilisateurs) {log.info ("{}: {}", user.getName (), user.getAddress ()); }} enfin {session.close (); }} Si la requête de la table de conjonction est renvoyée, l'objet composé doit être traité avec le mot-clé d'association.
Si l'utilisateur publie un article, chaque utilisateur peut publier plusieurs articles et il a une relation un-à-plusieurs.
(1) Créez un tableau d'articles et insérez les données de test:
- Déposez la table si existe une table déposée si existe «Article»; - Créer un tableau nommé 'Article' Créer un tableau 'Article` (`id` int not null auto_increment,` user_id` int not null, `title` varchar (100) pas null,` contenu` text' not null, clé primaire (`id`)) moteur = innodb auto_incment = 1 default starse = utf8; - Ajouter plusieurs enregistrements de test insert dans les valeurs `` Article '(' 1 ',' 1 ',' Title1 ',' Content1 '), (' 2 ',' 1 ',' Title2 ',' Content2 '), (' 3 ',' 1 ',' Title3 ',' Content3 '), (' 4 ',' 1 ',' Title4 ',' Content4 ');(2) com.john.hbatis.model.article Classe:
Article de classe publique {private int id; utilisateur utilisateur privé; titre de chaîne privée; Contenu de chaîne privé; // Les getters et les setters sont omis}(3) Ajouter dans iusemapper:
Liste <Reticle> getArticlesByUserId (int id);
(4) Ajouter user.xml:
<ResultMap Type = "com.john.hbatis.model.article" id = "Articlelist"> <id Column = "A_ID" Property = "ID" /> <Result Column = "Title" Property = "Title" /> <Result Column = "Content" Property = "Content" /> <Association Property = "User" Javatype = "User"> <! - Column = "id" Property = "ID" /> <Result Column = "Name" Property = "Name" /> <Result Column = "Address" Property = "Address" /> </ Association> </SeultMap> <Select Id = "GetarticlesByuseId" ParametType = "int" ResultMap = "Articlelist"> A.Conte, U.Age, U.Address, A.Id a_id, A.TiTle, U.Name, U.Age de l'article A Inner Join User U sur a.user_id = u.id et u.id = # {id} </lect>(5) Méthode de test:
@Test public void getArticlesByUserIdTest () {SqlSession Session = SqlSessionFactory.OpenSession (); essayez {iUserMapper Mappeur = session.getMapper (iusermapper.class); Liste <ReTist> Articles = Mapper.GetArticlesByUserid (1); pour (Article Article: Articles) {log.info ("{} - {}, auteur: {}", article.getTitle (), article.getContent (), article.getUser (). getName ()); }} enfin {session.close (); }} Ci-joint:
En plus de définir le mappage des champs et des attributs dans la balise d'association, vous pouvez également réutiliser la forme de résultat de l'utilisateur:
<association propriété = "utilisateur" javatype = "utilisateur" resultMap = "userlist" />
2. Ajouté
Ajoutez la méthode suivante à l'interface iusermapper:
int addUser (utilisateur utilisateur);
User.xml Ajouter:
<insert id = "addUser" ParameterType = "User" useGeneratedKeys = "true" keyproperty = "id"> <! - UseGeneratedKeys spécifie la clé principale que MyBatis utilise la base de données pour générer et remplir automatiquement les propriétés spécifiées par KeyProperty. S'il n'est pas spécifié, l'objet de retour ne peut pas obtenir la valeur générée -> Insérer dans l'utilisateur (nom, âge, adresse) (# {nom}, # {âge}, # {adresse}) </sert>Méthode de test:
@Test public void AddUserTest () {utilisateur utilisateur = nouvel utilisateur ("Lucy", 102, "Happy District"); SQLSESSESSE SESSION = SQLSESSESSEFACTORY.OpenSESE (); essayez {iUserMapper Mappeur = session.getMapper (iusermapper.class); int affectCount = mapper.adDuser (utilisateur); session.Commit (); // La valeur par défaut n'est pas automatiquement soumise. Appel session.getConnection (). GetAutoCommit () pour afficher log.info ("{} nouvel enregistrement a été inséré avec succès dont l'ID: {}", affecteCount, user.getId ()); } enfin {session.close (); }}3. Mise à jour
Méthode d'addition d'interface:
Int UpdateUser (utilisateur utilisateur);
User.xml Ajouter:
<update id = "UpdateUser" ParameterType = "User"> Update `User` set name = # {name}, age = # {age}, adresse = # {adresse} où id = # {id} </dated>Méthode de test:
@Test public void updateUserTest () {SQLSession Session = SqlSessionFactory.OpenSession (); essayez {iUserMapper Mappeur = session.getMapper (iusermapper.class); Utilisateur utilisateur = mapper.getUserById (8); user.setAddress ("District satisfait"); int affectCount = mapper.updateUser (utilisateur); // En plus des attributs à modifier, d'autres attributs de l'utilisateur doivent également être attribués, sinon ces attributs seront mis à jour par la base de données à la valeur initiale (null ou 0, etc.). Vous pouvez l'interroger d'abord, mais cela augmentera l'interaction inutile avec la base de données. Les conditions suivantes peuvent éviter ce problème. Log.info ("Count affecté: {}", affectéCount); session.Commit (); } enfin {session.close (); }}4. Supprimer
Méthode d'addition d'interface:
int deleteUser (int id);
User.xml Ajouter:
<delete id = "DeleteUser" ParameterType = "int"> Supprimer de `User` WHERE ID = # {id} </ Delete>Méthode de test:
@Test public void DeleteUserTest () {SqlSession Session = SqlSessionFactory.OpenSession (); essayez {iUserMapper Mappeur = session.getMapper (iusermapper.class); int affecteCount = mapper.deleteUser (8); Log.info ("Count affecté: {}", affectéCount); session.Commit (); } enfin {session.close (); }}