Cuando se usa MyBatis como capa de persistencia, la instrucción Insertar predeterminada no devuelve el valor clave principal del registro, pero devuelve el número de registros insertados. Si la capa comercial necesita obtener la clave principal del registro, esta función se puede completar a través de la configuración.
Para la clave primaria de secuencia, antes de ejecutar Insertar SQL, se debe especificar un valor de clave principal para que se insertara el registro, como Oracle y DB2. Se puede utilizar el siguiente método de configuración:
<insertar id = "agregar" parametertype = "vo.category"> <selectKey dentyPe = "java.lang.short" order = "antes" keyProperty = "id"> seleccione SEQ_TEST.NEXTVAL de dual </selectKey> Insertar en la categoría (name_zh, parent_id, show_order, delete_status, descripción) (#{nameZh, jdbctype = varchar},#{parentId, jdbctype = smallInt},#{showOrder, jdbctype = smallint},#{deletESTATUS, jdbctype = bit},#{descripción, jdbctype = varHarchar}) </sert>Para las tablas con claves primarias de autoincremento, no se necesita una clave primaria al insertar, pero una clave primaria de autoincremento se obtiene automáticamente durante el proceso de inserción. Por ejemplo, MySQL, se pueden adoptar los siguientes dos métodos de configuración:
<insert id = "agregar" parametertype = "vo.category" useGeneratedKeys = "true" keyproperty = "id"> insertar en la categoría (name_zh, parent_id, show_order, delete_status, descripción) valores (#{NameZh, jdbctype = varchar},#{parentId, jdbctype = smallInt},#{showOrder, jdbctype = smallint},#{deletESTATUS, jdbctype = bit},#{descripción, jdbctype = varHarchar}) </sert>o
<insertar id = "agregar" parametertype = "vo.category"> <selectKey denterType = "java.lang.short" order = "después" keyproperty = "id"> seleccione last_insert_id () como id </selectKey> Insertar en la categoría (name_zh, parent_id, show_order, delete_status) Valores) Valores) (#{nameZh, jdbctype = varchar},#{parentId, jdbctype = smallInt},#{showOrder, jdbctype = smallint},#{deletESTATUS, jdbctype = bit},#{descripción, jdbctype = varHarchar}) </sert>Después de completar la operación de inserción, se ha asignado el atributo de identificación de la categoría de parámetros
Si la clave principal de la tabla de la base de datos no es un tipo de autoincremento, entonces la capa de aplicación necesita generar la clave principal ... no diré mucho sobre esto. Amigos que lo necesitan pueden dejar un mensaje para comunicarse.
El siguiente es el método de escritura para Oracle. Oracle no tiene autoincrement, pero Currval implementado con desencadenantes se define en el disparador.
<insertar id = "insert" parameterClass = "profeekIndObject"> <! [Cdata [insertar en t_pro_feekind (kindId, kindName, kindType, enable) valores (seq_t_pro_feekind_id.nextval,#kindname#,#kindtype#,#enable##)]>> <selectClass = "Java.lang.lang.lang.langer.langer.langeGer.langeGer" keyProperty = "KindId"> Seleccione SEQ_T_PRO_FEEKIND_ID.CURRVAL como KindId de dual </selectkey> </sert> <!-El siguiente es el método de escritura para mysql-> <!-<selectKey dulteClass = "int" keyproperty = "id"> select @@ Identity como id </selectKEY>->>>>->
Otros códigos de referencia:
Al persistir un objeto de entidad (como guardar un objeto), si no usamos select Key, no obtendremos inmediatamente el atributo de identificación del objeto de entidad, es decir, la clave primaria de la tabla de datos.
Código Java
Permiso permiso = nuevo permiso (); permiso.set ... permisondao.createPermission (permiso); Afirmarnull (permiso); Permiso permiso = nuevo permiso (); permiso.set ... permisondao.createPermission (permiso); Afirmarnull (permiso);
El elemento de llave de selección está relacionado con su posición en el elemento principal
<insert id="addPermission" parameterClass="Permission"> <selectKey resultClass="int" keyProperty="permissionId"> SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL </selectKey> INSERT INTO P_PERMISSION ( PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL ) VALUES ( #permissionId#, #permissionInfo#, #permissionName#, #PermissionenName #, #url #) </sert> <insert id = "addPermission" parameterClass = "permiso"> <selectKey resultClass = "int" keyproperty = "permiso"> seleccionar SEQ_P_PERMISSION (#PermissionID#,#permisoinfo#,#permiso name#,#permisoName#,#url#) </insert>
Mysql y sqlserver están detrás
Código XML
<insertar id = "addPermission" parameterClass = "permiso"> insertar en p_permission (permississionId, permissionSInfo, permissionName, permissionenname, url) valores ( #permississionId #, #permississInfo #, #permississionName #, #permisseNenname #, #url #) <SelectKey resultcClass = "INT" KEYPROPERTRY = "PermissionIdididid" </selectKey> </sert> <insert id = "addPermission" parameterClass = "permiso"> insertar en p_permission (permississionId, permisoinfo, permissionName, permissionenName, url) valores (#permisoid#,#permissionSInfo#,#permissionname#,#permissionename#, #Url#) <selectKey ResultyClass = "Inter" Inter "Inter" Inter "Inter" intencion ". Last_insert_id () </selectKey> </sert>
Escrito como lo anterior, está demasiado relacionado con la ubicación de la clave de selección. El elemento KeyKey del archivo de configuración SQLMAP de Ibatis tiene un atributo de tipo, que puede especificar si pre o post representa la generación antes o después de la generación.
Para Oracle, es
Código XML
<insert id="addPermission" parameterClass="Permission"> <selectKey resultClass="int" keyProperty="permissionId" type="pre"> SELECT SEQ_P_PERMISSION.NEXTVAL FROM DUAL </selectKey> INSERT INTO P_PERMISSION ( PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL ) VALUES ( #permissionId#, #permissionInfo#, #PermissionName #, #PermissionenName #, #url #) </sert> <insert id = "addPermission" parameterClass = "permiso"> <selectKey resultclass = "int" keyproperty = "permississionID" type = "pre"> seleccionar SEQ_P_Permisión.NextVal de Dual </secteker> Insertar en P_Permission (PermissionId, PermissionsInfo, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permiso, permission. PermissionenName, URL) Valores (#PermissionID#,#permisoinfo#,#permiso name#,#permisoName#,#url#) </sert>
Mysql, sqlserver, etc. se expresan como:
Código XML
<insert id="addPermission" parameterClass="Permission"> <selectKey resultClass="int" keyProperty="permissionId" type="post"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO P_PERMISSION ( PERMISSIONID, PERMISSIONINFO, PERMISSIONNAME, PERMISSIONENNAME, URL ) VALUES ( #permissionId#, #permissionInfo#, #permissionName#, #PermissionenName #, #url #) </insert>
Lo anterior es el método para devolver la clave principal en MyBatis en MyBatis presentada por el editor. Espero que te sea útil. Si tiene alguna pregunta, déjame un mensaje y el editor le responderá a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!