轻量级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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python--装饰器、生成器、迭代器、元类

一、装饰器 def w1(func):def inner():func()return innerw1 def f1():print(1111111) 1.只要python解释器执行到装饰器&#xff0c;就会自动进行装饰&#xff0c;而不是等到调用的时候才进行装饰。 2.有参数的函数&#xff0c;装饰器定义方法 def w1(func):def inner(*args, *…

scss的使用方式(环境搭建)

我用的是Koala。 IDE是intellij_idea&#xff08;其他IDE也可&#xff09; 下载Koala&#xff1a;http://koala-app.com/ 2.安装&#xff08;选好位置&#xff0c;下一步即可&#xff09; 3.打开Koala&#xff0c;创建项目 》创建css文件夹》创建XXX.scss文件&#xff0c;拖到…

小程序 按需_小程序想要留住用户需哪些举措?

**当下许多企业在进行长沙小程序开发后&#xff0c;都会费劲心思在推广引流上&#xff0c;很多企业也确实起到了不错的效果&#xff0c;用户们也是纷纷来到企业的小程序中。只不过有的小程序却无法将用户留下来&#xff0c;导致用户流失&#xff0c;令推广付之东流。下面长沙小…

渍渍渍~来一发豆瓣自动登录玩玩~

今天来一个比较屌的自动化登陆工具&#xff0c;selenium模块&#xff0c;这个模块&#xff0c;比较装逼啦~具体自行百度吧&#xff01;这篇博客实现了什么功能呢~可以自动使用用户名和密码登录&#xff0c;当然&#xff0c;豆瓣对登录次数还有ip地址做了一些策略&#xff0c;例…

Redis数据库入门学习(下载与安装、常用命令、在Java中操作Redis)

简介 下载与安装 数据类型 常用命令 1.字符串操作命令 2.哈希操作命令 3.列表操作命令 push是将元素总是插入到第一个 0表示第一个&#xff0c;1表示第二个。-1表示倒数第一个&#xff0c;-2表示倒数第二个。当前命令的意思是第一个到倒数第一个&#xff0c;即就是全部元素 rpo…

Java EE 7公共草案已发布。 我需要Java EE Light Profile!

2012年12月20日&#xff0c;Java EE 7的公共草案已上载。 乍一看&#xff0c;新规范是对Java EE 6中后续规范的改进。例如&#xff0c;我真的很喜欢Web Profile的想法。 遗憾的是它不是Java EE 6 Web Profile的一部分。 Web Profile是针对现代Web应用程序IMO的开发人员的&…

css入门基础知识

属性的值大于一个单词&#xff0c;要加上引号。 外部样式表<link href "mycss.css" type"text/css" rel "stylesheet">href是css文件&#xff0c;类型是text/css,rel是当前文档与外部文档的关系。 内部样式表<style>body{color:re…

.NET使用Office Open XML导出大量数据到 Excel

我相信很多人在做项目的都碰到过Excel数据导出的需求&#xff0c;我从最开始使用最原始的HTML拼接&#xff08;将需要导出的数据拼接成TABLE标签&#xff09;到后来happy的使用开源的NPOI, EPPlus等开源组件导出EXCEL&#xff0c;但不久前&#xff0c;我在一个项目碰到一个需求…

netapp管理地址_NetApp常用管理命令总结

一、系统相关&#xff1a;sysconfig -v查看硬件信息,主要显示了硬件平台、版本、序列号、适配器(网卡、光纤卡等)、硬盘等硬件信息sysconfig -r显示磁盘、raid、volume信息&#xff0c;等同于vol status -r-每个RAID会显示RAID的类型、RAID中每个磁盘是属于数据盘(data)、校验盘…

Java 8中的默认方法(Defender方法)简介

我们都知道Java中的接口仅包含方法声明&#xff0c;而没有实现&#xff0c;并且任何实现该接口的非抽象类都必须提供实现。 让我们看一个例子&#xff1a; public interface SimpleInterface {public void doSomeWork(); }class SimpleInterfaceImpl implements SimpleInterfa…

CSS自定义消息提示

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#confirm{position: absolute;z-index: 1;display: inline-block;border: 1px solid black;backgr…

转 push本地代码到github出错

https://www.douban.com/note/332510501/ 刚创建的github版本库&#xff0c;在push代码时出错&#xff1a;$ git push -u origin masterTo gitgithub.com:******/Demo.git! [rejected] master -> master (non-fast-forward)error: failed to push some refs to gitgithub.co…

go语音实战读后感——一

1、第一个go程序&#xff1a; package mainimport ("fmt" )func main() {fmt.Println("Hello go") } 解析&#xff1a;package引进go程序组织包&#xff0c;通过import导入外部代码&#xff0c;标准库中的fmt包用于格式化并输出;通过main主函数进行执行程序…

file 选择的文件胖多有多大_如何删除 macOS 压缩包中的隐藏文件?

如何删除 macOS 压缩包中的隐藏文件&#xff1f;在工作中&#xff0c;压缩打包文件是不可缺少的一项工作。为了避免文件的损坏和缺失&#xff0c;我们通常在macOS系统中&#xff0c;把多个文件或文件夹压缩后进行传输&#xff0c;我们一般使用访达&#xff08;Finder&#xff0…

使用Camel在来自不同来源的Solr中索引数据

Apache Solr是建立在Lucene之上的“流行的&#xff0c;快速的开源企业搜索平台”。 为了进行搜索&#xff08;并查找结果&#xff09;&#xff0c;通常需要从不同的来源&#xff08;例如内容管理系统&#xff0c;关系数据库&#xff0c;旧系统&#xff09;中提取数据&#xff0…

CSS画各种二维图形

1.效果 2.源码 <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <head><style type"text/css">#triangle_top{display: inline-block;width:0;height:0;border-left:50px solid transparent;bor…

成都网站建设企业网站备案需要哪些资料?

一、企业备案所需资料&#xff1a;①主办单位有效证件扫描件&#xff08;营业执照&#xff09;&#xff1b;②主办单位负责人有效证件复印件&#xff08;身份证&#xff09;&#xff1b;③主办单位负责人法人授权书扫描件&#xff08;主体负责人是法人&#xff0c;这个就不用上…

数据库的开启与关闭

今天&#xff0c;为了一些原因&#xff0c;要重启数据库&#xff0c;但因为当时安装的时候&#xff0c;同学随便装了&#xff0c;导致很多文件都找不到&#xff0c;想使用绝对路径重启数据的计划卡死在了路上。以下&#xff0c;我写下我的数据库开启、关闭的方法&#xff0c;方…

leetcode怎么用时间刷_刷完700多题后的首次总结:LeetCode应该怎么刷?

推荐观看&#xff1a;java技术进阶&#xff1a;膜拜&#xff01;字节大神总结的666页大师级算法宝典&#xff0c;分分钟团灭LeetCode​zhuanlan.zhihu.com2020最新马士兵老师联手左程云老师丨数据结构与算法丨面试BATJ必备​www.bilibili.com我是大二的时候开始接触LeetCode的&…

IntelliJ IDEA:使用Google Guava生成equals,hashCode和toString

问题 在Java领域&#xff0c;我们经常需要编写equals &#xff0c; hashCode和toString方法。 老实说&#xff0c;这通常只是一个样板义务。 得益于智能IDE&#xff0c;我们通常不再自己这样做。 我们只是让和IDE一起努力。 不过有一个问题。 生成的代码通常非常丑陋。 让我们…