1. Introduction et configuration de Mybatis + Spring + MySQL
1.1 Introduction à Mybatis
MyBatis est un cadre de couche de persistance qui peut personnaliser SQL, des procédures stockées et des mappages avancés. MyBatis élimine la plupart du code JDBC, le paramètre manuel et la récupération des jeux de résultats. MyBatis utilise uniquement du XML et des annotations simples pour configurer et cartographier les types de données de base, les interfaces de carte et les pojos pour les enregistrements de base de données. Par rapport aux solutions ORM "One-Stop" telles que Hibernate et Apache OJB, MyBatis est une implémentation ORM "semi-automatisée".
Le package JAR qui doit être utilisé: MyBatis-3.0.2.jar (package MyBatis Core). mybatis-spring-1.0.0.jar (combiné avec le printemps).
Adresse de téléchargement:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2Mybatis + Spring + MySQL Configuration simple
1.2.1 Construire un environnement de printemps
(1) établir un projet Web Maven;
(2) Ajouter des fichiers Spring Framework et de configuration;
(3) Ajouter les packages JAR requis (framework Spring, Mybatis, Mybatis-Spring, Junit, etc.) à pom.xml;
(4) modifier les fichiers de configuration de web.xml et de printemps;
(5) Ajouter une page JSP et le contrôleur correspondant;
(6) test.
Pour référence: http://limingnihao.iteye.com/blog/830409. Construisez le projet SpringMVC avec Maven d'Eclipse
1.2.2 Établissement de la base de données MySQL
Établir une base de données de gestion de la sélection des cours étudiants.
Tableau: Table des élèves, table de classe, table des enseignants, table de cours, table de cours d'étudiant.
Relation logique: chaque élève a une classe; Chaque classe correspond à un enseignant de classe; Chaque enseignant ne peut être que le professeur de classe d'une seule classe;
Utilisez le SQL suivant pour créer une base de données, créez d'abord une table étudiante et insérez des données (plus de 2 éléments).
Pour plus de SQL, veuillez télécharger le fichier source du projet dans Resource / SQL.
/ * Créer une base de données * / Créer une base de données Student_Manager; Utilisez Student_Manager; / ***** Créer une table étudiante ***** / Créer une table Student_TBL (Student_id Varchar (255) Clé primaire, Student_name Varchar (10) Not Null, Student_SEX VARCHAR (10), Student_Birthday Date, class_id varchar (255)); / * Insérer les données des élèves * / insérer dans Student_TBL (Student_id, Student_name, Student_SEX, Student_Birthday, Class_id) VALEURS (123456, 'XXX', 'FEMME', '1980-08-01', 121546)
Créez le fichier de configuration MySQL.Properties utilisées pour se connecter à MySQL.
jdbc.DriverClassName = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // localhost: 3306 / student_manager? user = root & mot de passe = limingnihao & useunicode = true & caractéristique = utf-8
1.2.3 Construisez un environnement mybatis
La commande est décontractée et la commande actuelle est due au fait que vous pouvez modifier les fichiers écrits le moins possible.
1.2.3.1 Créer des entités Classe: StudentEntity
classe publique StudentEntity implémente Serialisable {private statique final long SerialVersionUID = 3096154202413606831l; Classicité privée Classique; Date privée Studentbirthday; String privé StudentID; Nom de chaîne privée; Student StudentSex privé; public Classity getClassentity () {return Classity; } Date publique getStudentBirthday () {return StudentBirthday; } public String getStudentid () {return StudentId; } public String getStudentName () {return StudentName; } public String getStudentSex () {return StudentSex; } public void setClassentity (Classity Classity) {this.classentity = Classity; } public void SetStudentBirthday (date StudentBirthday) {this.StudentBirthday = StudentBirthday; } public void SetStudentid (String StudentID) {this.Studentid = StudentId; } public void setStudentName (String StudentName) {this.studentName = StudentName; } public void setStudentSEx (String StudentSex) {this.studentSEx = StudentSEx; }} 1.2.3.2 Créer une interface d'accès aux données
L'interface DAO correspondante de la classe étudiante: StudentMapper.
Interface publique StudentMapper {public StudentEntity GetStudent (String StudentID); Public StudentEntity GetStudentandClass (String StudentID); LISTE PUBLIQUE <SUMSSIONNITY> GETSTUDENTALL (); Insertstudent de vide public (entité étudiante); Public Void DeleteStudent (entité étudiante); public void updateStudent (entité étudiante); }1.2.3.3 Créer un fichier d'instruction de mappage SQL
Étudiant classe SQL Fichier StudentMapper.xml
TAGLE RESUITMAP: mappage des champs de table et des attributs.
SELECT TAG: Requête SQL.
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Mappeur public "- // Mybatis.org//dtd Mappeur 3.0 // en" "http://mybatis.org/dtd/mybatis.data.STUDER"> <Make namespace = "com.managers <resultMap type = "StudentEntity" id = "StudentResultMap"> <id Property = "StudentId" Column = "Student_id" /> <Result Property = "StudentName" Column = "Student_Name" /> <Result Property = "StudentSEX" Column = "Student_SEX" /> <Result Property = "StudentBirthday" Column = "Student_Birthday" à id -> <select id = "getStudent" ParameterType = "String" resultType = "StudentEntity" resultMap = "StudentResultMap"> <! [CDATA [SELECT * FROM Student_tbl St Where St.Student_id = # {StudentId}]]> </ Select> <! - Query the Student List -> <Select Id = "GetSTUSTALL" resultType = "com.manager.data.model.studententity" resultMap = "StudentResultMap"> <! [CDATA [SELECT * FROM Student_TBL]]> </lect> </caper> 1.2.3.4 Créer un fichier de configuration du mappeur mybatis
Créez un fichier de configuration MyBatis dans SRC / Main / Resource: MyBatis-Config.xml.
TAGE TYPALIASES: Donnez un alias à alias. La classe com.manager.data.model.studententity peut être utilisée à la place de l'étudiant.
Tag des mappers: chargez le fichier de instruction de mappage SQL de la classe d'entité dans mybatis.
<? 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> type = "com.manager.data.model.studententity" /> </ typealiases> <mappers> <mapper ressource = "com / manager / data / maps / studentmapper.xml" /> </ mappers> </ configuration>
1.2.3.5 Modifier le fichier de configuration de Spring
Il ajoute principalement le bean de la classe d'usine de production de SQLSession: SQLSessionFactoryBean (dans le package MyBatis.Spring). Nécessite la spécification de l'emplacement du fichier de configuration et de la source de données.
Implémentation Bean correspondant à l'interface d'accès aux données. Créé via MapperFactoryBean. Il est nécessaire d'exécuter le nom complet de la classe d'interface et la référence au bean d'usine SQLSession.
<! - Importer le fichier de configuration de la propriété -> <contexte: propriété-placeholder location = "classPath: mysql.properties" /> <bean id = "dataSource"> <propriété name = "driverclassname" value = "$ {jdbc.DriverClassName}" /> <propriété name = "url" value = "$ {jdbc.url}" / <1red> <ulep = "$ {jdbc.url}" /> <Url "value =" $ {jdbc.url} "/ * <Url" Value = "$ {jdbc.url}" /> <Url "Value =" $ {jdbc.url} "/> <Url" Value = "$ {jdbc.url}" " id = "TransactionManager"> <propriété name = "dataSource" ref = "dataSource" /> </ bean> <bean id = "sqlSessionFactory"> <propriété name = "configLocation" value = "classpath: mybatis-config.xml" /> <propriété name = "dataSource" ref = "datasource" /> </ bean> id = "StudentMapper"> <propriété name = "MAPERInterface" value = "com.manager.data.studentmapper" /> <propriété name = "sqlSessionFactory" ref = "SqlSessionFactory" /> </Ean> Vous ne pouvez pas non plus définir le fèvre, utiliser des annotations:
Ajouter StudentMapper à l'annotation
@Repository @Transactional Public Interface StudentMapper {}Les besoins correspondants sont d'ajouter des analyses dans Dispatcher-Servlet.xml:
<Ean> <propriété name = "annotationclass" value = "org.springframework.sterreotype.repository" /> <propriété name = "basepackage" value = "com.liming.manager" /> <propriété name = "sqlSessionFactory" Ref = "sqlSessionFactory" /> </Eband>
1.2.4 Test StudentMapper
Utilisez des tests SpringMVC pour créer un test Controller, configurer TomCat et accéder à la page Index.do pour les tests:
@Controller Public Class TestController {@Autowired Private StudentMapper StudentMapper; @RequestMapping (value = "index.do") public void indexPage () {StudentEntity Entity = StudentMapper.getStudent ("10000013"); System.out.println ("Name:" + Entity.getStudentName ()); }}Tester avec Junit:
@Runwith (value = springjunit4classrunner.class) @ContextConfiguration (value = "test-servlet.xml") public class StudentMappestrest {@autowired private classmapper classMapper; @Autowired Private StudentMapper StudentMapper; @Transactional public void getStudentTest () {StudentEntity Entity = StudentMapper.getStudent ("10000013"); System.out.println ("" + entity.getStudentid () + entity.getStudentName ()); List <StudentEntity> StudentList = StudentMapper.getStudentall (); for (StudentEntity EntityTemp: StudentList) {System.out.println (entityTemp.getStudentName ()); }}} 2. Fichier de configuration principale de Mybatis
Lors de la définition de SQLSessionFactory, vous devez spécifier le fichier de configuration principale MyBatis:
<bean id = "sqlSessionFactory"> <propriété name = "configLocation" value = "classpath: mybatis-config.xml" /> <propriété name = "dataSource" ref = "dataSource" /> </ bean>
Les sous-étiquettes sous configuration dans la configuration de MyBatis incluent:
Configuration | - Propriétés | - Paramètres | --- TYPEALIASES | --- TypeHandlers | --- ObjectFactory | --- Plugins | --- Environnements | --- Environnement | --- | ---- | --- TransactionManager | ---- | ---- | __ DataSource | __ Mappers
2.1 Propriétés Propriétés
Les fichiers de configuration des propriétés sont liés à java.properties. Configurez la ressource des propriétés pour spécifier le chemin d'accès de .properties, puis configurez le nom et la valeur de la propriété sous la balise Propriétés. Vous pouvez remplacer la valeur de propriété correspondante dans le fichier .properties.
<! - Remplacement de la propriété -> <propriétés ressource = "mysql.properties"> <propriété name = "jdbc.DriverClassName" value = "com.mysql.jdbc.driver" /> <propriété name = "jdbc.url" value = "jdbc: mysql: // localhost: 3306 / student_manage" value = "root" /> <propriété name = "mot de passe" value = "limingnihao" /> </ properties>
2.2 Paramètres
Il s'agit d'une étape importante pour MyBatis afin de modifier les détails du processus d'opération. Le tableau suivant décrit ces paramètres, significations et valeurs par défaut.
Paramètres | décrire | Valeurs autorisées | valeur par défaut |
cacheen | Tous les caches dans ce fichier de configuration sont des paramètres globalement ON / OFF. | Vrai | FAUX | vrai |
LazylokingEnabled | Paramètres globaux Chargement paresseux. S'ils sont définis sur «False», tous les associés seront initialisés et chargés. | Vrai | FAUX | vrai |
Téléchargement agressif | Lorsqu'il est défini sur «vrai», les objets de chargement paresseux peuvent être chargés par toutes les propriétés paresseuses. Sinon, chaque propriété est chargée au besoin. | Vrai | FAUX | vrai |
MultiplereResultSetSenabled | Autoriser et ne pas autoriser une seule instruction à renvoyer plusieurs ensembles de données (selon les exigences du pilote) | Vrai | FAUX | vrai |
usecolumnlabel | Utilisez des étiquettes de colonne au lieu des noms de colonnes. Différents disques ont des approches différentes. Reportez-vous à la documentation du lecteur ou testez-le avec ces deux options différentes. | Vrai | FAUX | vrai |
useGeneratedKeys | Permet à JDBC de générer des clés primaires. La prise en charge du lecteur est requise. Si elle est définie sur true, ce paramètre forcera la clé primaire générée, certains disques sont incompatibles mais peuvent toujours être exécutés. | Vrai | FAUX | FAUX |
Automaping Behavior | Spécifie si et comment MyBatis cartose automatiquement les champs de table de données aux propriétés des objets. Partial ne mappera automatiquement que simple, sans résultats imbriqués. Full mappera automatiquement tous les résultats complexes. | AUCUN, PARTIEL, COMPLET | PARTIEL |
defaultExecutorType | Configurer et définir l'exécuteur exécuteur et l'exécuteur simple exécute d'autres instructions. L'exécuteur de réutilisation peut réutiliser les instructions d'instructions préparées et l'exécuteur de lots peut exécuter de manière répétitive des instructions et des mises à jour par lots. | SIMPLE Réutilisation LOT | SIMPLE |
DefaultstatementTimeout | Définissez un délai pour déterminer combien de temps le lecteur attendra que la base de données réponde à un délai d'expiration | Entier positif | Pas réglé (nul) |
<paramètres> <paramètre name = "cacheenabled" value = "true" /> <paraming name = "LazyLoadingEnabled" value = "true" /> <paraming name = "multiplerSultSetsEnabled" value = "true" /> <paraming name = "usecolumnLabel" value = "true" /> <paraming name = "useGereys" </daits>
2.3 Type de type Typealias Alias
L'alias de type est l'abréviation des types Java.
Il est simplement associé à la configuration XML, abrégé comme un long nom de classe Java. Par exemple:
<CypeAlias> <tycias alias = "userentity" type = "com.manager.data.model.userentity" /> <tycias alias = "étudiante" type = "com.manager.data.model.studententity" /> <tycias alias = "classentity" type = "com.manager.data.Model" </pactElias>
Avec cette configuration, "StudentEntity" peut être utilisé n'importe où au lieu de "com.manager.data.model.studententity".
Pour les types Java normaux, il existe de nombreux alias de type intégré. Ils sont à la fois insensibles à la casse et en raison de noms surchargés, vous devez faire attention à la manipulation spéciale des types natifs.
Alias | Le type de carte |
_octet | octet |
_long | long |
_court | Court |
_ | int |
_entier | int |
_double | double |
_flotter | flotter |
_boolean | booléen |
chaîne | Chaîne |
octet | Octet |
long | Long |
Court | Court |
int | Entier |
entier | Entier |
double | Double |
flotter | Flotter |
booléen | Booléen |
date | Date |
décimal | Bigdecimal |
bigdecimal | Bigdecimal |
objet | Objet |
carte | Carte |
hashmap | Hashmap |
liste | Liste |
arraylist | Arraylist |
Collection | Collection |
Itérateur | Itérateur |
2,4 Typehandlers Type Handle
Que MyBatis définisse un paramètre dans une instruction de prétraitement ou prend une valeur de l'ensemble de résultats, le processeur de type est utilisé pour convertir la valeur obtenue en type Java de la manière appropriée. Le tableau suivant décrit le processeur de type par défaut.
Processeur de type | Types java | Type jdbc |
Booleantypehandler | Booléen, booléen | Toute valeur booléenne compatible |
ByteTypeHandler | Octet, octet | Tout numéro compatible ou type d'octet |
Shreedtypehandler | Court, court | Tout formulaire numérique ou court compatible |
IntegerTypeHandler | Entier, int | Tout numérique et entier compatibles |
LongTypeHandler | Long, long | Tout modèle numérique ou long compatible |
FloatTypeHandler | Flotter, flotter | Tout type de point flottant numérique ou unique compatible |
DoubleTypeHandler | Double, double | Tout type de point flottant numérique ou double précision compatible |
Bigdecimaltypehandler | Bigdecimal | Tout type décimal numérique ou décimal compatible |
StringTypeHandler | Chaîne | Types de char et varchar |
Clobtypehandler | Chaîne | Types de Clob et Longvarchar |
Nstringtypehandler | Chaîne | Types nvarchar et nchar |
Nclobtypehandler | Chaîne | Type nclob |
BytearrayTypeHandler | octet[] | Tout type de flux d'octet compatible |
Blobtypehandler | octet[] | Types blob et longvarbinaires |
DateTypeHandler | Date (java.util) | Type d'horodatage |
DateOnlyTypeHandler | Date (java.util) | Type de date |
TimeNlyypehandler | Date (java.util) | Type de temps |
Sqltimestamptypehandler | Timestamp (java.sql) | Type d'horodatage |
SQLDateTypeHandler | Date (java.sql) | Type de date |
SqltimeTypeHandler | Time (Java.sql) | Type de temps |
ObjectTypeHandler | N'importe lequel | Type autre ou non spécifié |
EnumtypeHandler | Type d'énumération | VARCHAR - Tout type de chaîne compatible, stocké en code (non indexé). |
classe publique LimingStringTypeHandler implémente TypeHandler {@Override public void SetParameter (préparé Ps, int i, paramètre d'objet, jdbcType jdbcType) lance Sqlexception {System.out.println ("setParameter-paramètre:" + ((string) paramètre) + ", jdbctype:" + paramètre) + ", jdbctype:" + jdbcType.type_code); Ps.SetString (i, ((String) Paramètre)); } @Override public Object getResult (resultSet rs, String Columnname) lève SQException {System.out.println ("getResult - Columnname:" + Columnname); return Rs.getString (Columnname); } @Override Public Object getResult (callableStatement CS, int colnnIndex) lève sqlexception {System.out.println ("getResult - ColumnIndex:" + ColumnIndex); return cs.getString (ColumnIndex); }}Ajoutez la balise TypeHandler dans le type Handlers dans le fichier de configuration.
<TypeHandlers> <TypeHandler javatype = "String" jdbcType = "varChar" handler = "liming.student.manager.type.limingStringTypeHandler" /> </ TypeHandlers>
2.5 ObjectFactory Object Factory
Chaque fois que MyBatis crée une nouvelle instance de l'objet résultat, objectFactory est utilisé. Le FreshFactory par défaut n'est pas différent de la création d'une instance utilisant le constructeur de la classe cible. S'il y a déjà des paramètres mappés, il est également possible d'utiliser un constructeur avec des paramètres.
Si vous réécrivez l'opération par défaut de ObjectFactory, vous pouvez créer le vôtre en héritant org.apache.ibatis.reflection.factory.defaultObjectFactory.
L'interface ObjectFactory est simple. Il contient deux méthodes de création, l'une consiste à traiter le constructeur par défaut, et l'autre consiste à traiter le constructeur de paramètres. En fin de compte, la méthode SetProperties peut être utilisée pour configurer l'objetFactory. Après avoir initialisé votre instance ObjectFactory, les propriétés définies dans le corps de l'élément OBJECTFACTORY seront transmises à la méthode SetProperties.
La classe publique lingObjectFactory étend defaultObjectFactory {private static final long SerialVersionUID = -399284318168302833l; @Override public Object Create (classe de classe) {return super.create (type); } @Override public Object Create (Class Type, List <Sclass> ConstructorArgTypes, List <Bject> ConstructorArgs) {System.out.println ("Create - Type:" + Type.ToString ()); return super.create (type, constructorargtypes, constructorargs); } @Override public void SetProperties (Properties Properties) {System.out.println ("SetProperties - Properties:" + Properties.ToString () + ", Someproperty:" + Properties.GetProperty ("Someproperty")); super.setproperties (propriétés); }}Ajouter une balise ObjectFactory au fichier de configuration
<objectFactory type = "liming.student.manager.configuration.limingObjectFactory"> <propriété name = "Someproperty" value = "100" /> </ objectFactory>
2.6 Plugins Plugin
MyBatis vous permet d'intercepter les appels exécutés par des instructions mappées à un certain point. Par défaut, MyBatis permet aux plugins d'intercepter les appels de méthode:
Les détails des méthodes dans ces classes peuvent être trouvés en regardant la signature de chaque méthode, et leur code source est disponible dans le package de distribution MyBatis. Vous devez comprendre le comportement de vos méthodes primordiales, en supposant que vous faites plus que de surveiller les appels. Si vous essayez de modifier ou de remplacer une méthode donnée, vous pouvez briser le cœur de MyBatis. Il s'agit d'une classe et d'une méthode de bas niveau, et vous devez utiliser les plugins avec prudence.
L'utilisation de plugins est la puissance très simple qu'ils fournissent. Implémentation simple de l'interface intercepteur et déterminer la signature spécifiée que vous souhaitez intercepter.
2.7 Environnements
MyBatis peut être configuré avec plusieurs environnements. Cela peut vous aider à cartographier SQL pour correspondre à plusieurs bases de données, etc.
2,8 mappeurs
Voici une déclaration qui indique à Mybatis où chercher la cartographie SQL. Vous pouvez utiliser la référence de ressource dans le chemin de classe ou utiliser des caractères pour saisir la référence exacte de l'URL.
Par exemple:
<mapper ressource = "com / manager / data / maps / userMapper.xml" /> <mapper ressource = "com / manager / data / maps / studentmapper.xml" /> <mapper ressource = "com / manager / data / maps / classmapper.xml" /> </ mappers>