Lorsque vous utilisez MyBatis comme couche de persistance, l'instruction INSERT ne renvoie pas la valeur de la clé primaire de l'enregistrement, mais renvoie le nombre d'enregistrements insérés. Si la couche commerciale doit obtenir la clé principale de l'enregistrement, cette fonction peut être remplie par configuration.
Pour la clé primaire de séquence, avant d'exécuter l'insert SQL, une valeur de clé primaire doit être spécifiée pour que l'enregistrement soit inséré, tel que Oracle et DB2. La méthode de configuration suivante peut être utilisée:
<insert id = "add" ParameterType = "vo.category"> <selectKey resultType = "java.lang.short" order = "avant" keyproperty = "id"> SEQU (# {namezh, jdbcType = varchar}, # {parentid, jdbcType = smallInt}, # {showOrder, jdbcType = smallInt}, # {deletestatus, jdbcType = bit}, # {description, jdbcType = varchar}) </sersert>Pour les tables avec des clés primaires auto-incrément, aucune clé primaire n'est nécessaire lors de l'insertion, mais une clé primaire auto-incrément est automatiquement obtenue pendant le processus d'insertion. Par exemple, MySQL, les deux méthodes de configuration suivantes peuvent être adoptées:
<insert id = "add" ParameterType = "vo.category" useGeneratedKeys = "true" keyproperty = "id"> insérer dans la catégorie (name_zh, parent_id, show_order, delete_status, description) valeurs (# {Namezh, jdbcType = varchar}, # {parentid, jdbcType = smallInt}, # {showOrder, jdbcType = smallInt}, # {deletestatus, jdbcType = bit}, # {description, jdbcType = varchar}) </sersert>ou
<insert id = "add" ParameterType = "vo.category"> <selectKey resultType = "java.lang.short" order = "after" keyproperty = "id"> SELECT_INSERT_ID () As id </ selectkey> insert in category (name_zh, parent_id, show_ordre, delete_status, description) (# {namezh, jdbcType = varchar}, # {parentid, jdbcType = smallInt}, # {showOrder, jdbcType = smallInt}, # {deletestatus, jdbcType = bit}, # {description, jdbcType = varchar}) </sersert>Une fois l'opération d'insertion terminée, l'attribut ID de la catégorie des paramètres a été attribué
Si la clé principale de la table de la base de données n'est pas un type d'auto-incitation, la couche d'application doit générer la clé principale ..... Je ne dirai pas grand-chose à ce sujet. Les amis qui en ont besoin peuvent laisser un message pour communiquer.
Ce qui suit est la méthode d'écriture pour Oracle. Oracle n'a pas d'auto-inointe, mais CurrVal implémenté avec les déclencheurs est défini dans le déclencheur.
<insert id = "insert" ParameterClass = "ProFeekIndObject"> <! [CDATA [INSERT INTO T_PRO_FEEKIND (KINDID, KINDNAME, KINDTYPE, # KINDNAME #, SEQ_T_PRO_FEEKIND_ID.NEXTVAL, # KINDNAME #, # kava. KeyProperty = "KINDID"> SELECT SEQ_T_PRO_FEEKIND_ID.CURVAL AS KINDID FROM DUAL </ SELECTKEY> </ INSERT> <! - Ce qui suit est la méthode d'écriture pour MySQL -> <! - <SelectKey ResultClass = "int" keyproperty = "id"> Sélectionner @@ identité comme id </ selectKe> ->>
Autres codes de référence:
Lorsque vous persistez un objet entité (comme la sauvegarde d'un objet), si nous n'utilisons pas SelectKey, nous n'obtiendrons pas immédiatement l'attribut ID de l'objet entité, c'est-à-dire la clé primaire du tableau de données.
Code java
Autorisation d'autorisation = nouvelle autorisation (); permission.set ... permisondao.createPermission (autorisation); AssertNull (autorisation); Autorisation d'autorisation = nouvelle autorisation (); permission.set ... permisondao.createPermission (autorisation); AssertNull (autorisation);
L'élément SelectKey est lié à sa position dans l'élément parent
<insert id = "addPermission" ParameterClass = "Permission"> <SelectKey resultClass = "int" keyproperty = "permissionID"> SELECT SEQ_P_PERMISSIONS.NEXTVAL À DUAL </ SELECTKEY> INSERT INTO P_PERMISSION (PermissionId, PermissionInfo, PermissionName, PermiteNenname, URL) # permissionname #, # permissionnName #, # URL #) </serser> <insert id = "addPermission" ParameterClass = "Permission"> <SelectKey resultClass = "int" keyproperty = "permissionId"> SELECT SEQ_P_PERMIST URL) VALEURS (# permissionId #, # permissionInfo #, # permissionname #, # permissionnName #, # url #) </sert>
MySQL et SQLServer sont en retard
Code XML
<insert id = "addPermission" ParameterClass = "Permission"> Insérer dans les valeurs p_permission (permissionId, permissionInfo, permissionname, permissionnName, URL) (# permissionID #, # permissionInfo #, # permissionname #, # permissionnname #, # url #) <SelectKey ResultClass = "int" keyproperty = "PermissionID" Last_insert_id () </lectKey> </serser> <insert id = "addPermission" ParameterClass = "Permission"> Insérer dans P_Permission (permissionId, permissionInfo, permissionName, permissionNname, url) (# permissionID #, # permissionInfo #, # PermissionName #, # permissionnname #, #url #) keyproperty = "permissionId"> sélectionnez last_insert_id () </lectkey> </sert>
Écrit comme ce qui précède, il est trop étroitement lié à l'emplacement de SelectKey. L'élément SelectKey du fichier de configuration SQLMAP d'Ibatis a un attribut de type, qui peut spécifier si le pré ou le post représente la génération avant ou après la génération.
Pour Oracle, c'est
Code XML
<insert id = "addPermission" ParameterClass = "Permission"> <SelectKey resultClass = "int" keyproperty = "permissionId" type = "pre"> SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL </ SELECTKEY> INSERTAM # permissionname #, # permissionnName #, # URL #) </serser> <insert id = "addPermission" ParameterClass = "Permission"> <selectKey resultClass = "int" keyproperty = "permissionId" type = "pre"> SELECT SEQ_P_PERMISSION.NEXTVAL à partir de Dual </lectkey> INSERT IN PermissionnName, URL) valeurs (# permissionId #, # permissionInfo #, # permissionname #, # permissionnName #, # URL #) </SERTER>
MySQL, SQLServer, etc. sont exprimés comme:
Code XML
<insert id = "addPermission" ParameterClass = "Permission"> <SelectKey resultClass = "int" KeyProperty = "PermissionId" type = "Post"> SELECT LAST_INSERT_ID () </ SelectKey> INSERT IN P_PERMISSION (PermissionId, PermissionInfo, PermissionName, PermissionNname, URL) # permissionnName #, # URL #) </sert>
Ce qui précède est la méthode de retour de la clé principale de Mybatis dans Mybatis qui vous a été 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!