1. Execute diretamente a consulta SQL:
1. Trecho dos arquivos Mappers
<resultMap id = "acmodelResultMap" type = "com.izumi.instancemodel"> <resultado colun = "instanceId" Property = "InstanceId" jdbcType = "varchar" /> Result Column = "Instancename" Property = "ResultAncename" Jdbctype = "varchar =" " ResultType = "com.izumi.instancemodel"> $ {paramsql} </select>2. Trecho de Dao
interface pública Somedao {list <Stancemodel> getInstancemodel (@param ("paramsql") string sql);}3. Coisas para observar
3.1: Os parâmetros do método passado devem seguir a seguinte especificação "Selecione xxx como InstanceId, xxx como InstanceName .....", caso contrário, o Mybatis não pode transformar automaticamente o resultado da consulta em um objeto Java.
3.2: A diferença entre #{} sintaxe e $ {} sintaxe no arquivo de maperes:
Por padrão, a sintaxe #{} faz com que o mybatis gere a propriedade PreparedStatement e use o parâmetro preparado de estatamento (=?) Para definir o valor. Se você deseja substituir diretamente strings inalterados no SQL, pode usar $ {}.
Em outras palavras, quando o Mybatis vê #{}, ele pensará que você está atribuindo valores a variáveis no SQL, assim como na programação do JDBC para atribuir valores a pontos de interrogação (por exemplo, o Mybatis julgará seu tipo e adicionará automaticamente citações antes e depois). Quando o Mybatis vê $ {}, ele o substituirá diretamente pelo valor da variável sem fazer nenhum processamento.
Portanto, ao usar $ {}, você não precisa escrever atributos como "jdbctype = varchar" como #{}.
3.3: ResultType e ResultMap
De acordo com o método de escrita em 1, a parte <sultmap> pode ser excluída sem usá -lo, porque no próximo <select>, o SostMap definido não é usado, mas o resultado é usado.
Portanto, podemos ver que existem duas maneiras de escrever a definição do valor de retorno de <select>. Um é definir um resultMap e, em seguida, consulte este resultante. O outro é usar diretamente o resultado do resultado para especificar o caminho de uma classe.
2. Inserção em lote de dados
1. A experiência nos diz que o uso de inserção nos valores xxx (xx) (xxx) (xxx) é mais eficiente do que usar a inserção nos valores xxx (xx), inserir nos valores xxx (xxx), inserir nos valores xxx (xxx).
2. Uso em mybatis
2.1. Trecho do arquivo Mappers
<insert id = "insertbatch"> inserir no aluno (<incluir refid = "base_column_list" />) valores <foreach collection = "list" item = "item" index = "index" separator = ","###{{} {}},####itex}. </foreach> </nsert>2.2. Trecho de Dao
interface pública Somedao {public void InsertBatch (@param ("list") Lista <estudante> alunos); }Explicação detalhada dos dados de inserção em lote mybatis
Primeiro, olhe para o arquivo Mapper.xml em lote
<insert id = "insertBatch" parameterType = "java.util.list"> <selectKey KeyProperty = "fetchtime" order = "antes" resultType = "java.lang.string"> select Current_timestamp () </selectKey> insert em kangoyica_ depart1, 2 ,nMestamp () </selectKey> insert em kangoyica_epart1, 2, e inseReToyAduAl_Acting1, de partida). Unidade, aprovação_Certificate, Fabricante, MarketPrice, VippRice, Website, Fetch_time, ProductDesc) #{item.img}, #{item.productSpecification}, #{item.unit}, #{item.appRovalCertificate}, #{item.manufacturer}, #{item.marketPrice}, #{ite.vipprice}, #{.webesite},}, # # # # # # #{#webesite}, #{{#vipprice}, #{item.website}, #{{ite.vipprice}, #{.webesite},} {{{{ ) </foreach> </nsert>No processamento em lote, descobri que existem vários problemas que precisam de atenção.
1. Obtenha automaticamente a chave primária. Adicione o useGeneratedKeys = "true" keyProperty = "id" no Insert. As duas propriedades das duas propriedades são inválidas e podem interromper a inserção de dados. Se o ID for a auto-aumento do banco de dados, você não pode escrever nada. Remova o atributo de chave primária na instrução inserida e use -a.
<selectKey KeyProperty = "ID" Order = "Antes" ResultType = "Java.lang.integer"> Selecione LAST_INSERT_ID () </SElectKey>
NOTA: A tag <selectKey> só pode existir no Insert; Não é adequado usar <selectKey> durante o processamento em lote. É melhor aumentar a própria chave primária ou especificá -la.
2. Obter o tempo de inserção é mostrado acima. Estou usando o MySQL. Desde que seja uma função MySQL, ele pode ser usado. O tempo de inserção e a chave primária são uma das funções do MySQL. . .