最近寫了一些東西,可以共同學習

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

http://blog.csdn.net/seemyname/article/details/46875577

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章