L'article précédent "Javaweb Practical Mall Project Development (I)" a créé des cours d'entités et des outils de pagination. Cet article utilise MyBatis pour créer des couches DAO.
De plus, la documentation de l'API MyBatis peut être utilisée comme référence
1. L'utilisation de Mybatis
1. Présenter un ensemble d'étagères
Ici, je présente des packages mybatis et mysql dans lib
2. Écrivez config.xml pour configurer l'environnement de la base de données
Postez d'abord le code, puis expliquez un par un
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> <Properties Resource = "Configy <Cypealiases> <package name = "com.model" /> </ typealiases> <environnements default = "Development"> <Environment id = "Development"> <transactionManager type = "jdbc" /> <dataSource type = "Pooled"> <propriété name = "Driver" value = "$ {driver}" /> <propriété name = "url" value = "$ {url}" name = "username" value = "$ {username}" /> <propriété name = "mot de passe" value = "$ {mot de passe}" /> </ dataSource> </ environnement> <! - deuxième environnement -> <environnement id = "publish"> <transactionmanager = "jdbc" /> <datasource type = "PAPELED" /> </vironment>La première étape consiste à introduire le format de fichier XML, c'est-à-dire DTD, qui doit être copié directement à partir du modèle fourni par MyBatis.
<! Doctype Configuration publique "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
Question 1
La fonction Propriétés consiste à configurer le fichier Propriétés correspondant, la ressource spécifie l'itinéraire correspondant et nous pouvons configurer le pilote de base de données, l'URL, le nom d'utilisateur, le mot de passe, etc. dans le fichier Propriétés. Reportez-vous à ce qui suit. De cette façon, MyBatis lira automatiquement les paramètres suivants, et vous pouvez utiliser $ {} pour le référencer dans le XML.
Driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306 / shop username = root mot de passe = 123456
Question 2
Les types configurent des alias sous le chemin spécifié. Nous pouvons configurer un seul alias unique Nom <TypeALIAS type = "com.model.user" alias = "user" /> De cette manière, com.model.user est modifié en utilisateur d'alias. Il n'est pas nécessaire d'écrire tous les noms plus tard. Vous n'avez besoin que de l'utilisateur pour remplacer la modification par lots <package name = "com.model" />. De cette façon, vous pouvez modifier toutes les classes d'un package, et l'alias par défaut est le nom de classe d'entité.
Question 3
Les environnements sont utilisés pour configurer l'environnement de la base de données et peuvent configurer plusieurs environnements, tels que l'environnement de développement et l'environnement de libération, par défaut se réfère à l'environnement par défaut
Notez qu'il n'y a pas de S dans l'environnement, qui représente un environnement dans les environnements. Il se distingue par ID, donc id doit être unique.
TransactionManager représente le type de base de données de connexion, JDBC se connecte à Java
DataSource configure le mode de source de données, regroupé est le mode de pool de connexion. Pour d'autres modes, vous pouvez accéder au document officiel pour le vérifier et choisir selon vos besoins.
La propriété consiste à configurer la connexion de la base de données. Ne déplacez pas le nom, modifiez le valeur = "Driver". Voici l'utilisation de {} pour lire la configuration dans le fichier de propriétés supérieures. Faites attention à la correspondance du nom pour le lire.
3. Écrivez une instruction SQL Mapping Mapping
Ici, j'écris une méthode de chargement userdao, c'est-à-dire lire un utilisateur en fonction de l'ID. Le code suivant est équivalent à la fonction de chargement de l'utilisateur public (int id). Pour MyBatis, il existe deux types de remplacement # {} Le remplacement sera automatiquement cité selon le type, tel que le type de chaîne # {name} remplacé par 'name'. L'autre est un remplacement $ {}, qui est directement remplacé dans le format d'origine et n'ajoutera pas d'autres choses.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <maxim resultType = "User"> SELECT * FROM User Where id = # {id} </lect> </ mapper>La première étape consiste à introduire le fichier d'en-tête DTD et à formuler les règles du fichier XML
Sélectionner la balise, indiquant qu'il s'agit actuellement d'une instruction SELECT
L'attribut ID équivaut au nom de la fonction, référencé par ID
L'attribut ParameterType, qui représente le type de paramètre entrant, peut spécifier le type de base ou un type personnalisé. S'il s'agit d'un type personnalisé, sa méthode GET sera automatiquement appelée pour obtenir ses attributs.
La propriété ResultType, le type de valeur de retour, peut personnaliser directement le type et appellera automatiquement la méthode définie pour définir les paramètres de requête et utiliser plus de propriétés dans les articles suivants.
4. Carte du mappeur appelez
Avant d'appeler, vous devez d'abord configurer le mappage dans config.xml. Notez que le XML configuré ici est le chemin du fichier.
<mappers> <mapper ressource = "com / model / user.xml" /> </ mappers>
Puis écrivez une classe de test
public static void main (String [] args) {try {inputStream is = Resources.getResourCeasStream ("config.xml"); // Lire le fichier de configuration SqlSessionFactory Factory = new SqlSessionFactoryBuilder (). Build (is); // Utiliser le fichier de configuration pour créer une session de factory sqlSession = factory.oversession ();); Session.Selectone (user.class.getName () + ". Load", 1); // Appelez la fonction de chargement System.out.println (user.getNickName ()); // Output surname session.close (); // close session} catch (ioException e) {e.printStStackTrace (); }} résultat:
5. SQLSESSESSESSE TOOL CLASS
Écriture de classes de test comme celle ci-dessus est trop gênante, donc je résume SQLSession pour faciliter l'utilisation de la couche DAO
package com.util; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlSession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsession java.io.ioException; import java.io.inputStream; / ** * créé par NL101 le 2016/2/23. * / classe publique SessionUtil {private static sqlSessionFactory Factory = null; static {try {inputStream est = ressources.getResourceSStream ("config.xml"); // Read Configuration File Factory = new SqlSessionFactoryBuilder (). Build (IS); // Créer Factory à l'aide du fichier de configuration} Catch (ioException e) {e.PrintStackTrace (); }} / ** * Obtenez la session * @return * / public static sqlSession getSession () {return factory.opencession (); } / ** * Session de clôture * @param Session * / public static void closesion (SQLSession Session) {if (session! = Null) session.close (); session = null; }}Ce qui précède est l'utilisation de base de Mybatis, et maintenant il commence à résumer la couche Dao
2. Encapsule dao
1.Userdao.java
Chargement de l'utilisateur public (INT ID) Obtenez un utilisateur en fonction de l'ID
Il a été écrit ci-dessus
Public Boolean Add (utilisateur utilisateur) Ajouter un utilisateur
Code XML
<! - Ajouter un utilisateur -> <insert id = "add" ParameterType = "utilisateur"> Insérer dans les valeurs utilisateur (null, # {username}, # {mot de passe}, # {surnom}, # {type}) </sert>Code java
/ ** / ** * Ajouter un utilisateur * @param l'utilisateur l'utilisateur à ajouter * @return True Success * / public boolean add (utilisateur utilisateur) {int isadd = 0; SQLSession Session = SessionUtil.getSession (); essayez {isadd = session.insert (user.class.getName () + ". Add", utilisateur); session.Commit (); // soumettre} catch (exception e) {session.rollback (); // rolleback si la soumission échoue} enfin {sessionUtil.closesession (session); } System.out.println (ISADD); retourner Isadd> 0; } public boolean supprimer (int id) supprimer un utilisateurcode XML
<! - Supprimer un utilisateur -> <delete id = "delete" ParameterType = "int"> Supprimer de l'utilisateur où id = # {id} </preaking>Code java
/ ** * Supprimer l'utilisateur en fonction de l'ID * @param id pour supprimer l'ID de l'utilisateur * @return True Success * / public boolean Delete (int id) {int isdelete = 0; SQLSession Session = SessionUtil.getSession (); try {isdelete = session.delete (user.class.getName () + ". Delete", id); session.Commit (); } catch (exception e) {session.rollback (); // a échoué return System.out.println ("Delete User a échoué"); e.printStackTrace (); } enfin {sessionUtil.closeSESSE (session); } return isdelete> 0; } Mise à jour booléen publique (utilisateur de l'utilisateur) Utilisateurcode XML
<! - Modifier un utilisateur -> <update id = "update" ParameterType = "User"> Update User set username = # {username}, mot de passe = # {mot de passe}, surnom = # {nickname}, type = # {type} où id = # {id} </patedname>Code java
/ ** * Mise à jour de l'utilisateur * @param utilisateur l'utilisateur à mettre à jour * @return True Success * / public boolean update (utilisateur utilisateur) {int isUpdate = 0; SQLSession Session = SessionUtil.getSession (); essayez {isupdate = session.delete (user.class.getName () + ". Update", utilisateur); session.Commit (); } catch (exception e) {session.rollback (); // a échoué return System.out.println ("Mise à jour échoué"); e.printStackTrace (); } enfin {sessionUtil.closeSESSE (session); } return isUpdate> 0; } La connexion de l'utilisateur public (nom d'utilisateur de chaîne, mot de passe de chaîne) détermine si l'utilisateur existecode XML
<! - User Judgment de connexion -> <sélectionnez id = "login" ParameterType = "String" resultType = "User"> SELECT * FROM User Where Username = # {username} </lect>Code java
/ ** * Déterminez si un utilisateur existe * @param nom d'utilisateur nom d'utilisateur * @param mot de passe mot de passe * @return existence return l'utilisateur n'existe pas de retour null * / public user ligin (String userName, String Motway) {utilisateur utilisateur = null; SQLSession Session = SessionUtil.getSession (); essayez {user = session.selectone (soapbinding.use.class.getName () + ". Login", nom d'utilisateur); // Lorsque le mot de passe est incorrect, définissez l'utilisateur sur null if (! User.getPassword (). Equals (mot de passe)) {user = null; }} enfin {sessionUtil.closeSession (session); } return utilisateur; } Public Pager Find (nom de chaîne, tri de chaîne, commande de chaîne) Traitement de pagination Code XML:
SQL dynamique est utilisé ici. En ce qui concerne Dynamic SQL, c'est l'utilisation de balises telles que où, si, choisissez, etc. Vous pouvez vous référer au document officiel. De plus, dans Mybatis, le concept de null n'existe pas. Par exemple, vous transmettez l'utilisateur = null, mais lors du remplacement, il est remplacé par une chaîne "nul". Si cette valeur n'est pas disponible, elle est nul.
<! - Code de pagination -> <select id = "find" ParameterType = "map" resultType = "user"> select * from user <if test = "name! = Null"> where (nom d'utilisateur comme # {nom} ou surnom comme # {name}) </ si> commande par $ {srie <! - Nombre total d'enregistrements de pages -> <select id = "findCount" ParameterType = "map" resultType = "int"> SELECT COUNT (*) FROM User <if test = "name! = Null"> où (nom d'utilisateur comme # {name} ou surnom comme # {name}) </f> </ select>Code Java: Dans l'ensemble, il est toujours basé sur la pagination conçue par l'article précédent
/ ** * Page Query basée sur des conditions spécifiées * @param Nom Query Conditions, Null Représente inconditionnel * @Param Tri Tri Condition, Null Représente le tri par ID * @Param Tri Tri Condition, Null Représents Ascending Order * @return * / Public PagerStex SystemContext.getPageSize (); // Page Taille Pager <User> Pagers = new Pager <> (); Map <string, objet> maps = new HashMap <> (); if (name! = null &&! name.equals ("")) {name = "%" + name + "%"; maps.put ("name", nom); } if (tri == null || sort.equals ("")) {tri = "id"; // trié par id par défaut} if (order == null || order.equals ("")) {ordonnance = "asc"; // default tri} maps.put ("sort", tri); maps.put ("Order", Ordre); Maps.put ("Pagestart", Pagestart); MAPS.PUT ("PageSize", PageSize); SQLSession Session = SessionUtil.getSession (); List <ser utilisateur> datas = null; essayez {datas = session.selectList (user.class.getName () + ". Rechercher", maps); // obtenir des pagers.setDatas (données); pagerrs.setPageSize (pagesize); pagerrs.setpagestart (pagestart); int totalRecord = session.Selectone (user.class.getName () + ". FindCount", maps); // obtient le nombre total de pagerrs.setTotalRecord (totalRecord); pagerrs.setPageIndex (PAGRESTART / PAGESIZE + 1); } enfin {sessionUtil.closeSESSE (session); } pages de retour; } Structure actuelle du projet
Dans le prochain article, j'écrirai un General Basedao pour faciliter l'écriture du code. Et continuer à apprendre l'utilisation d'autres propriétés de Mybatis. Merci pour votre lecture.