Já estive em contato com o desenvolvimento da Web relacionado ao .NET, mas agora ainda estou muito desconfortável usando o Javaweb.
1. Fale sobre a arquitetura do projeto <r />, entrei em contato com o desenvolvimento relacionado ao .NET, por isso estou muito familiarizado com o desenvolvimento relacionado ao .NET, mas aprendi Java na escola e pretendo combinar essas duas plataformas. Levante -se, use o Java como back -end, ou seja, o provedor de serviços, complete toda a lógica de negócios na plataforma Java e use .NET com o qual estou mais familiarizado com o desenvolvimento da web. Dessa forma, haverá aplicativos e lados da Web Android. O cliente chama o serviço uniformemente através de uma estrutura distribuída. Depois de procurar por um longo tempo, finalmente escolhi o HProse, uma biblioteca leve, de plataforma cruzada, não invasiva e de alto desempenho, dinâmica de mecanismo de mecanismo de chamadas de objetos remotos. A razão pela qual escolhi isso é por causa do baixo custo de aprendizado e, por outro lado, sua chamada de plataforma cruzada é muito fácil e eficiente, porque precisamos usar o .NET para fazer a web para ligar para os serviços publicados pela Java! Depois de analisar aproximadamente a documentação do HProse, descobri que o uso do serviço de liberação do HPosServlet embutido é mais rápido e simples de se desenvolver, então pretendo usar esse método para publicar o serviço. Mas o problema é que a arquitetura SSH tradicional parece um pouco pesada, e eu vou usar o .NET para desenvolver o lado da web, então sinto que não há necessidade de integrar suportes, por isso é um hibernato+primavera+arquitetura hProse .
2. Design de banco de dados
É uma pequena livraria on -line, então o design ainda está faltando e é principalmente prático, praticando principalmente o desenvolvimento de Java ~~. Por isso, usei o NAVICAT para projetá -lo brevemente, mas não havia correlação de tabela de design.
De fato, você pode ver a correlação da tabela rapidamente, o próximo é hibernar alguns mapeamentos e também usar plug-ins para gerar modelos e arquivos de mapeamento.
É assim com uma ligeira modificação-
3. Spring3+Configuração do Hibernate4 <BR /> Como o modelo e os arquivos de mapeamento são gerados automaticamente, é melhor configurá -los um pouco. modelo composto. Por exemplo, o tipo de chave primária composta da tabela de revisão do produto :
pacote com.book.model; // gerou 2015-11-2 9:07:06 por hibernate Tools 4.0.0.Finalimport java.util.date;/** * comentáriosididr gerado por hbm2java */publi c commentspk implementos java io .CommentsDate = ComentáriosDate; Usuário) {this.user = Usuário; == Outros) Retorne true; Castother.getbook ()) ||. ) == CASTOTHER.GETUSER ()) || (this.getUser ()! .getCom Mentsdate () == Castother.getCommentsDate ()) || (this.getCommentsdate ()! ; == NULL? Modelo de tabela de revisão do produto :
pacote com.book.model; // gerou 2015-10-30 14:56:21 por Hibernate Tools 4.0.0.Finalimport java.sql.date;/** * Comentários gerados por hbm2java */classe pública comentários implementos java. io.Serializable {String privado; } public string getpic () {return pic; ; content = content; O arquivo de mapeamento de hibernato correspondente:
<? xml versão = "1.0"?> <! Doctype Hibernate-Mapping Public "-// Hibernate/Hibernate Mapping DTD 3.0 // EN" "http://www.hibernate.org/dtd/hibernate-mapp ing-3.0 . "Comentários" catalog = "Bookstore"> <composite-id name = "id"> <key-many-to-one name = "book"> <coluna name = "bookId" /> < /key-many-to- One> <Key-Many-to-One Name = "User"> <Nome da coluna = "UserId" /> < /key-many-to-one> <Key-Property name = "CommentsDate" type = "Timestamp"> <Nome da coluna = "CommentsDate" Length = "19"/> </ key-property> </ composite-id> <propriedade name = "content" type = "string"> <colun name = "content" length = "65535 " /> < /property> <propriedade name =" pic "type =" string "> <name da coluna =" pic "length =" 65535 " /> < /propriedade> <propriedade name =" client "type =" java. Lan G.Integer "> <Nome da coluna =" Client "/> </Property> </s class> </hibernate-mapping>
Como existem duas chaves estrangeiras na tabela de revisão de produtos, a tag-chave-para-um é usada.
Como Spring3.2+hibernate4.1 é usado, a maneira de obter sessões é limitada a sessionfactory.getCurrentSession (); mas as coisas devem ser ativadas:
<bean id = "transactionManager"> <propriedade name = "sessionFactory" ref = "sessionFactory" /> < /bean> <!-características de propagação da transação-> <tx: conselhos id = "txadvice" transacção-manager = "TransactionManager"> <Tx: atributos> <tx: método name = "add*" propagation = "requerir" /> <tx: método name = "delete*" propagation = "requerir" /> <tx: nome do método = " Modify*"propagação =" requerido " /> <!-hibernate4 deve ser configurado para ativar transações; caso contrário, getCurrentSession () não pode ser obtido-> <tx: name do método ="*"propagação =" requerido "ly ly ly ly ly = "true"/> </tx: atributes> </tx: conselhos>
Os acima são os problemas que ocorreram quando eu o configurei. Aqui está o arquivo de configuração da primavera:
<? xml versão = "1.0" coding = "utf-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://ww.w3.org /2001/xmlschema-Instance "xmlns: aop =" http://www.springframework.org/schema/aop "xmlns: context =" http://www.springframe.org/schema/ context "xmlnnns: http://www.springframework.org/schema/tx "xsi: schemalocation =" http://www.springframework.org/schema/beans http://www.springframework.orges/springs-bans/springs/springs-springores/springs-sweans http://www.springframework.orges/springs-bans/springs/springs-springores/springs-sweans http://www.springframework.orges/springs-bans http://www.springframework.org. 3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframewor k.org/schema/ Contexto http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/tx http: //wwww.springworks -TX-3.2.xsd "> <!-Ativar suporte da anotação da primavera-> <Contexto: anotação-config /> <bean id =" DataSource "Destroy-method =" Close "> <Nome da propriedade" "Driverclassnam e" value = "com.mysql.jdbc.driver"/> <propriedade name = "url" value = "jdbc: mysql: //127.0.0.1/BookStore? useunicode = true & caracterizador de caracteres = utf-8"/> <nome da propriedade = " nome de usuário "value =" root " /> <propriedade name =" senha "value =" yangyang " /> < /bean> <!-você pode adicionar a configuração do cache secundário-> <bean id =" sessionFactory " > <propriedade name = "DataSource" ref = "DataSource"/> <propriedade name = "mappingDirectoryLocations"> <List> <Value> ClassPath: config </value> </list> </oilter> <propriedades name = "hibernateProperties "> <PRESPS> <prop key =" hibernate.dialect "> org.hibernate.dialect.mysqldialect </pp> <propi key =" hibernate.show_sql "> true </pp> <props key =" hibernate.show_sql " > true </pp> <prop key = "hibernat e.hbm2ddl.auto"> update </pup> <props key = "hibernate.temp.use_jdbc_metadata_defaults"> false </p> </sprily </sports> </propriedade> </bean> <!-Gerenciador de transações de configuração-> <bean id = "transactionManager"> <propriedade name = "sessionFactory" ref = "sessionFactory"/> </ Bean> <!-Características de propagação das transações-> <tx: conselhos id = "txadvice" transação-manager = "transactionManager"> <tx: atributes> <tx: método name = "add*" propagation = "requerir" /> <tx: método name = "delete e*" propagação = "requerir" /> <tx: método name = "modify*" propagation = "requerir" /> <!-hibernate4 deve ser configurado para ativar transações, caso contrário, caso contrário, getCurrentSession () não pode ser obtido-> <tx: método name = "*" propagation = "requerir" leitura somente = "true"/> </tx: atributos> </tx: conselhos> <!-essas classes e os métodos usam transações-> <aOP: config> <!-Somente transações são implementadas para a camada lógica de negócios-> <AOP: Pointcut id = "allManagermethod" Expression = "Execution (* com.book.test.* .*(..)) " /> <AOP: Advisor Pointcut-ref =" AllManagermethod "Adv Ice-Ref =" Txadvice " /> < /AOP: config> <names "Orderdao" /> </ Beans>
Depois que tudo estiver pronto, usamos o teste do servlet:
<Verlet> <Verlet-name> Test </servlet-name> <Servlet-class> com.book.test.test </servlet-class> </servlet> <Servlet-Mapping> <Verlet-Name> Teste </ servlet-name> <url-tattern>/índice </url-tattern> </servlet-mapping>
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub Be anFactory factor = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getSession().getServletContext()); OrderDao dao= factor.ge tBean( OrderDao.Como não usamos estruturas, precisamos encontrar o Beanfactory da primavera para obter Dao Bean.
Resultados em execução:
Tabela de pedidos carregados com êxito 1 Item Quantidade de pedido.
Afinal, é a primeira vez que usei o Java para desenvolver esses projetos.