公司呢用到了jfinal 我看过jfinal 的实现,然后就抽取出了 jfinal mvc 以及 jfinal ext 的部分 源码,还有我早些时候封装的 db 把他们两个给整合起来了,希望给开源多做点贡献,然而本人技术能力有限 还请大神赐教-------------------------------- 个人只是觉得这个项目是个学习用的,如果你要商业的话问问@jfinal 作者吧。
我总共分成了 4 个 jar 包
commons-db.jar 早些时候的 db 封装 只是通用的 db 借鉴了apache dbutils
commons-db-resources.jar 这个当然就是db 的源码了
commons-web.jar 简单的mvc
commons-web-resources.jar mvc 的实现源码
下载地址如下
https://github.com/lookseaeveryday/commons-db
https://github.com/lookseaeveryday/commons-web
别人的架构叫做 ssh 或者 ssm 我的就叫 db+web 项目结构如下
common 包里面包括 commonconfig.java 这里面主要就是放我们的数据库连接和路径的映射
package com.webshow.common;
import com.web.core.Routes;
import com.web.core.WebConfig;
import com.web.core.db.DruidPlugin;
import com.web.ext.mvc.AutoBindRoutes;
import com.zhucheng.database.WebSources;
public class CommonConfig extends WebConfig {
@Override
public void configRoute(Routes me) {
// 路由注解的方式
me.add(new AutoBindRoutes().autoScan(false));
}
@Override
public void configPlugin(WebSources db) {
DruidPlugin dp = new DruidPlugin();
dp.setDriverClass("com.mysql.jdbc.Driver"); // jdbc 驱动
dp.setUrl("jdbc:mysql://127.0.0.1:3306/test"); // url
dp.setPassword("root"); // 密码
dp.setUsername("root"); // 用户名
dp.init(); // init 就是可以连接了哈
}
}
BaseController.java 主要就是我们自己写的controller 继承他好使用里面的功能
package com.webshow.common;
import com.web.annotation.ControllerBind;
import com.web.mvc.Controller;
public class BaseController<T> extends Controller {
protected ControllerBind controll;
public BaseController() {
controll = this.getClass().getAnnotation(ControllerBind.class);
}
}
UserController.java 由于我是先写的博客方法并不是很全,我会奉上这个项目的下载地址
package com.webshow.controller;
import java.util.Arrays;
import java.util.List;
import com.web.annotation.ControllerBind;
import com.webshow.common.BaseController;
import com.webshow.model.UserModel;
import com.webshow.service.UserServiceImpl;
/**
* demo
* @author jiazhixin
*
*/
@ControllerBind(controllerKey = "/" , viewPath = "/page/index")
public class UserController extends BaseController<Object> {
/**
* 首页
*/
public void index() {
render("page/index.html");
}
/**
* 单查用户
*/
public void finduser() {
String uid = getPara("uid");
UserModel model = UserServiceImpl.getInstance().findById(uid);
System.out.println(model.toString());
}
/**
* 用户列表
*/
public void userlist() {
List<UserModel> model = UserServiceImpl.getInstance().findList();
System.out.println(Arrays.toString(model.toArray()));
}
/**
* 添加用户
*/
public void adduser() {
UserModel model = getModel(UserModel.class);
UserServiceImpl.getInstance().addUser(model);
}
/**
* 修改用户
*/
public void updateuser() {
// 如果我们页面有很多的参数 你一直 getPara 很累,那么就可以定义一个类接收器
// 使用我们的 model 里面就有值了很方便吧
UserModel model = getModel(UserModel.class);
UserServiceImpl.getInstance().updateUser(model);
}
/**
* 删除用户
*/
public void deleteuser() {
// 获取浏览器参数uid
String uid = getPara("uid");
UserServiceImpl.getInstance().deleteUser(uid);
}
}
userDao.java 代码如下
package com.webshow.dao;
import java.sql.SQLException;
import java.util.List;
import com.webshow.model.UserModel;
import com.zhucheng.database.ZCQuery;
import com.zhucheng.database.exception.SQLCloseException;
import com.zhucheng.database.handler.BeanHandler;
import com.zhucheng.database.handler.BeanListHandler;
public class UserDao {
private UserDao() {}
private static UserDao dao = new UserDao();
public static UserDao getInstance() {
return dao;
}
// 单查方法
public UserModel findById(String id) throws SQLException, SQLCloseException {
ZCQuery zc = new ZCQuery();
// 这个可以把我们写的实体类自动负载,避免了传统方式的赋值
return zc.query("select * from t_user where id=?", new BeanHandler<>(UserModel.class),new Object[]{id});
}
// 获取列表
public List<UserModel> findList() throws SQLException, SQLCloseException {
ZCQuery zc = new ZCQuery();
return zc.query("select * from t_user", new BeanListHandler<>(UserModel.class));
}
// 添加方法
public void addUser(UserModel model) throws SQLException, SQLCloseException {
ZCQuery zc = new ZCQuery();
zc.update("insert into t_user(name,age) values(?,?)",new Object[]{model.getName(),model.getAge()});
}
// 修改方法
public void updateUser(UserModel model) throws SQLException, SQLCloseException {
ZCQuery zc = new ZCQuery();
zc.update("update t_user set name=?,age=? where id=?",new Object[]{model.getName(),model.getAge(),model.getId()});
}
// 删除方法
// uid 删除id 主键
public void deleteUser(String uid) throws SQLException, SQLCloseException {
ZCQuery zc = new ZCQuery();
zc.update("delete from t_user where id=?",uid);
}
}
userServiceImpl.java 代码如下 这是一个 mvc 结构的分包
package com.webshow.service;
import java.sql.SQLException;
import java.util.List;
import com.webshow.dao.UserDao;
import com.webshow.model.UserModel;
import com.zhucheng.database.exception.SQLCloseException;
// 贾志鑫
// 2015/12/22
public class UserServiceImpl {
private UserServiceImpl() {
}
private static UserServiceImpl service = new UserServiceImpl();
public static UserServiceImpl getInstance() {
return service;
}
/**
* dao 层单查
*/
public UserModel findById(String id) {
try {
return UserDao.getInstance().findById(id);
} catch (SQLException e) {
e.printStackTrace();
} catch (SQLCloseException e) {
e.printStackTrace();
}
return null;
}
/**
* dao 层列表查询
*/
public List<UserModel> findList() {
try {
return UserDao.getInstance().findList();
} catch (SQLException e) {
e.printStackTrace();
} catch (SQLCloseException e) {
e.printStackTrace();
}
return null;
}
/**
* dao 层添加
*/
public void addUser(UserModel model) {
try {
UserDao.getInstance().addUser(model);
} catch (SQLException e) {
e.printStackTrace();
} catch (SQLCloseException e) {
e.printStackTrace();
}
}
/**
* dao 层修改
*/
public void updateUser(UserModel model) {
try {
UserDao.getInstance().updateUser(model);
} catch (SQLException e) {
e.printStackTrace();
} catch (SQLCloseException e) {
e.printStackTrace();
}
}
/**
* dao 层删除
*/
public void deleteUser(String uid) {
try {
UserDao.getInstance().deleteUser(uid);
} catch (SQLException e) {
e.printStackTrace();
} catch (SQLCloseException e) {
e.printStackTrace();
}
}
}
当然了我们现在需要个实体类
package com.webshow.model;
import java.io.Serializable;
public class UserModel implements Serializable {
@Override
public String toString() {
return "UserModel [id=" + id + ", age=" + age + ", name=" + name + "]";
}
private static final long serialVersionUID = 2142035439724429054L;
private Integer id;
private String age;
private String name;
public UserModel() {
}
public String getAge() {
return age;
}
public Integer getId() {
return id;
}
public String getName() {
return name;
}
public void setAge(String age) {
this.age = age;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
}
然后干嘛呢,可以测试了,只给出关键代码了,可以去下面的下载地址去下载完整的项目
新建一个test.java 进行测试
package webshow;
public class Test {
static String finduser = "http://127.0.0.1:8888/finduser?uid=1";
static String userlist = "http://127.0.0.1:8888/userlist";
static String adduser = "http://127.0.0.1:8888/adduser";
static String adduser_param = "name=李四&age=19"; //添加用户提交的参数
static String updateuser = "http://127.0.0.1:8888/updateuser";
static String updateuser_param = "name=王五&age=19&id=1"; //添加用户提交的参数
static String deleteuser = "http://127.0.0.1:8888/deleteuser?uid=1";
public static void main(String[] args) throws Exception {
// 根据id获取单个用户
HttpGetRequest.doGet(finduser);
// 获取用户列表
HttpGetRequest.doGet(userlist);
// 添加用户信息
HttpPostRequest.doPost(adduser,adduser_param);
// 修改用户信息
HttpPostRequest.doPost(updateuser, updateuser_param);
// 删除用户根据id删除
HttpGetRequest.doGet(deleteuser);
}
}
运行结果如下:
UserModel [id=2, age=19, name=æ??å??]
[UserModel [id=2, age=19, name=æ??å??]]
为啥是乱码呢。。。。 解决的办法就是在配置数据库连接的时候改成
jdbc:mysql://127.0.0.1/test?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
https://github.com/lookseaeveryday/webshow
其他的一些介绍 dbutils 还可以和spring 整合 当然比较简单实现原理更是简单