最近写了一些东西,可以共同学习

公司呢用到了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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值