Em seguida, o artigo anterior "Javaweb Practical Mall Project Development (ii)" implementa principalmente o general baseado em general.java e usa o ResultMap para mapear objetos relacionados.
1. General BasedAo.Java
Como todos precisam usá -lo, os genéricos são usados. O problema a ser observado é que códigos como user.getClass (). GetName () precisam ser modificados. O método de modificação é passá -lo com a classe de parâmetros TC e, em seguida, usar tc.getName ().
Código completo:
pacote com.dao; importar com.model.pager; importar com.util.sessionUtil; importar com.util.systemcontext; importar org.apache.ibatis.session.sqlsession; importar java.util.hashmap; import java.util.list; */public class Baseao <t> {/** * Retire um tipo T com base no ID * @param ID para remover o ID do tipo t * @return */public t load (classe <T> tc, int id) {SQLSession Session = sessionUtil.getSession (); T t = nulo; tente {t = session.SelectOne (tc.getName ()+". Load", id); } finalmente {sessionutil.closesession (sessão); } retornar t; } / *** Adicione um tipo t* @param t tipo a ser adicionado* @return true bem -sucedido* / public boolean add (t t) {int isadd = 0; SQLSession Session = sessionutil.getSession (); tente {isadd = session.insert (t.getclass (). getName ()+". add", t); session.Commit (); // commit} catch (Exceção e) {session.rollback (); // rolle de volta se o envio falhar} finalmente {sessionutil.clossession (sessão); } retornar isadd> 0; } / *** Excluir Tipo t com base no ID* @param ID para excluir o ID de T* @return True bem -sucedido* / public boolean Delete (classe <t> t, int id) {int isDelete = 0; SQLSession Session = sessionutil.getSession (); tente {isDelete = session.Delete (t.getName ()+". delete", id); session.Commit (); } catch (Exceção e) {session.rollback (); // FAILIZAÇÃO RETURN SYSTEM.OUT.println ("Delete falhou"); E.PrintStackTrace (); } finalmente {sessionutil.closesession (sessão); } retornar ISDELETE> 0; } / *** ATUALIZAÇÃO T TIPO* @param t User a ser atualizado* @return true bem -sucedido* / public boolean update (t t) {int isupdate = 0; SQLSession Session = sessionutil.getSession (); tente {isupdate = session.delete (t.getclass (). getName ()+". update", t); session.Commit (); } catch (Exceção e) {session.rollback (); // Falha de retorno System.out.println ("Atualização falhou"); E.PrintStackTrace (); } finalmente {sessionutil.closesession (sessão); } retornar isupdate> 0; }/*** Consulta de paginação com base em condições especificadas* @param mapas Especifique a coleta de condições* @return*/public pager <t> encontre (classe <t> t, map <string, objeto> maps) {int pagestart = SystemContext.getPagestart (); // Page Page Pagesize = SystemCoxt.get.getSize (); maps.put ("pagestart", pagestart); maps.put ("PageSize", Pagesize); SQLSession Session = sessionutil.getSession (); Lista <T> dados = null; tente {dados = session.SelectList (t.getName ()+". Find", mapas); // obtenha o registro pagers.setDatas (dados); pagers.SetPagesize (PageSize); pagers.setPagestart (Pagestart); int totalRecord = session.SelectOne (t.getName ()+". findCount", mapas); // obtém o número total de registros pagers.setTotalRecord (totalRecord); pagers.setPageIndex (Pagestart/Pagesize+1); } finalmente {sessionutil.closesession (sessão); } retornar pagers; } / *** busca parte dos dados de acordo com as condições especificadas* @param mapas Especifique o conjunto de condições* @return* / public pager <t> List (classe <t> t, map <string, object> maps) {pager <t> páginas = new pager <> (); SQLSession Session = sessionutil.getSession (); Lista <T> dados = null; tente {dados = session.SelectList (t.getName ()+"list", maps); // obtenha registro pagers.setDatas (dados); pagers.setTotalRecord (DataS.Size ()); } finalmente {sessionutil.closesession (sessão); } retornar pagers; }}O mesmo userdao.java também requer modificações correspondentes
classe pública userdao estende -se baseado <suser> { / ** * Remova um usuário com base no id * @param ID para remover o ID do usuário * @return * / public user load (int id) {return super.load (user.class, id); }/* Outras funções não são postadas uma a uma, todas são escritas de maneiras semelhantes*/}2. Mapeamento do ResultMap
Simplificando, quando as informações de campo no banco de dados são inconsistentes com os atributos do objeto, é necessário mapear através do ResultMap.
Por exemplo: existe uma classe de entidade do usuário na propriedade de endereço, como segue
Endereço da classe pública {private int id; nome de string privado; telefone de corda privada; Código postal de string privado; // Merda o objeto do usuário diretamente em vez de usuário do usuário do usuário; `` `` `` `` ``}}Então, queremos retirar um endereço e também retirar o usuário correspondente. No entanto, esses são dois objetos e ambos têm atributos de ID, para que o Mybatis fique confuso ao chamar o método definido para definir propriedades. O objetivo de usar o ResultMap é eliminar esse caos.
Escreva Load SQL
<!-Carregue um endereço-> <!-A conexão da tabela é necessária aqui e o usuário é retirado. A conexão também é necessária para garantir que o endereço recuperado não esteja vazio e alias o ID do atributo duplicado-> <select id = "load" parameterType = "int" resultMap = "endereçoMap"> selecione *, t1.id como 'a_id' do endereço T1 Direito User T2 em (t1.User_Id = T2.Id) onde t1 t1 t1 t1 User T2 em (t1. </leclect>
Aqui usamos o ResultMap para mapear, o nome deste resultado é o endereço.
EndereçoMap
<ResultMap id = "endereçoMAP" type = "endereço" automapping = "true"> <!-mapear o A_ID no resultado como ID, e outros automapping = true corresponderão automaticamente-> <id column = "a_id" propriedade "id"/> <!-Fetch as propriedades associadas-> <associação ("user" javype = "mais"> <! colun = "user_id" property = "id"/> <resultado colun = "userName" propriedade = "userName"/> <resultado colun = "apelido"/> <resultado column = "apelido"/> <resultado column = "apelido"/> <resultado column = "type" de propriedade ""/> </association> </result>Após a conclusão da configuração acima, ao pesquisar, o Mybatis chamará automaticamente o método de set correspondente e definirá os atributos para a classe Entidade.
teste
pacote com.dao; importar com.model.address; public class EndereçoDao estende baseado em <deedge> {public static void main (string [] args) {addressDao timeDao = new ADDEREDDAO (); Endereço Endereço = EndereçoDao.load (1); System.out.println (endereço.toString ()); } / *** Carregue um endereço* @param ID O ID do endereço a ser carregado* @return Retorne o endereço a ser carregado, e o NULL falha ao carregar* / LOAD de endereço público (int id) {return super.load (endereço.class, id); }} Como pode ser visto nas representações, desde que os atributos de mapeamento sejam retirados, todos aqueles que não são mapeados são nulos.
Siga esta ideia para completar outras funções
Código XML:
<? xml versão = "1.0" Encoding = "utf-8"?> <! No banco de dados, é inconsistente com os atributos do objeto, você precisa mapeá-lo através do resultado do resultado-> <resultMap id = "endereçoMap" type = "endereço" automapping = "true"> <!-map a_id no resultado como id, outros automatizos = true será automaticamente correspondente a-> <idiated = "a_id"). javatype = "user"> <!-mapear user_id para o usuário do usuário-> <id column = "user_id" propriedade = "id"/> <resultado column = "username" propriedade = "nome de usuário"/> <resultado column = "apelido" property = "apename"/> <resultado = "///<lames/> <bumname" typen = "typen" typen "/" result column = "///> <bumn/> Um endereço-> <!-A conexão da tabela é necessária aqui e o usuário é retirado. A conexão garante que o endereço recuperado não esteja vazio e o alias para o ID do atributo duplicado -> <select id = "load" parameterType = "int" resultmap = "endereçoMap"> selecione *, t1.id como 'a_id' do endereço T1 T1 User T2 em (t1.USER_ID = T2.Id) onde T1 " </select> <!-Adicione um endereço-> <insert id = "add" parametertype = "endereço"> inserir nos valores de endereço (null,#{name},#{telefone},#{postcode}, $ {user_id}) </insert> <!-excluir um endereço-> <lete od = "p) </Delete> <!-Modificar um endereço-> <Update id = "update" parametertype = "endereço"> atualizar conjunto de endereços Nome =#{name}, telefone =#{telefone}, postcode =#{postcode} onde id =#{id} </update> <! Selecione *, t1.id como 'a_id' do endereço T1 JONAR DIREITO Usuário T2 ON (T1.USER_ID = T2.ID) onde T1.USER_ID =#{user_id} </select> </mapper>Código Java:
pacote com.dao; importar com.model.address; importar com.model.pager; importar java.util.hashmap; importar java.util.map;/*** criado por nl101 em 2016/2/23. */public class EndereçoDao estende -se baseado em <dedge> {public static void main (string [] args) {addressDao timeDao = new ADDEREEDDAO (); Pagers <endereço> pagers = endereçodao.list (1); System.out.println (pagers.getDatas (). Size ()); } / ** * Carregue um endereço * @param ID O ID do endereço a ser carregado * @return Retorne o endereço a ser carregado e o NULL falha * / LOAD de endereço público (int id) {return super.load (endereço.class, id); } / *** Adicione um endereço* @param endereço O endereço a ser adicionado* @param user_id o user_id correspondente ao endereço a ser adicionado* @return True bem -sucedido* / public boolean Endereço (endereço, int user_id) {userdao userdao = new userdao (); if (userdao.load (user_id) == null) {return false; } retornar super.add (endereço); } / *** Exclua um endereço* @param ID para excluir o ID correspondente ao endereço* @return true delete com sucesso* / public boolean excluir (int id) {return super.delete (endereço.class, id); } / *** Atualize um endereço* @param endereço O endereço a ser atualizado* @return true update com sucesso* / public boolean update (endereço de endereço) {return super.update (endereço); } / *** Atualize um endereço* @param endereço O endereço a ser atualizado* @return true update com sucesso* / public boolean update (endereço de endereço) {return super.update (endereço); } / ** * Retire todos os endereços do usuário com base no ID do usuário * @param user_id * @return * / public pager <endereço> list (int user_id) {map <string, object> maps = new hashmap <> (); maps.put ("user_id", user_id); retornar super.list (endereço.class, mapas); }}Se a camada ADO for escrita dessa maneira, não haverá problema.
O acima é tudo sobre este artigo. É tudo sobre o desenvolvimento de todo o projeto do Javaweb Mall. Espero que seja útil para o seu aprendizado.