公司呢用到了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 整合 當然比較簡單實現原理更是簡單