SSHE开发手册
来源:互联网 发布:淘宝分享到微信怎么弄 编辑:程序博客网 时间:2024/06/05 13:00
本项目中利用Maven进行项目管理,其负责管理需要融合的Jar包,例如数据驱动等等,pom.xml中进行定义,代码如下:
<!-- 数据库驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.21</version></dependency>
需要加入特定功能的Jar包,可去 http://search.maven.org/ 进行搜索。例如加入hibernate-core的Jar,搜索后结果如下:
这时即可选取自己需要的组件的pom定义,然后将pom片段加入项目的pom.xml。Maven管理的Jar会自动下载,如果出现问题可将用户目录下的repository删除进行重新下载。
项目还需要对其他文件进行配置,如图:
但是在开发过程中,我们只需关注config.properties中的
hibernate.dialect=org.hibernate.dialect.MySQLDialectdriverClassName=com.mysql.jdbc.DrivervalidationQuery=SELECT 1jdbc_url=jdbc\:mysql\://localhost\:3306/sy?useUnicode\=true&characterEncoding\=UTF-8jdbc_username=rootjdbc_password=root
下一阶段,我们可以开始项目的编码工作。
整个项目的支撑程序被放在 src/main/java,前台呈现程序放在 src/main/webapp.
支撑程序的包被定义如下:
其中,我们应把重点集中在action、dao、model、pageModel、service包。
model是数据库表的实体映射集,换言之,model可通过Hibernate进行数据库中对象的持久化工作。如何将一个表利用Hibernate生成实体类的过程网上有很多相关资料,这里不再赘述。http://www.2cto.com/kf/201301/180948.html给出了一个例子,可参考。
=========================================================
Hibernate帮助我们实现了数据的持久化工作之后,我们的工作重心在哪里呢?简单来讲,应是处理数据访问、业务逻辑和页面逻辑。项目中便将各项工作分层,由dao、service和action分别完成。
以用户登录操作举个简单的例子:
1、UserAction负责安排对应的登录界面,即下面代码中的/admin/user.jsp,登录函数为public void login()。
@Action(value = "userAction", results = { @Result(name = "user", location = "/admin/user.jsp"), @Result(name = "showUserInfo", location = "/user/userInfo.jsp") })public class UserAction extends BaseAction implements ModelDriven<User> {private static final Logger logger = Logger.getLogger(UserAction.class);private User user = new User();private UserServiceI userService;public UserServiceI getUserService() {return userService;}@Autowiredpublic void setUserService(UserServiceI userService) {this.userService = userService;}public User getModel() {return user;}/*** 用户登录*/public void login() {Json j = new Json();User u = userService.login(user);if (u != null) {SessionInfo sessionInfo = saveSessionInfo(u);j.setSuccess(true);j.setMsg("用户登录成功!");j.setObj(sessionInfo);changeUserAuths(u);} else {j.setMsg("用户名或密码错误!");}writeJson(j);}
你会发现具体的登录过程被封装在userService.login()中,这时我们转至其具体实现。
2、Service由接口和实现构成,具体到User相关的Service为UserServiceI.javaUserServiceImpl.java。UserServiceI中定义的接口为:
public interface UserServiceI extends BaseServiceI {/*** 用户登录** @param user* @return*/public User login(User user);
UserServiceImpl的具体实现为:
其中,userDao.get完成了对model中User类的访问。显然,具体的数据操作是由userDao完成的。类似Service的实现方法,dao操作也是接口和实现构成。这里要注意的是,数据操作的行为是固定的,规律性较强,所有的dao操作由一个接口文件和实现文件即可。当然,你愿意写成多个也是可以的。@Service("userService")public class UserServiceImpl extends BaseServiceImpl implements UserServiceI {private BaseDaoI<Tuser> userDao;private BaseDaoI<Trole> roleDao;private BaseDaoI<Tusertrole> userroleDao;public BaseDaoI<Trole> getRoleDao() {return roleDao;}@Autowiredpublic void setRoleDao(BaseDaoI<Trole> roleDao) {this.roleDao = roleDao;}public BaseDaoI<Tusertrole> getUserroleDao() {return userroleDao;}@Autowiredpublic void setUserroleDao(BaseDaoI<Tusertrole> userroleDao) {this.userroleDao = userroleDao;}public BaseDaoI<Tuser> getUserDao() {return userDao;}@Autowiredpublic void setUserDao(BaseDaoI<Tuser> userDao) {this.userDao = userDao;}/*** 用户登录*/@Transactional(propagation = Propagation.SUPPORTS)public User login(User user) {Tuser u = userDao.get("from Tuser t where t.cname=? and t.cpwd=?", new Object[] { user.getCname(), Encrypt.e(user.getCpwd()) });if (u != null) {User t = new User();BeanUtils.copyProperties(u, t);return t;}return null;}
3、dao包含BaseDaoI.java和BaseDaoImpl.java。这里不再贴代码了,具体可去项目中查看。
注意:dao的操作我们不需要进行关注,我们只需要完成Service和Action的相关工作。
另外需要强调的是,model和pageModel的关系。pageModel完全是为了前台页面呈现方便,对model的扩展和补充。
以pageModel中的User为例,其中有很多自定义的属性:
这些属性的目的就是方便前台的展示。// 自己添加的属性private Date ccreatedatetimeStart;private Date cmodifydatetimeStart;private Date ccreatedatetimeEnd;private Date cmodifydatetimeEnd;private String ids;private String oldPwd;private String roleIds;private String roleNames;private String q;// 补全登录时用到的属性private int page;// 当前页private int rows;// 每页显示记录数private String sort;// 排序字段名private String order;// 按什么排序(asc,desc)private String cgroupid;
注意:我们操作的对象是pageModel中User,而不是model中的Tuser。Tuser只用于数据访问操作。
如果上面的开发流程清楚的话,你会产生疑问,EasyUI咋不出力呢,难道打酱油了?
其实呢,你在前台呈现时,不使用EasyUI仍然可以对数据进行呈现,使用它的目的是更快捷、更美观、更规范地进行前端的开发。关于EasyUI的相关资料可访问官网:www.jeasyui.com/
EasyUI在开发过程中需要注意的是,前后台数据传递的问题。具体来讲,后台如何生成json并传递给前台页面进行呈现。这里用到了com.alibaba的fastjson,体现在用户登录的代码如下:
其中,Json类在pageModel包中定义public void login() {Json j = new Json();User u = userService.login(user);if (u != null) {SessionInfo sessionInfo = saveSessionInfo(u);j.setSuccess(true);j.setMsg("用户登录成功!");j.setObj(sessionInfo);changeUserAuths(u);} else {j.setMsg("用户名或密码错误!");}writeJson(j);}
把实例化的对象放到json由setObj完成j.setObj(sessionInfo);public class Json implements java.io.Serializable {private boolean success = false;// 是否成功private String msg = "";// 提示信息private Object obj = null;// 其他信息public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getObj() {return obj;}public void setObj(Object obj) {this.obj = obj;}public boolean isSuccess() {return success;}public void setSuccess(boolean success) {this.success = success;}}
推送过程有writeJson完成,具体的代码在BaseAction中:
推送至前台后user.jsp就可以对json的数据进行处理,按照你的意愿对使用者进行展现。/*** 将对象转换成JSON字符串,并响应回前台** @param object* @throws IOException*/public void writeJson(Object object) {try {// SerializeConfig serializeConfig = new SerializeConfig();// serializeConfig.setAsmEnable(false);// String json = JSON.toJSONString(object);// String json = JSON.toJSONString(object, serializeConfig, SerializerFeature.PrettyFormat);String json = JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm:ss");// String json = JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm:ss", SerializerFeature.PrettyFormat);ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");ServletActionContext.getResponse().getWriter().write(json);ServletActionContext.getResponse().getWriter().flush();} catch (IOException e) {logger.debug(ExceptionUtil.getExceptionMessage(e));}}
如果不熟悉EasyUI,可以多看看其官网的demo
http://www.jeasyui.com/demo/main/index.php
祝各位开发顺利!
- SSHE开发手册
- 对SSHE开发的小结
- pom-for-sshe
- 开发手册
- 开发手册
- 《NGNcalc2x开发手册》
- QReport开发手册【英文】
- 模版开发手册
- QQ Shortcut 开发手册
- CSS开发手册
- ibatis 开发手册
- TeaBrowser开发手册
- FreeBSD开发手册(一)
- FreeBSD开发手册(二)
- CSS开发手册
- LotusDomino6应用开发手册
- CSS开发手册
- Prototype开发手册
- NYOJ 491 幸运三角形
- ZOJ Problem Set - 1003 Crashing Balloon
- 文本查询程序--摘自c++primer
- Linux C库之- 文件操作篇
- [第一次训练]Eming
- SSHE开发手册
- Oracle常用调优手段
- 当别人开始说你是疯子的时候,你离成功就不远了
- 补码负数多一个的问题
- NYOJ 42 一笔画问题
- Ubuntu 13.04 安装JDK7
- 浅谈C#中的属性
- uva442 栈
- Unity3D中常用js脚本的C#版