Projet MyBatis-Spring
Actuellement, la plupart des projets Internet Java sont construits à l'aide de Spring MVC + Spring + MyBatis.
L'utilisation de Spring IOC peut gérer efficacement diverses ressources Java et réaliser la fonction de plug-and-play; Grâce au cadre Spring AOP, les transactions de base de données peuvent être confiées à Spring Management, éliminant une grande partie du code de transaction et combinant avec la flexibilité élevée, des caractéristiques SQL configurables et optimisées de MyBatis, il est possible de créer de grands sites Web à haute performance.
Il ne fait aucun doute que les deux principaux cadres, Mybatis et Spring, sont devenus la combinaison de framework traditionnelle de la technologie Internet Java. Ils ont résisté au test d'un grand volume de données et de demandes à grande échelle et ont été largement utilisés dans les systèmes Internet. L'utilisation de MyBatis-Spring rend la couche commerciale et la couche de modèle mieux séparées. Dans le même temps, l'utilisation de MyBatis dans l'environnement de printemps est plus simple, économiser beaucoup de code, et vous pouvez même éviter d'utiliser des objets tels que SQLSessionFactory et SQLSession, car MyBatis-Spring les résume pour nous.
Extrait de: "Java Ee Internet Framework léger Développement intégré"
Étape 1: créer un projet de test
La première étape consiste à créer un nouveau projet WebProject appelé [mybatisandspring] dans l'idée:
Créez ensuite 4 packages vides dans [SRC]:
Créez ensuite un nouveau dossier source [config] pour placer divers fichiers de configuration de ressources:
Créez ensuite un nouveau dossier de sécurité [Web-Inf] par défaut dans le dossier [Web] et créez un [classes] et [lib], et modifiez l'emplacement de sortie du projet sous [Classes]:
La structure initiale complète du projet est la suivante:
Étape 2: Présentation du package de pot de dépendance
La deuxième étape consiste à préparer le package de pot de dépendance du projet:
Placez le package JAR répertorié ci-dessus dans le dossier [lib] dans le dossier [Web-Inf], puis ajoutez des dépendances.
Étape 3: Écrivez des fichiers de configuration de ressort
La troisième étape consiste à écrire le fichier de configuration de ressort:
<? 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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <! - Fichier de configuration de chargement -> < id = "dataSource"> <propriété name = "driverclassName" value = "$ {jdbc.driver}" /> <propriété name = "url" value = "$ {jdbc.url}" /> <propriété name = "username" value = " </EAN> <! - SqlSessionFactory -> <bean id = "SqlSessionFactory"> <! - Charger le fichier de configuration MyBatis -> <propriété name = "configLocation" value = "Mybatis / SqlMapConfig.xml" /> <! - Source de données -> <propriété Name = "DataSource" Ref = "Datasource" /> </ Bean> "DataSource" Ref = "Datasource" /> </ Bean> </ Beans> "DataSource" Ref = "Datasource" /> </ Bean> </ Beans> "DataSource" Ref = "DataSource" /> </ Bean>Étape 4: Écrivez le fichier de configuration MyBatis
Étape 4: Écrivez le fichier de configuration global de MyBatis sous le package [MyBatis] sqlmapconfig.xml:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <config> <! Switch -> <paraming name = "LazyLoadingEnabled" value = "true" /> <! - Modifiez le chargement actif vers le chargement passif (c'est-à-dire le chargement à la demande) -> <paramètre name = "AggressIlayLoading" value = "false" /> <! <Cypealiases> <package name = "cn.wmyskxz.pojo" /> </pactaliases> <! - Chargez le fichier de carte -> <mappers> <! - Chargez un fichier de carte à un moment via la méthode des ressources -> <! name = "cn.wmyskxz.mapper" /> </mappers> </ configuration>
Dans ce fichier de configuration:
Étape 5: Écrivez un mappeur et d'autres fichiers de configuration
Étape 5: Écrivez le fichier de mappage du mappeur. Ici, le nom du fichier de mappage de mappeur est toujours défini comme "userMapper.xml" (qui est cohérent avec la configuration dans sqlmapconfig.xml). Afin de tester l'effet, une seule carte SQL de classe de requête est configurée:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapperpace =" test "> <sélection ParameterType = "_ int" resultType = "User"> SELECT * FROM User Where id = # {id} </lect> </naupper>Dans cette configuration, les paramètres de sortie sont mappés à "l'utilisateur", car la classe d'entité dans le package "cn.wmyskxz.pojo" a été configurée dans SqlmapConfig.xml avant d'utiliser Alias (c'est-à-dire le nom de classe avec "FindUserById", alors vous avez juste besoin de créer la classe Java entité correspondant à "FindUserById" sous le cours de la classe Java entité correspondant à "FindUserById" sous le cours de la Java Entity Class correspondant à "FindUserById" sous le sous le sous le cours de la classe Java Entity Class pour "FindUserById" Package "cn.wmyskxz.pojo":
package cn.wmyskxz.pojo; import java.io.serializable; public class utilisateur implémente serializable {private int id; Nom d'utilisateur de chaîne privée; / * Getter et Setter * /}La mise en œuvre de l'interface sérialisable consiste à se préparer à l'utilisation ultérieure du proxy dynamique du mappeur, et aucun proxy dynamique n'est utilisé ici.
Les informations de connexion de la base de données sont configurées dans la ressource de la base de données "db.properties" et configurées sous la forme de "key = value". String utilise "$ {}" pour obtenir la valeur correspondant à la clé:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306 / mybatis? CharacterEncoding = utf-8jdbc.Username = rootjdbc.password = root
De plus, la configuration du journal est la même que la configuration précédente, donc je l'ai directement collée:
# Configuration de la journalisation globale # Dans l'environnement de développement, le niveau de journal doit être défini sur débogage et l'environnement de production doit être défini sur les informations ou les errelog4j.rootlogger = debug, stdout # console SORTIE ... LOG4J.APPENDER.STDOUT = ORG.APACHE.LOG4J.CONSOLEAPSENDERLOG4J.APPENDER.STDOUT.LYOUT = ORG.APACHES.LOG4J.PATTERNLAYOUTLOG4J.APPEND
Étape 6: Écrivez la couche Dao
Étape 6: Écrivez la couche d'objet d'accès aux données.
Étant donné que ce projet interroge uniquement l'utilisateur, il n'y a qu'une seule classe dans la couche DAO. L'interface d'interface de la couche DAO est créée dans le package "CN.Wmyskxz", qui définit la méthode FindUserById et le paramètre est la valeur d'ID de l'utilisateur (Type int):
Package CN.WMYSKXZ.DAO; Importer CN.Wmyskxz.Pojo.User; Interface publique UserDao {// Informations utilisateur basées sur l'ID Utilisateur public FindUserById (int id) lève une exception;}Créez ensuite la classe d'implémentation d'interface UserDAO UserDaoimpl sous le même package:
Package CN.Wmyskxz.dao; Import Cn.Wmyskxz.Pojo.User; Import org.apache.ibatis.Session.SqlSession; Import Org.Mybatis.Spring.Support.SqlSessionDaosupport; public Class Userdaoimpl L'utilisateur public FindUserById (int id) lève une exception {// hériter de la classe SQLSessionDaOSupport et passe this.getsqlSession () Get SqlSession SqlSession SqlSession = this.getsqlSession (); User user = sqlSession.SelectOne ("test.finSserById", id); RETOUR UTILISATEUR; }}Il y a quelques explications:
<! - Interface DAO originale -> <bean id = "userdao"> <propriété name = "sqlSessionFactory" ref = "sqlSessionFactory" /> </ank>
Remarque: Une fois que la classe d'implémentation DAO a hérité de la classe parent SQLSessionDaosupport, il n'est pas nécessaire de définir la méthode pour obtenir la classe d'instance de session SQLSession en soi. La classe Parent chargera les informations de source de données par défaut et fournira une méthode pour obtenir la classe SQLSession.
Étape 7: Écrivez la classe de test de service
Créez la classe de test [UserServiceTest] sous le package "CN.Wmyskxz.test":
package cn.wmyskxz.test; import cn.wmyskxz.dao.userdao; import cn.wmyskxz.pojo.user; import org.junit.before; import org.Junit.test; import org.springframework.context.applicationContext; import; org.springframework.context.support.classPathxmlApplicationContext; public class UseserServiceTest {private applicationContext applicationContext; // Obtenez l'objet de fichier de configuration Spring avant avant d'exécuter la méthode de test // annotation @Before appelle cette méthode avant d'exécuter toutes les méthodes de test de cette classe @Before public void setup () lève exception {applicationContext = new ClassPathXmlApplicationContext ("ClassPath: Spring / applicationContext.xml"); } @Test public void TestFindUserById () lève une exception {// Obtenez un objet UserDao en configurant les objets Resource UserDao UserDao = (userdao) ApplicationContext.getBean ("userDao"); // appelle l'utilisateur utilisateur utilisateur = userdao.finSUserById (1); // output les informations utilisateur System.out.println (user.getId () + ":" + user.getUserName ()); }}Exécutez la méthode de test et les résultats de sortie sont les suivants:
Implémentation de proxy dynamique + annotation
Le programme d'exemple ci-dessus n'est pas terminé à l'aide de proxy et d'annotations dynamiques de mappeur. Essayons comment utiliser le proxy dynamique et les annotations:
Étape 1: Écrivez UserQueryMapper
Créez une nouvelle interface proxy [UserQueryMapper] sous [Mappeur] et utilisez des annotations:
Package CN.Wmyskxz.mapper; Importer Cn.Wmyskxz.Pojo.User; Importer org.apache.ibatis.annotations.Select; Interface publique UserQueryMapper {@Select (SELECT * From User Where Id = # {id} ") Utilisateur public FindUserById (int id) Throws Exception;}Remarque: Par défaut, le nom du bean est UserQueryMapper (c'est-à-dire que la première lettre est en minuscules)
Maintenant que nous avons la classe proxy, nous devons informer Spring pour scanner cette classe ici. Le mappeur doit utiliser un scanner spécial pour scanner l'objet de configuration:
<! - Scanner de mappeurs -> <an Bean> <! - Scannez les composants sous le package CN.Wmyskxz.mapper -> <propriété name = "basepackage" value = "cn.wmyskxz.mapper" /> </ bean>
Étape 2: Écrivez une classe de test
Cette fois, nous ne récupérons plus l'objet UserDao, mais l'objet de proxy de mappeur défini UserQueryMapper:
package cn.wmyskxz.test; import cn.wmyskxz.mapper.userQueryMapper; import Cn.wmyskxz.pojo.user; import org.junit.before; import org.junit.test; import org.springframework.context.applicationContext; import; org.springframework.context.support.classPathxmlApplicationContext; public class UseserServiceTest {private applicationContext applicationContext; // Obtenez l'objet de fichier de configuration Spring avant avant d'exécuter la méthode de test // annotation @Before appelle cette méthode avant d'exécuter toutes les méthodes de test de cette classe @Before public void setup () lève exception {applicationContext = new ClassPathXmlApplicationContext ("ClassPath: Spring / applicationContext.xml"); } @Test public void TestFindUserById () lève une exception {// Obtenez un objet UserDao en configurant les objets Resource UserQueryMapper UserQueryMapper = (UserQueryMapper) ApplicationContext.getBean ("UsererChareMapper"); // Appel UserDao Method User User = UserQueryMapper.FinDuserById (1); // output les informations utilisateur System.out.println (user.getId () + ":" + user.getUserName ()); }}Exécutez la méthode de test et obtenez le résultat correct:
Vous pouvez voir que les résultats de la requête sont les mêmes que ceux des agents non mappeurs précédents.
Résumer
Ce qui précède est la méthode d'intégration parfaite entre Mybatis et Spring qui vous est présentée par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!