javascript
轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)
在這一部分中,我將繼續演示JSF,Guice和MyBatis的集成。 在持久層中使用DBCP連接池和MYSQL數據庫。 看一下第1部分 。
在上一篇文章中 ,我們創建了一個ServletContextListener。 現在,我們只需要在contextInitialized方法中綁定BasicDataSourceProvider和JdbcTransactionFactory。
GuiceContextListener.java
package org.borislam;import java.util.Properties;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; import org.apache.log4j.xml.DOMConfigurator; import org.borislam.mapper.StaffMapper; import org.borislam.service.SimpleService; import org.borislam.service.impl.SimpleServiceImpl; import org.mybatis.guice.MyBatisModule; import org.mybatis.guice.datasource.dbcp.BasicDataSourceProvider; import org.mybatis.guice.datasource.helper.JdbcHelper;import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Singleton; import com.google.inject.name.Names;public class GuiceContextListener implements ServletContextListener {public void contextDestroyed(ServletContextEvent servletContextEvent) {ServletContext servletContext = servletContextEvent.getServletContext();servletContext.removeAttribute(Injector.class.getName());}public void contextInitialized(ServletContextEvent servletContextEvent) {Injector injector = Guice.createInjector(new MyBatisModule() {@Overrideprotected void initialize() { install(JdbcHelper.MySQL);environmentId('development');bindDataSourceProviderType(BasicDataSourceProvider.class);bindTransactionFactoryType(JdbcTransactionFactory.class);Names.bindProperties(binder(), createServerProperties());//add singleton service classbind(SimpleService.class).to(SimpleServiceImpl.class).in(Singleton.class); //add MyBatis Service classaddMapperClass(StaffMapper.class);}});ServletContext servletContext = servletContextEvent.getServletContext();servletContext.setAttribute(Injector.class.getName(), injector);//log4JDOMConfigurator.configure(Thread.currentThread().getContextClassLoader().getResource('log4j.xml'));}protected static Properties createServerProperties() {Properties myBatisProperties = new Properties();myBatisProperties.setProperty('JDBC.host', 'localhost');myBatisProperties.setProperty('JDBC.port', '3306');myBatisProperties.setProperty('JDBC.schema', 'ttcoach');myBatisProperties.setProperty('JDBC.username', 'root');myBatisProperties.setProperty('JDBC.password', '');myBatisProperties.setProperty('JDBC.autoCommit', 'false');return myBatisProperties;}}Staff.java
package org.borislam.model;public class Staff {private String code;private String name;private String sex;private String tel;public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getTel() {return tel;}public void setTel(String tel) {this.tel = tel;} }StaffMapper.java
package org.borislam.mapper;import java.util.List;import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.borislam.model.Staff;public interface StaffMapper {final String SELECT_ALL = 'SELECT * FROM FREELANCER';final String SELECT_BY_CODE = 'SELECT * FROM FREELANCER WHERE CODE = #{code}';/*** Returns the list of all Freelancer instances from the database.* @return the list of all Freelancer instances from the database.*/@Select(SELECT_ALL)@Results(value = {@Result(property='code', column='code'),@Result(property='name', column='name'),@Result(property='sex', column='sex'),@Result(property='tel', column='tel')})List<Staff> selectAll();/*** Returns a Freelancer instance from the database.* @param id primary key value used for lookup.* @return A Freelancer instance with a primary key value equals to pk. null if there is no matching row.*/@Select(SELECT_BY_CODE)@Results(value = {@Result(property='code', column='code'),@Result(property='name', column='name'),@Result(property='sex', column='sex'),@Result(property='tel', column='tel')})Staff selectByCode(String code); }SimpleService.java
package org.borislam.service;public interface SimpleService {public void doSimpleThing(); }SimpleServiceImpl.java
package org.borislam.service.impl;import java.util.List;import org.borislam.mapper.StaffMapper; import org.borislam.model.Staff; import org.borislam.service.SimpleService; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import com.google.inject.Inject;public class SimpleServiceImpl implements SimpleService {private StaffMapper staffMapper;Logger logger = LoggerFactory.getLogger(this.getClass());@Injectpublic void setStaffMapper(StaffMapper staffMapper) {this.staffMapper = staffMapper;}public void doSimpleThing() {List<Staff> staffList = staffMapper.selectAll();logger.debug('size 1: ' + staffList.size());Staff staff = staffMapper.selectByCode('c001');logger.debug('Code1 : ' + staff.getCode());logger.debug('Name 1: ' + staff.getName());;} }TestBean.java
package org.borislam.view;import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; import javax.inject.Inject; import org.borislam.service.SimpleService; import org.borislam.service.TestService;@ManagedBean @SessionScoped public class TestBean extends BasePageBean {private SimpleService sService;@Injectpublic void setsService(SimpleService sService) {this.sService = sService;}public String doTest(){System.out.println('test 1 inside backing bean...');sService.doSimpleThing();return '';}public String doTest2(){System.out.println('test 2 inside backing bean...');sService.doSimpleThing();return '';} }index.xhtml
<html xmlns='http://www.w3c.org/1999/xhtml' xmlns:h='http://java.sun.com/jsf/html' xmlns:p='http://primefaces.org/ui'> <h:head> <style> .ui-widget, .ui-widget .ui-widget { font-size: 80% !important; } </style> </h:head> <h:body> <h:form><h:outputText value='#{msg['website.title']}' /><p:calendar id='popupButtonCal' showOn='button' /><p:commandButton value='TEST2' action='#{testBean.doTest}'/><p:editor/><br/> </h:form> </h:body> </html>
大功告成! 現在,您可以準備基于此框架編寫JSF應用程序。 參考: 輕量級Web應用程序框架:來自我們的JCG合作伙伴 Boris Lam的PrimeFaces(JSF)+ Guice + MyBatis(PART 2) ,位于“ 編程和平”博客上。
翻譯自: https://www.javacodegeeks.com/2013/01/lightweight-web-application-framework-primefaces-jsf-guice-mybatis-part-2.html
總結
以上是生活随笔為你收集整理的轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击如何实现(ddos如何实现)
- 下一篇: 安卓天猫精灵怎么连接wifi(安卓天猫)