Programação na operação de interface
De um modo geral, quando criamos classes que mapeiam interfaces SQL, geralmente se parece com a seguinte:
public static void testBasicQuery (int id) {SqlSession Session = mybatisutils.getSqlSession (); tente { / * * o David.mybatis.demo.ivisitorOperation.basicQuery aqui deve corresponder ao espaço para nome na configuração na figura abaixo * / visitante visitante = (visitante) session.selectOne ("David.mybatis.demo.ivisitoroperation.basicquery", id); Mybatisutils.closesession (sessão); System.out.println (visitante); } Catch (Exceção e) {// TODO: HODE EXCEÇÃO}}Aqui o espaço para o nome corresponde ao parâmetro da string que você passou-> <mapaper namespace = "David.mybatis.demo.ivisitorOperation"> <!-aqui resultype corresponde ao alias que você acabou de especificar no nó typeAlias-> <select = "básico" "parametertype =" int " Status> 0 Ordem por id </leclect> </palpper>
Dessa forma, se os nomes de ambos os lados não forem correspondentes acidentalmente durante o processo real de desenvolvimento, ocorrerá uma exceção. Para evitar essa situação, podemos usar o método da interface para executar operações correspondentes. Vamos modificar este artigo abaixo.
Primeiro, criamos uma nova classe IVISITOPERAÇÃO sob o nome do pacote David.mybatis.demo, indicando que as interfaces de todos os métodos de banco de dados serão operados no futuro, como mostrado abaixo:
pacote David.mybatis.demo; importar java.util.list; importar David.mybatis.model.pageNateargs; importar David.mybatis.model.visitor; interface pública IVISITOPERATION { /* Basic Query* / Public Visitor Basicery (int);} Sessão de sqlSession = mybatisutils.getSqlSession (); tente {ivisitorOperation voperation = session.getmapper (ivisitorOperation.class); Visitante visitante = Voperation.BasicQuery (ID); Mybatisutils.closesession (sessão); System.out.println (visitante); } Catch (Exceção e) {// TODO: HODE EXCEÇÃO}}Isso é feito, por isso não precisamos nos preocupar com a incompatibilidade que pode resultar de nomes de métodos de escrita manual.
Operação CRUD
A seguir, explicará a criação de operações CRUD e GETLIST com base em operações de tabela única. Para criar alguns dados de teste, vamos primeiro obter um método Add.
Continue a adicionar, excluir, excluir, atualizar, consultar os métodos de interface GetList na última classe IVISITOPERAPRION interface, como mostrado abaixo:
/** Consulta básica*/ Visitante público BasicQuery (int id); /** Adicionar visitante*/ public int add (visitante visitante); /** Excluir visitante*/ public int excluir (int id); /** Atualizar visitante*/ public int update (visitante visitante); /** Consulta visitante*/ consulta de visitante público (int id); / * * Lista de visitantes de consulta */ Lista pública <visitante> getList ();
Para as operações CRUD correspondentes, os nós de inserção, atualização, exclusão e seleção estão respectivamente no nó <papper> do visitorMapper.xml. Para detalhes detalhados da configuração, consulte o site oficial http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
A configuração neste exemplo é a seguinte: Use #{parameter_name} para passar os parâmetros e, é claro, você também pode usar $ {parameter_name} diretamente.
Da maneira anterior, o Mybatis o converterá em forma parametrizada, por exemplo, inserir no tabela (nome) valores (#{name}) => inserir na tabela (nome) valores (?) (No caso do MySQL)
Dessa última maneira, o Mybatis passará pelos parâmetros sem fazer nenhuma operação, como inserir valores da tabela (nome) ($ {name}) => inserir no tabela (nome) valores ([o valor que você passou]), passe aa, aqui está aa, passa 'aa', aqui está 'aa'.
<? xml versão = "1.0" coding = "utf-8"?> <! namespace="david.mybatis.demo.IVisitorOperation"> <!-- useGeneratedKeys="true" means whether to use a self-growth sequence, keyProperty="Id" specifies which column is the self-growth column, parameterType="Visitor" specifies the corresponding type passed in the definition in the IVisitorOperation interface class resultType Indicates the type returned, such as the Visitante ResultMap em consulta. O tipo de retorno personalizado é a melhor opção para devolver tipos complexos e também é a arma mais poderosa em mybatis-> <insert id = "add" parametertype = "visitante" usegeneratedkeys = "true" keyProperty = "id"> inserir em e-mail (email, email, status). </insert> <delete id = "delete" parametertype = "int"> exclua do visitante onde status> 0 e id =#{id} </lete> <update id = "update" parameterType = "visitante"> atualize o nome do conjunto de visitantes =#{name} =#{{email}, status "status = {{{}; </update> <select id = "visitante"> selecione ID, nome, email, status, createTime do visitante onde id =#{id} e status> 0 Ordem por id </select> <select Id "BasicQuery" Parameter = "Int" ResultType = "Disitor"> "> < /select> <select id = "getList" resultmap = "visitorrs"> <incluir refid = "getListsql" /> < /select> <resultMap type = "visitante" id = "visitORRS"> <id column = "id" property = "id" /> <Result Column = "Nome" = "Nome" /> <resultado " /> <resultado column = "createTime" Property = "createTime"/> </resultMap> <sql id = "getListsql"> selecione * do visitante onde status> 0 </sql> </mapper>Uma coisa a observar aqui é que o ID no nó de operação deve corresponder ao nome da interface na definição da interface, e o tipo de parâmetro também deve corresponder a ele. Por exemplo, a interface é add (visitante visitante). Então, ao configurar o nó de inserção, id = "add" e parametertype = "visitante"
Caso contrário, uma exceção correspondente será relatada. Por exemplo, se o nó de identificação não corresponder ao nome da interface, a seguinte exceção aparecerá:
Você pode observar que, ao obter a lista no arquivo de configuração do VisitormPorMApper.xml, você usa o ResultMap. When using resultMap, you can specify which fields your own SQL statement maps, because sometimes you don’t need so many columns, so you don’t need to configure so many maps when configuring mapping, or your column has been aliased, so you cannot directly use resultType="Visitor" to map, because the default mapping method of Mybatis matches whether the attribute name of the Javabean is consistent with the fields of the mesa. Você também pode controlar se deve mapear configurando o valor do atributo <fields> no nó <Configuration> para controlar se deve mapear com a nomeação de camelos em Javabean, como segue.
<Configurações> <Configuração name = "mapundersCoretocamelCase" value = "false" /> </fastings>
Para outras configurações que modificam o mapeador, você pode visualizá-las em http://mybatis.github.io/mybatis-3/configuration.html#settings.
Para a classe de mapeador do visitante, é a seguinte:
<Mapper namespace = "David.mybatis.demo.ivisitorOperation"> <sql id = "getListsql"> selecione ID como visitor_id, nome, email, status, createTime do visitante onde seleto> 0 </sql> <select ID = "getList" resultMap = "VisitORRS"> <RefId " para aqui está a propriedade da propriedade. Os campos nele devem ser os mesmos que as propriedades que você define na entidade. Isso é sensível ao caso, caso contrário, o setter padrão não encontrará a propriedade correspondente ao atribuir valores à propriedade. Você pode experimentar a propriedade da coluna correspondente ao nome do conjunto de resultados retornado pela instrução de consulta. Se um alias é dado ao campo correspondente, por exemplo, o ID se torna visitor_id, o nome da coluna correspondente também deve corresponder a -> <resultMap type = "visitante" id = "visitordrs"> <id column = "visitor_id" propriedade "ida" /> <resultado column = "name" = "name" /> <colmon = "email =" email " /" <> Column = "CreateTime" Property = "CreateTime"/> </ResultMap> </Mapper>
Aqui você também notará que existe um nó <sql> nó. Isso é usado para extrair declarações ou campos públicos de SQL para reutilização em outros lugares. Para outras instruções detalhadas, consulte http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
O resto é a mesma operação que agora. Você pode criar uma classe Demorun no programa de demonstração para armazenar vários métodos de teste, como segue:
pacote David.mybatis.demo; importar java.util.arrays; importar java.util.list; importar org.apache.ibatis.session.sqlsession; importação David.mybatis.model.basiceryargs; import.mybatis.model.crud_enum; David.mybatis.model.pagenateargs; importar David.mybatis.model.visitor; importar David.mybatis.model.website; public classmorun {public static void testBasicQuery (int) {SqlSession Session = mybatisutils.getsql (Id) {SqlSession = MyBatisutils.getsqlsql; tente { / * * o David.mybatis.demo.ivisitorOperation.basicQuery aqui deve corresponder ao espaço para nome na configuração na figura abaixo * / visitante visitante = (visitante) session.selectOne ("David.mybatis.demo.ivisitoroperation.basicquery", id); Mybatisutils.closesession (sessão); System.out.println (visitante); } catch (Exceção e) {// TODO: lidar com a exceção e.printStackTrace (); }} public static void testBasicQueryByInterfaceway (int id) {SqlSession Session = mybatisutils.getSqlSession (); tente {ivisitorOperation voperation = session.getmapper (ivisitorOperation.class); Visitante visitante = Voperation.BasicQuery (ID); Mybatisutils.closesession (sessão); System.out.println (visitante); } catch (Exceção e) {// TODO: lidar com a exceção e.printStackTrace (); }} /** Adicionar registro do visitante em lotes* / public static void addvisitors () {SqlSession Session = mybatisutils.getSqlSession (); Lista <Tisitor> Visitores = Arrays.asList (novo visitante [] {new Visitor ("MongoDB", "[email protected]"), novo visitante ("Redis", "[email protected]"), novo visitante ("Memcached", "[email protected]"), visitante ("Couch" Couch, "[email protected]"). Visitante ("hbase", "[email protected]"), novo visitante ("bigtable", "[email protected]"), novo visitante ("hive", "[email protected]"), novo visitante ("mapReduce", "[email protected]"),}); para (visitante visitante: visitantes) {addVisitor (visitante, sessão); } Mybatisutils.closSession (sessão); Mybatisutils.showmessages (crud_enum.list, visitores.size ()); } /** Adicionar informações do visitante* / @suppresswarnings ("não utilizadas") private estático void addVisitor (visitante visitante, sessão sqlSession) {if (session == null) session = mybatisutils.getSqlSession (); VoPeation IVISITOPERATION = SESSÃO.GETMAPPER (IVISITOPERATION.CLASS); int recordCount = Voperation.add (visitante); session.Commit (); if (session == NULL) mybatisutils.closesession (sessão); Mybatisutils.showmessages (Crud_enum.add, RecordCount); } /** Sobrecarga Adicionar visitante* / public static void addVisitor (visitante visitante) {addVisitor (visitante, nulo); } /** Exclua informações do visitante* / public static void DeleteVisitor (int id) {SqlSession Session = mybatisutils.getSqlSession (); VoPeation IVISITOPERATION = SESSÃO.GETMAPPER (IVISITOPERATION.CLASS); int recordCount = Voperation.Delete (ID); session.Commit (); Mybatisutils.closesession (sessão); Mybatisutils.showmessages (crud_enum.delete, registroCount); } /** Atualize informações do visitante* / public static void updateVisitor (int id) {SqlSession Session = mybatisutils.getSqlSession (); VoPeation IVISITOPERATION = SESSÃO.GETMAPPER (IVISITOPERATION.CLASS); Visitante visitante = Voperation.Query (ID); System.out.println ("Objeto original:" + visitante); Nome da sequência = visitante.getName (); if (name.contains ("atualizado"))) {visitor.setName (name.substring (0, name.indexof ("atualizado")); } else {visitor.setName (nome + "atualizado"); } int recordCount = Voperation.Update (visitante); session.Commit (); Mybatisutils.closesession (sessão); Mybatisutils.showmessages (crud_enum.update, registroCount); System.out.println ("objeto de atualização:" + visitante); } /** Informações do visitante da consulta* / public static void QueryVisitor (int id) {SqlSession Session = mybatisutils.getSqlSession (); VoPeation IVISITOPERATION = SESSÃO.GETMAPPER (IVISITOPERATION.CLASS); Visitante visitante = Voperation.Query (ID); Mybatisutils.closesession (sessão); Mybatisutils.showmessages (Crud_enum.Query, 1); System.out.println (visitante); } /** Consulta a lista de visitantes* / public static void QueryVisitorList () {SqlSession Session = mybatisutils.getSqlSession (); VoPeation IVISITOPERATION = SESSÃO.GETMAPPER (IVISITOPERATION.CLASS); Lista <Tisitor> Visitores = Voperation.getList (); para (visitante visitante: visitantes) {System.out.println (visitante); } Mybatisutils.closSession (sessão); Mybatisutils.showmessages (crud_enum.list, visitores.size ()); }} A classe Demorun executa uma tabela simples simples e a demonstração é concluída.