1. Exécuter directement la requête SQL:
1. Extrait des fichiers de mappeurs
<resultMap id = "acmodelResultMap" type = "com.izumi.instanceModel"> <result Column = "instanceId" propriété = "instanceId" jdbcType = "varChar" /> <result Column = "instanceName" Property = "instanceName" jdbcType = "Varchar" /> </sultMap resultType = "com.izumi.instanceModel"> $ {paramsql} </lect>2. Extrait de Dao
interface publique Somedao {list <stanceModel> getInstanceModel (@param ("paramsql") String SQL);}3. Choses à noter
3.1: Les paramètres de la méthode passée doivent suivre la spécification suivante "SELECT XXX As instanceId, xxx comme instanceName .....", sinon MyBatis ne peut pas transformer automatiquement le résultat de la requête en un objet Java.
3.2: La différence entre la syntaxe # {} et $ {} Syntaxe dans le fichier de mappeurs:
Par défaut, la syntaxe # {} fait que MyBatis génère la propriété PréparedStatement et utilise le paramètre PreadStatement (=?) Pour définir la valeur. Si vous souhaitez remplacer directement les chaînes inchangées dans SQL, vous pouvez utiliser $ {}.
En d'autres termes, lorsque MyBatis verra # {}, il pensera que vous attribuez des valeurs aux variables dans SQL, tout comme dans la programmation JDBC pour attribuer des valeurs à des points d'interdiction (par exemple, MyBatis jugera son type et ajoutera automatiquement des citations uniques avant et après). Lorsque MyBatis voit $ {}, il le remplacera directement par la valeur de la variable sans faire de traitement.
Ainsi, lorsque vous utilisez $ {}, vous n'avez pas besoin d'écrire des attributs tels que "jdbcType = varchar" comme # {}.
3.3: ResultType et ResultMap
Selon la méthode d'écriture dans 1, la pièce <SultMap> peut être supprimée sans l'utiliser, car dans le prochain <lect>, le résultat défini n'est pas utilisé, mais ResultType est utilisé.
Nous pouvons donc voir qu'il existe deux façons d'écrire la définition de la valeur de retour de <lect>. L'une consiste à définir un résultat MAP, puis à se référer à ce résultat. L'autre consiste à utiliser directement ResultimeType pour spécifier le chemin d'accès d'une classe.
2. Insertion par lots de données
1. L'expérience nous indique que l'utilisation de l'insert dans les valeurs xxx (xx) (xxx) (xxx) est plus efficace que d'utiliser l'insert dans les valeurs xxx (xx), l'insertion dans les valeurs xxx (xxx), l'insertion dans les valeurs xxx (xxx).
2. Utilisation dans Mybatis
2.1. Extrait du fichier de mappeurs
<insert id = "insertbatch"> insérer dans les valeurs de l'étudiant (<include refid = "base_column_list" />) <foreach collection = "list" item = "item" index = "index" séparateur = ","> (null, # {item.name}, # # {item.sex}, # # #}) </foreach> </sert>2.2. Extrait de Dao
interface publique Somedao {public void insertbatch (@param ("list") List <Student> étudiants); }Explication détaillée des données d'insertion par lots mybatis
Regardez d'abord le fichier lot mapper.xml
<insert id = "insertbatch" ParameterType = "java.util.list"> <SelectKey KeyProperty = "fetchtime" order = "avant" resultType = "java.lang.string"> SELECT Current_timestamp () </ SelectKey> Insert dans Kangaioyaodian (département, dépasse2, product_name, générique_ unité, approbation_certificate, fabricant, MarketPrice, vipprice, site Web, fetch_time, productDesc) valeurs <foreach collection = "list" item = "item" index = "index" séparateur = ","> (# {item.depart1}, # {item.depart2}, # {item.productName}, # {item.GenicName}, # {item.img}, # {item.productSpecification}, # {item.unit}, # {item.approvalCertificate}, # {item.manufufacturer}, # {item.marketprice}, # {fetchttime}, # # #product}, # {fetchtime}, # # #productduct}, # {fetchtime}, # # #productduct}, # {fetchtime}, # # #productduct}, # {fetchtime}, # # # #prodDes}, # {# # ) </foreach> </sert>Dans le traitement par lots, j'ai constaté qu'il y avait plusieurs problèmes qui nécessitent une attention.
1. Obtenez automatiquement la clé primaire. Ajoutez le useGeneratedKeys = ”true” keyproperty = ”id” dans l'insert. Les deux propriétés des deux propriétés ne sont pas valides et peuvent interrompre l'insertion de données. Si l'ID est l'auto-augmentation de la base de données, vous ne pouvez rien écrire. Supprimez l'attribut de clé primaire dans l'instruction insérée et utilisez-la.
<SelectKey KeyProperty = "ID" ORDAND = "AVANT" ResultType = "java.lang.integer"> SELECT LAST_INSERT_ID () </ECLETKEY>
Remarque: la balise <lectReyKey> ne peut exister que dans l'insert; Il n'est pas adapté d'utiliser <lectReyKey> lors du traitement par lots. Il est préférable d'augmenter la clé primaire elle-même ou de le spécifier.
2. Obtenir le temps d'insertion est indiqué ci-dessus. J'utilise MySQL. Tant qu'il s'agit d'une fonction MySQL, elle peut être utilisée. Le temps d'insertion et la clé primaire sont l'une des fonctions MySQL. . .