1. Introduction à Mybatis
MyBatis est un excellent cadre de couche de persistance qui prend en charge les requêtes SQL simples, les procédures stockées et la cartographie avancée.
MyBatis élimine les paramètres manuels de presque tous les code et paramètres JDBC et l'encapsulation de recherche de l'ensemble de résultats.
MyBatis peut utiliser du XML ou des annotations simples pour la configuration et la cartographie brute, les interfaces de cartographie et les pojos de Java (Old Java objets) en enregistrements dans la base de données.
JDBC -> DBUTILS (Auto-Encapsulation) -> MyBatis -> Hibernate
MyBatis écrit SQL dans XML puis accède à la base de données.
2. Commencez avec Mybatis
2.1. Créer un nouveau projet Java
Ajoutez le pot de pilote MyBatis et MySQL: MyBatis-3.1.1.jar, MySQL-Connector-Java-5.1.7-Bin.jar
2.2. Créer une nouvelle table
Créer une base de données MyBatis; Utilisez MyBatis; Créer des utilisateurs de table (ID int primaire clé Auto_increment, Name Varchar (20), Age int); Insérer dans les utilisateurs (nom, âge) VALEURS ('Tom', 12); insérer dans les utilisateurs (nom, âge) VALEURS ('Jack', 11);2.3. Ajouter le fichier de configuration MyBatis conf.xml
<? 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> id = "Development"> <transactionManager type = "jdbc" /> <dataSource type = "poolled"> <propriété name = "driver" value = "com.mysql.jdbc.driver" /> <propriété name = "url" value = "jdbc: mysql: // localhost: 3306 / mybatis" /> <propriété name = "username" / " name = "mot de passe" value = "root" /> </ dataSource> </ environnement> </ environnements> </filon
2.4. Définissez la classe d'entité correspondant au tableau
classe publique User {private int id; name de chaîne privée; Int privé; // get, définissez la méthode}2.5. Définissez le fichier de mappage SQL UserMapper.xml qui exploite le tableau des utilisateurs
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><Mapper namespace = "com.atuigu.mybatis_test.test1.userperper"> <select id = "getuser" ParameterType = "int" resultType = "com.atguigu.mybatis_test.test1.user"> SELECT * parmi les utilisateurs où id = # {id} </lect> </powper>2.6. Enregistrez le fichier userMapper.xml dans le fichier conf.xml
<mappers> <mapper ressource = "com / atguigu / mybatis_test / test1 / userMapper.xml" /> </mappers>
2.7. Écriture du code de test: exécutez des instructions de sélection définies
classe publique test {public static void main (string [] args) lève ioException {String Resource = "conf.xml"; // Chargez le fichier de configuration de MyBatis (il charge également le fichier de mappage associé) Reader = Resources.getResourCeasReader (ressource); // Build the Factory of SqlSessionFactory SessionFactory = new SQLSessionFactoryBuilder (). Build (Reader); // Créer une session SQLSESIONSQLSESSESSE qui peut exécuter SQL dans le fichier de chaîne de mappage = SessionFactory.OpenSession (); // Mapping SQL Identification String Statement = "com.atGuigu.mybatis.Bean.Usermapper" + ". SQLUSER User = Session.Selectone (instruction, 1); System.out.println (utilisateur);}}3. Faire fonctionner le tableau des utilisateurs
3.1.xml Implémentation
3.1.1. Définir le fichier XML de mappage SQL:
<insert id = "insertuser" ParameterType = "com.atuigu.ibatis.bean.user"> insérer dans les utilisateurs (nom, âge) (# {name}, # {age}); </sert> <delete id = "DeleteUser" ParameterType = "int"> Supprimer des utilisateurs où id = # {id} </ delete> paramètreType = "com.atuigu.ibatis.bean.user"> Updre les utilisateurs set name = # {name}, age = # {age} où id = # {id} </dated> <select id = "selectUser" ParameterType = "int" resultType = "com.atguigu.ibatis.bean.User"> SELECT * provenant des utilisateurs sur les utilisateurs où les utilisateurs id = # {id} </ select> <select id = "selectAlUsers" resultType = "com.atguigu.ibatis.bean.user"> sélectionner * dans les utilisateurs </lect>3.1.2. Enregistrez ce fichier de mappage dans config.xml
<mapper ressource = "com / atguigu / ibatis / bean / userMapper.xml" />
3.1.3. Appelé dans dao
Utilisateur public getUserById (int id) {SQLSession Session = SessionFactory.OpenSession (); utilisateur utilisateur = session.Selectone (URI + ". SELECTUSER", ID); RETOUR User;}3.2. Mise en œuvre des annotations
3.2.1. Définissez l'interface pour la cartographie SQL
interface publique UserMapper {@Insert ("INSERT INTO des utilisateurs (nom, âge) VALEURS (# {name}, # {age})") public int insertuser (utilisateur utilisateur); @ delete ("supprimer des utilisateurs où id = # {id}") public Int DeleteUserById (int id); @ update ("Update les utilisateurs set nom = # {nom}, Age = # {Age} Where id = # {id} ") public int updateUser (utilisateur utilisateur); @ select (" select * dans les utilisateurs où id = # {id} ") utilisateur public getUserById (int id); @ select (" select * from users ") public list <serv> getAlUser ();}3.2.2. Enregistrez cette interface de mappage dans la configuration
<mapper />
3.2.3. Appelé dans dao
L'utilisateur public getUserById (int id) {sqlSession session = sessionfactory.opencession (); userMapper Mapper = session.getMapper (userMapper.class); user user = mappper.getUserById (id); return user;}4. Plusieurs endroits qui peuvent être optimisés
4.1. La configuration de connexion à la base de données peut être placée séparément dans un fichier de propriétés.
## db.properties <br> <Properties Resource = "db.properties" /> <propriété name = "driver" value = "$ {driver}" /> <propriété name = "url" value = "$ {url}" /> <propriété name = "username" value = "$ {username}" /> <propriété nom = "mot de passe" value = "value =" $ {} "4.2. Définissez Alias pour les classes d'entités et simplifiez les références dans les fichiers XML de mappage SQL
<CypeAliases> <tycias type = "com.atuigu.ibatis.bean.user" alias = "_ User" /> </pactEaliases>
4.3. Vous pouvez ajouter un fichier de configuration log4j sous SRC pour imprimer les informations de journal
1. Ajouter un pot:
log4j-1.2.16.jar
2.1. log4j.properties (méthode 1)
log4j.properties, log4j.rootlogger = debug, console # consolelog4j.appendender.console = org.apache.log4j.consoleAppenderLog4j.appenden % -5p [% c] - % m% nlog4j.logger.java.sql.resultSet = infolog4j.logger.org.apache = infolog4j.logger.java.sql.connection = debuglog4j.logger.java.sql.statement = debuglog4j.logger.java.
2.2. log4j.xml (méthode 2)
<? xml version = "1.0" Encoding = "utf-8"?> <! doctype log4j: Système de configuration "log4j.dtd"> <log4j: configuration xmlns: log4j = "http://jakarta.apache.org/log4j/"> <appender name = "stdout"> <alalout> Value = "% - 5p% d {mm-dd hh: mm: ss, ss}% m (% f:% l) / n" /> </sage> </Prender> <logger name = "java.sql"> <level value = "debug" /> </ logger> /> </ logger> <hoot> <niveau de valeur = "debug" /> <appender-ref ref = "stdout" /> </ root> </ log4j: configuration>5. Résoudre les conflits entre les noms de champ et les noms d'attribut de classe d'entités
5.1. Préparer les tables et les champs
Créer des ordres de table (ORDAND_ID int primaire clés auto_increment, order_no varchar (20), order_price float); insérer dans les commandes (ordonnance_no, ordre_price) ('aaaa', 23); insérer dans les commandes (ordonnance_no, ordre_prit 22);5.2. Définir les cours d'entités
Ordre de classe publique {private int id; private String OrderNo; Private Float Prix;}5.3. Implémentez la requête de GetOrderById (ID):
Méthode 1: Définir les alias dans les instructions SQL
<select id = "Selectorder" ParameterType = "int" resultType = "_ Order"> SELECT ORDAND_ID ID, ORDAND_NO ORDERNO, ORDER_PRICE PRIX D'ORDERS WHERE ORDRE_ID = # {ID} </lect>Méthode 2: via <SultMap>
<select id = "SelectorDerResultMap" ParameterType = "int" resultMap = "OrderResultMap"> SELECT * From Orders Where Order_id = # {id} </ SELECT> <ResultMap Type = "_ Order" id = "OrderResultMap"> <id Property = "ID" Column = "Order_id" /> <Result Property = "Orderno" Property = "Price" Column = "ORDER_PRICE" /> <Result Property = "Price" Column = "ORDER_PRICE" /> <ResultMap>6. Implémenter la requête de table d'association
6.1. Association individuelle
6.1.1. Proposer les exigences
Informations sur la classe de requête basée sur ID de classe (informations avec l'enseignant)
6.1.2. Créer des tables et des données
Create Table Teacher (t_id int primaire clé Auto_inCment, t_name varchar (20)); Créer une classe de table (c_id int primaire key auto_increment, c_name varchar (20), enseign_id int); alter table class add contraint fk_teacher_id Foreign Key (enseign_id) Regences Teacher (t_id); Insérer dans le professeur (t_name) valeurs ('ls1'); insérer dans les valeurs de l'enseignant (t_name) ('ls2'); insérer dans la classe (c_name, enseignante) valeurs ('bj_a', 1); insérer dans la classe (c_name, enseignant_id) valeurs ('bj_b', 2);6.1.3. Définir les cours d'entités:
Public Class Teacher {private int id; name de chaîne privée;} Classes publiques Classes {private int id; Nom de la chaîne privée; professeur de professeur privé;}6.1.4. Définissez le fichier de mappage SQL classmapper.xml
<! - Méthode 1: Résultats imbriqués: Utilisez des cartes de résultats imbriquées pour traiter un sous-ensemble de résultats conjoints en double sélection * From Class C, Teacher T, Student S Where C.Teacher_id = T.T_ID et C.C_ID = S.Class_id et C.C_ID = 1 -> <Select Id = "GetClass3" ParameterType = "int" ResultMap = "classResultMap3"> Sélectionner * de Classe C, Student T, Student S Where C.Teacher_id = t.t_id et c.c_id = s.class_id et c.c_id = 1 -> <select id = "getClass3" ParameterType = "int" resultMap = "classResultMap3"> SELECT * From Class C, Teacher T, Student s Where C.Teacher_id = t.t_id et c.c_id = s.class_id et c.c_id = # {id} </lect> <resultMap type = "_ Classes" id = "classResultMap3"> <id propriété = "id" collumn = "c_id" /> <result Property = "name" column = "c_id" /> <association Property = "Teacher" colum propriété = "name" chronn = "t_name" /> <résultat propriété = "name" chronn = "t_name" /> </ association> <! - OFTYPE Spécifie le type d'objet dans la collection des étudiants -> <collection propriété = "Students" ofType = "_ Student"> <id Property = "id" Column = "S_ID" /> <le résultat = "Nom" Column = "S_NAME" /> </ Collection> </SeultMap> <! - Méthode 2: Query imbriqué: Renvoie le type de complexe attendu en exécutant une autre instruction de mappage SQL Sélectionner * dans la classe où C_ID = 1; id = "getClass4" ParameterType = "int" resultMap = "classResultMap4"> SELECT * From class où c_id = # {id} </ select> <idmaps type type = "_ classes" id = "classResultMap4"> <id propriété = "id" column = "c_id" /> <résultat propriété = "name" colonne Column = "Teacher_id" javatype = "_ Teacher" select = "getTeacher2"> </ association> <collection Property = "Students" ofType = "_ Student" Column = "C_id" select = "GetStudent"> </ Collection> </ ResultMap> <Select Id = "GetTeacher2" paramètre, T_nom De l'enseignant où t_id = # {id} </ select> <select id = "getStudent" ParameterType = "int" resultType = "_ Student"> SELECT S_ID ID, S_NAME NAME FROM Student Where class_id = # {id} </lect>6.1.5. Test
@Testpublic void testoo () {sqlSession sqlSession = factory.opencession (); classes c = sqlSession.Selectone ("com.atguigu.day03_mybatis.test5.oomApertclass", 1); system.out.println (c);} @ testPublic Void Testoo2 () {sqLSession = SqLsure = TestPublic Void Testoo2 () {SqlSession = SQLSLES factory.opencession (); classes c = sqlSession.selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass2", 1); System.out.println (c);}6.2. Association un-à-plusieurs
6.2.1. Proposer les exigences
Interrogez les informations de classe correspondantes selon Classid, y compris les élèves et les enseignants
6.2.2. Créer des tables et des données:
Créer la table Student (S_ID int primaire clé AUTO_INCRAMENT, S_NAME VARCHAR (20), CLASS_ID INT); INSERT INTO Student (S_NAME, CLASS_ID) VALEURS ('XS_A', 1); Insérer dans Student (S_NAME, CLASS_ID) VALEURS ('XS_B', 1); insert dans l'étudiant (S_NAM Student (s_name, class_id) valeurs ('xs_d', 2); insérer dans Student (s_name, class_id) valeurs ('xs_e', 2); insérer dans Student (s_name, class_id) valeurs ('xs_f', 2);6.2.3. Définir les cours d'entités
classe publique étudiant {private int id; name de chaîne privée;} classes de classes publiques {private int id; nom de chaîne privée; enseignant privé;6.2.4. Définissez le fichier de mappage SQL classmapper.xml
<! - Méthode 1: Résultats imbriqués: Utilisez des cartes de résultats imbriquées pour traiter un sous-ensemble de résultats conjoints en double sélection * From Class C, Teacher T, Student S Where C.Teacher_id = T.T_ID et C.C_ID = S.Class_id et C.C_ID = 1 -> <Select Id = "GetClass3" ParameterType = "int" ResultMap = "classResultMap3"> Sélectionner * de Classe C, Student T, Student S Where C.Teacher_id = t.t_id et c.c_id = s.class_id et c.c_id = 1 -> <select id = "getClass3" ParameterType = "int" resultMap = "classResultMap3"> SELECT * From Class C, Teacher T, Student s Where C.Teacher_id = t.t_id et c.c_id = s.class_id et c.c_id = # {id} </lect> <resultMap type = "_ Classes" id = "classResultMap3"> <id propriété = "id" collumn = "c_id" /> <result Property = "name" column = "c_id" /> <association Property = "Teacher" colum propriété = "name" chronn = "t_name" /> <résultat propriété = "name" chronn = "t_name" /> </ association> <! - OFTYPE Spécifie le type d'objet dans la collection des étudiants -> <collection propriété = "Students" ofType = "_ Student"> <id Property = "id" Column = "S_ID" /> <le résultat = "Nom" Column = "S_NAME" /> </ Collection> </SeultMap> <! - Méthode 2: Query imbriqué: Renvoie le type de complexe attendu en exécutant une autre instruction de mappage SQL Sélectionner * dans la classe où C_ID = 1; id = "getClass4" ParameterType = "int" resultMap = "classResultMap4"> SELECT * From class où c_id = # {id} </ select> <idmaps type type = "_ classes" id = "classResultMap4"> <id propriété = "id" column = "c_id" /> <résultat propriété = "name" colonne Column = "Teacher_id" javatype = "_ Teacher" select = "getTeacher2"> </ association> <collection Property = "Students" ofType = "_ Student" Column = "C_id" select = "GetStudent"> </ Collection> </ ResultMap> <Select Id = "GetTeacher2" paramètre, T_nom De l'enseignant où t_id = # {id} </ select> <select id = "getStudent" ParameterType = "int" resultType = "_ Student"> SELECT S_ID ID, S_NAME NAME FROM Student Where class_id = # {id} </lect>6.2.5. Test
@TestPublic void testom () {sqlSession sqlSession = factory.opencession (); classes c = SqlSession.Selectone ("com.atguig.day03_mybatis.test5.oomapper.getClass3", 1); System.out.println (c);} @ testpublic Void testom2 () {sqlsSls. = Factory.OpenSession (); Classes C = SqlSession.Selectone ("com.atguigu.day03_mybatis.test5.oomapper.getClass4", 1); System.out.println (c);}7. Dynamic SQL et Fuzzy Query
7.1. Exigences
Implémentez l'utilisateur de la requête multi-conditions (nom Fuzzy Matching, âge entre la valeur minimale spécifiée et la valeur maximale).
7.2. Préparer la base de données et les tables
Créer la table D_USER (id int primaire clé auto_increment, nom varchar (10), âge int (3)); insérer dans d_user (nom, âge) valeurs ('tom', 12); Insérer dans D_USER (nom, âge) VALEURS («Bob», 13); INSERT IN D_USER (nom, âge) VALEURS ('Jack', 18); 7.3.ConditionUser (Classe d'entité conditionnelle de requête) Nom de la chaîne privée; private int Minage; private int maxage;7.4.
INT PRIVÉ ID; Nom de la chaîne privée; Int privé;
7.5.UserMapper.xml (fichier de carte)
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mappen 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "com.atuigu.day03_mybatis.test6.userperper"> <select id = "getuser" paramètreType = "com.atguigu.day03_mybatis.test6.conditionUser" resultType = "com.atGuigu.Day03_Mybatis.test6.USER"> SELECT * WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHERE WHORK_MYBATIS.TEST6.USER " Âge> = # {Minage} et Age <= # {maxage} <if test = 'name! = "% null%"'> Et name comme # {name} </ if> </lect> </naupper>7.6.Userest (test)
classe publique USTERST {public static void Main (String [] args) lève IOException {Reader Reader = Resources.GetResourCeasReader ("conf.XML"); SqlSessionFactory SessionFactory = New SqlSessionFactoryBuilder (). Build (Reader); SQLSESSESS "com.atguigu.day03_mybatis.test6.usermapper.getUser"; list <serv> list = sqlSession.SelectList (instruction, new conditionUser ("% a%", 1, 12)); System.out.println (list);}}Tags SQL dynamiques disponibles dans Mybatis
8. Appeler les procédures stockées
8.1. Faire une demande
Interrogez le nombre d'hommes ou de femmes, si le entrant est 0, les femmes sinon les hommes
8.2. Préparer les tables de base de données et les procédures stockées:
Créer un tableau P_USER (id int primal key Auto_increment, name varchar (10), sexe char (2)); insérer dans p_user (nom, sexe) ('a', "mâle"); insérer dans p_user (nom, sexe) valeurs ('b', "femelle"); insérer dans p_user (nom, sexe) valeurs ('c', "mâle"); #Create procédure stockée (recherchez le nombre d'hommes ou de femmes, si le entrant est 0, les femmes sont par ailleurs mâles) délimiter $ procédure mybatis.ges_user_count (dans sexe_id int, out user_count int) commencent if sex_id = 0 thenselect comptage (*) de Mybatis.p_user où p_user. Count (*) de mybatis.p_user où p_user.sex = 'mâle' dans user_count; end if; end $ # appel de procédure stockée délimiteur; set @user_count = 0; appel mybatis.ges_user_count (1, @user_count); sélectionner @user_count;8.3. Créez la classe d'entité du tableau
classe publique utilisateur {ID de chaîne privée; nom de chaîne privée; Sexe de chaîne privée;}8.4
<mapper namespace = "com.atguigu.mybatis.test7.UserMapper"> <! - Query obtient le nombre d'hommes ou de femmes. Si le nouveau est 0, alors les femmes sont autrement les hommes.Call mybatis.get_user_count (1, @user_count); -> <select id = "getCount" StatementType = "callable" Parametermap = "GetCountMap"> CALL MYBATIS.GET_USER_COUNT (?,?) id = "getCountMap"> <paramètre propriété = "sexe_id" mode = "dans" jdbcType = "Integer" /> <paramètre propriété = "user_count" mode = "out" jdbcType = "Integer" // </ ParameTermap> </ Mapper>
8.5. Test
Map <String, Integer> Parammap = new HashMap <> (); parammap.put ("Sex_id", 0); session.Selectone (instruction, Parammap); Integer userCount = Parammap.get ("user_count"); system.out.println (userCount);9. Mybatis Cache
9.1. Comprendre le cache mybatis
Tout comme la plupart des cadres de couche de persistance, MyBatis fournit également un support pour les caches L1 et L2.
1. Cache de niveau 1: Cache local Hashmap Basé sur PerpetualCache, sa portée de stockage est la session. Une fois la session à chasse d'eau ou de fermeture, tous les caches de la session seront effacées.
2. Le mécanisme du cache secondaire est le même que celui du cache primaire. Par défaut, il utilise également PerpetualCache et HashMap Storage. La différence est que sa portée de stockage est le mappeur (espace de noms), et il peut personnaliser la source de stockage, comme ehcache.
3. Pour le mécanisme de mise à jour des données de cache, lorsqu'une certaine portée (Session de cache de premier niveau / espaces de noms de cache de deuxième niveau) est effectué en opérations C / U / D, tous les caches de sélections sous cette portée seront effacés par défaut.
9.2. Cache de niveau 1 du niveau 1
9.2.1. Requête basée sur la tâche
Interrogez l'objet d'enregistrement utilisateur correspondant en fonction de l'ID.
9.2.2. Préparer les tables et les données de base de données
Créer la table C_USER (id int primaire clé Auto_increment, nom varchar (20), Age int); insérer dans c_user (nom, âge) valeurs ('tom', 12); insérer dans c_user (nom, âge) valeurs ('jack', 11);9.2.3. Créez la classe d'entité du tableau
La classe publique l'utilisateur implémente Serializable {private int id; name de chaîne privée; Int privé;9.2.4.Usermapper.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><Mapper namespace="com.atguigu.mybatis.test8.userMapper"><select id="getUser" parameterType="int" resultType="_CUser">select * from c_user where id=#{id}</select><update id="updateUser" parameterType="_CUser">update c_user setname=#{name}, Âge = # {Age} où id = # {id} </patedage> </cappe>9.2.5. Essai
/ ** Cache de niveau 1: c'est-à-dire le cache au niveau de la session (sur par défaut) * / @ TestPublic void testCache1 () {SqlSession Session = MyBatisUtils.getSession (); String Statement = "com.atguigu.mybatis.test8.UserMapper.GetUser"; utilisateur user = session.Selectone (Statement, 1); System.out. Le cache de niveau 1 sera utilisé par défaut * // * user = session.selectone (instruction, 1); System.out.println (utilisateur); * // * 1. Ce doit être la même session. Si l'objet de session a été fermé (), il est impossible de l'utiliser * // * session = mybatisutils.getSession (); user = session.selectone (instruction, 1); System.out.println (utilisateur); * // * 2. Les conditions de requête sont les mêmes * // * user = session.selectone (instruction, 2); System.out.println (utilisateur); * // * 3. Session.ClearCache () n'a pas été exécuté pour nettoyer le cache * // * session.clearcache (); user = session.selectone (instruction, 2); System.out.println (utilisateur); * // * 4. Aucune opération qui a été ajoutée, supprimée et modifiée (ces opérations nettoieront le cache) * // * session.update ("com.atguigu.mybatis.test8.usermapper.updateuser", nouvel utilisateur (2, "utilisateur", 23)); user = session.Selectone (déclaration, 2); System.out.println (user); * /}9.3.Mybatis de niveau 2
9.3.1. Ajouter un <cache> dans userMapper.xml
<mapper namespace = "com.atguigu.mybatis.test8.UserMapper"> <cache />
9.3.2. Essai
/ ** Test Level 2 Cache * / @ TestPublic void TestCache2 () {String Statement = "com.atGuigu.mybatis.test8.UserMapper.GetUser"; SqlSession Session = MyBatisUtils.getSession (); User user = session.SelectOne (déclaration, déclaration, 1); session.Commit (); System.out.println ("user =" + user); SqlSession Session2 = MyBatisUtils.getSession (); user = session2.Selectone (instruction, 1); session.commit (); System.out.println ("user2 =" + user);}9.3.3. Notes supplémentaires
1. Toutes les instructions de sélection dans le fichier de l'instruction de mappage seront mises en cache.
2. Carte toutes les instructions Insérer, Mettre à jour et supprimer dans le fichier de remise en état de réapprovisionnement du cache.
3. Le cache sera récité en utilisant l'algorithme le moins récemment utilisé (LRU, le moins récemment utilisé).
4. Le cache sera rafraîchi en fonction de l'intervalle de temps spécifié.
5. Le cache stockera 1024 objets
<cacheeviction = "fifo" // La stratégie de recyclage est le premier-dans, le premier out-out flushinterval = "60000" // temps de rafraîchissement automatique 60SSize = "512" // cache jusqu'à 512 objets de référence readonly = "true" // lecture uniquement
10. Intégration de printemps Mybatis
10.1. Ajouter
【Mybatis】
mybatis-3.2.0.jar
mybatis-spring-1.1.1.jar
log4j-1.2.17.jar
【printemps】
printemps-aop-3.2.0.release.jar
Spring-Beans-3.2.0.release.jar
Spring-Context-3.2.0.release.jar
printemps-3.2.0.release.jar
Spring-expression-3.2.0.release.jar
printemps-jdbc-3.2.0.release.jar
Spring-test-3.2.4.release.jar
printemps-tx-3.2.0.release.jar
aopalliance-1.0.jar
cglib-nodep-2.2.3.jar
Commons-Logging-1.1.1.jar
【Package de pilote MySQL】
MySQL-Connector-Java-5.0.4-Bin.jar
10.2. Tables de base de données
Créer un tableau S_USER (User_ID int Auto_increment Clé primaire, user_name varchar (30), user_birthday date, user_salary double)
10.3. Classe d'entité: utilisateur
classe publique User {private int id; name de chaîne privée; anniversaire de date privée; double salaire privé; // set, obtenez la méthode}10.4.Dao Interface: UserMapper (xxxmapper)
Interface publique UserMapper {void Save (utilisateur utilisateur); void Update (utilisateur utilisateur); void Delete (int id); utilisateur findById (int id); list <utilisateur> findall ();}10.5.SQL Fichier de mappage: userMapper.xml (le même nom que l'interface ignore en majuscules et en majuscules)
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappep Public "- // Mybatis.org//dtd Mappen 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace = "com.atuigu.mybatis.test9.UserMapper"> <resultmap type = "user" id = "userresult"> <résultat chronn = "user_id" propriété = "id" /> <résultat column = "user_name" Property = "name" /> <résultat chronnk = "user_birthday" propriété = "anniversaire" /> <sult pulumn = "user_" propriété = "salaire" /> <résultat chronn = "user_salary" propriété = "salaire" /> <sectReMAP> <! - Obtenez l'ID après avoir inséré les données -> <insert id = "enregistrer" keyColumn = "user_id" keyproperty = "id" usegeneratedKeys = "true"> insert dans S_User (user_name, user_birthday, user_salary) valeurs (# {name}, # {anniversaire}, # {salaire}) </sert> <update id = "update"> update s_userset user_name = # {name}, user_birthday = # {anniversaire}, user_salary = # # {salaire} # {id} </ update> <delete id = "Delete"> Delete de s_userwhere user_id = # {id} </ delete> <select id = "findbyid" resultMap = "userresult"> select * from s_userwhere user_id = # {id} </lect> <select id = "findall" resultMap = "userresult"> select * from From From From From From From From From From From From From From From From From From From From From From From From From From from from from from from from from from from S_User </lect> </ mapper>10.6.Spring Fichier de configuration: beans.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.spring "xmlns: context =" http://www.springframework.org/schema/context "xmlns: tx =" http://www.springframework.org/schema/tx " Amework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/context/sprin G-Context-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp: //www.springframework.org/schema/tx/spring-tx-3.2.xsd "> <! - 1. Source de données: driverManagerDataSource -> <bean id = "dataSource" class = "org.springframework.jdbc.datasource.drivermanagerdatasource"> <propriété name = "driverclassname" value = "com.mysql.jdbc.driver" /> <propriété name = "url" value = "jdbc: mysql: // localhost: 3306 / mybatis" /> <propriété name = "username" value = "root" /> <propriété name = "mot de passe" value = "root" /> </ bean> <! - 2. MyBatis's SQLSession Factory: SQLSessionFactoryBeandataSource / TypeAdiasespackage -> <bean id = "sqlSessionFactory"> <propriété name = "dataSource" ref = "dataSource" /> <propriété name = "TapalSespackage" Value = "com.atigu.spring_mybatis2.Domain" / </ Bean>. MyBatis scanne automatiquement pour charger des fichiers de mappage SQL: MAPPERSCANNERCONFIGURERSQLSESSESSEFACTORY / BASEPACKAGE -> <EAN> <propriété Name = "BASEPACKAGE" Value = "Com.atigu.spring_mybatis2.mapper" /> <propriété Name = "SQLSESSIE Gestion: DataSourceTransActionManager -> <Bean id = "txManager"> <propriété name = "dataSource" ref = "DataSource" /> </Ean> <! - 5. Utiliser la transaction déclarative -> <tx: transaction-manager = "txmanager" /> </fEANS> annotation-amen
10.7.mybatis Fichier de configuration: mybatis-config.xml
<? xml version = "1.0" Encoding = "utf-8"?> <! doctype ConfigurationPublic "- // Mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> <! inutile -> <! - Définissez le fichier de configuration externe -> <! - Définissez un nom de catégorie -> <! - Définissez l'environnement de connexion de la base de données -> <!
10.8. Test
@Runwith (springjunit4classrunner.class) // Utilisez le framework de test de Springtest @contextConfiguration ("/ beans.xml") // CONFIGURATION PUBLIC PUBLIC SMTEST {@Autowired // Inject Private Userperper UserPapper; @TestPublic Void Save () {user user = new user (); user.setBirThay (New Date ()); user.setName ("Mary"); user.setsalary (300); userMapper.save (user); System.out.println (user.getId ());} @ testpublic void update () {user user = userapper.FindById (2); user.Setsalary (2000); userperther.update (user);}}}}}}}}}}}}}}}}}}}}}}}}}} VOID VOID (2000); userpert. gensCe qui précède est l'introduction rapide à MyBatis (analyse concise et simple et facile à comprendre) introduite par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!