1. Ejecutar directamente la consulta SQL:
1. Extracto de los archivos de Mappers
<resultmap id = "acmodelResultMap" type = "com.izumi.instancemodel"> <resultado column = "instanceID" propiedad = "instanceID" jdbctype = "varchar" /> <resultado columna = "instancename" propiedad = "Instancen" jdbtype = "varchar" /> < /resultmap> <select id = "getinsteModel resultType = "com.izumi.instancemodel"> $ {paramsql} </select>2. Extracto de Dao
Interfaz pública Somedao {list <StancEmodel> getInStancEmodel (@param ("paramsql") string sql);}3. cosas a tener en cuenta
3.1: Los parámetros del método aprobado deben seguir la siguiente especificación "Seleccione xxx como instanceid, xxx como instancename .....", de lo contrario, myBatis no puede convertir automáticamente el resultado de la consulta en un objeto Java.
3.2: La diferencia entre la sintaxis #{} y la sintaxis $ {} en el archivo Mappers:
Por defecto, la sintaxis #{} hace que MyBatis genere la propiedad preparada y use el parámetro preparado (=?) Para establecer el valor. Si desea sustituir directamente las cadenas sin cambios en SQL, puede usar $ {}.
En otras palabras, cuando MyBatis ve #{}, pensará que está asignando valores a variables en SQL, al igual que en la programación JDBC para asignar valores a los signos de interrogación (por ejemplo, MyBatis juzgará su tipo y agregará automáticamente cotizaciones únicas antes y después). Cuando MyBatis ve $ {}, lo reemplazará directamente con el valor de la variable sin hacer ningún procesamiento.
Entonces, cuando se usa $ {}, no necesita escribir atributos como "jdbctype = varchar" como #{}.
3.3: ResultType y ResultMap
De acuerdo con el método de escritura en 1, la parte <resultadomap> se puede eliminar sin usarlo, porque en la siguiente <elect>, no se usa el Map de resultados definido, pero se usa resultType.
Por lo tanto, podemos ver que hay dos formas de escribir la definición del valor de retorno de <select>. Una es definir un resultado de resultados y luego referirse a este resultado de resultados. El otro es usar directamente el TEUTTTYPE para especificar la ruta de una clase.
2. Inserción de datos por lotes
1. La experiencia nos dice que usar insertar en valores xxx (xx) (xxx) (xxx) es más eficiente que usar insertar en valores xxx (xx), inserte en valores xxx (xxx), inserte en valores xxx (xxx).
2. Uso en mybatis
2.1. Extracto del archivo de mapeadores
<insert id = "insertbatch"> insertar en el estudiante (<include refid = "base_column_list" />) valores <foreach Collection = "list" item = "item" index = "index" separator = ","> (null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#},#} </foreach> </sert>2.2. Extracto de Dao
interfaz pública somedao {public void insertBatch (@param ("List") List <deuding> Students); }Explicación detallada de los datos de inserción por lotes de MyBatis
Primero busque el archivo por lotes mapper.xml
<Insert id = "insertBatch" parametertype = "java.util.list"> <selectKey keyProperty = "fetchtime" order = "antes" dentType = "java.lang.string"> seleccionar Current_Timestamp () </selectKey> Insertar en KangaidUoyaodian (deficiente1, Dead2, Product_name, Generic, IMG, IMG, Product, Production, Production, Production, Production, Production, Production, Unidad, aprobación_certificate, fabricante, MarketPrice, Vipprice, sitio web, fetch_time, productDesc) valores <foreach Collection = "List" item = "item" index = "index" separator = ","> ( #{item.depart1}, #{item.depart2}, #{item.ProductName}, #{item.genericname}, Genericname}, #{item.img}, #{item.productspecification}, #{item.unit}, #{item.appRovalCertificate}, #{item.ManUfacturer}, #{item.marketPrice}, #{item.vipPRiceRice}, #{item.wbsite}, #{fetchtime}, #o item.vipPricte}, #{item.wbsite}, #{fetchtime}, #o item.vipPricte}, #{item.wbsite}, #{fetchtime}, #o item. ) </foreach> </sert>En el procesamiento por lotes, descubrí que hay varios problemas que necesitan atención.
1. Obtenga automáticamente la clave primaria. Agregue el UseGeneratedKeys = "true" keyproperty = "id" en insertar. Las dos propiedades de las dos propiedades no son válidas y pueden interrumpir la inserción de datos. Si la ID es la base de datos de la base de datos, no puede escribir nada. Elimine el atributo de clave principal en la instrucción insertada y úselo.
<SelectKey keyProperty = "id" orden = "antes" resultype = "java.lang.integer"> Seleccione last_insert_id () </selectKey>
Nota: la etiqueta <selectKey> solo puede existir en insertar; No es adecuado para usar <SelectKey> durante el procesamiento por lotes. Es mejor aumentar la clave primaria en sí, o especificarla.
2. Obtener el tiempo de inserción se muestra arriba. Estoy usando mysql. Mientras sea una función MySQL, se puede usar. El tiempo de inserción y la clave principal son una de las funciones MySQL. . .