jfinal 学习2

原创
2016/01/25 16:29
阅读数 118

在service报下,新建类FollowerService

public class FollowerService {
	
	public void Subscribe(String openid) {
		
	}
	
	public void unSubscribe(String openid) {
		
	}
}

考虑了一下,决定在数据库中新建一张follower表

DROP TABLE IF EXISTS `follower`;
CREATE TABLE `follower` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `subscribe` int(11) DEFAULT NULL,
  `openid` varchar(50) DEFAULT NULL,
  `nickname` varchar(20) DEFAULT NULL,
  `sex` int(11) DEFAULT NULL,
  `language` varchar(20) DEFAULT NULL,
  `city` varchar(20) DEFAULT NULL,
  `province` varchar(20) DEFAULT NULL,
  `country` varchar(20) DEFAULT NULL,
  `headimgurl` varchar(255) DEFAULT NULL,
  `subscribe_time` int(11) DEFAULT NULL,
  `unionid` varchar(50) DEFAULT NULL,
  `remark` varchar(50) DEFAULT NULL,
  `groupid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

出于偷懒的原因,字段和json字段一样。

因为有下划线的原因,我们不能使用demo中的Generator类来生成model 和 base model,我们需要构建自己的生成器

新建包tool.util,新建MyMetaBuilder类,取消驼峰命名(还是为了更容易匹配解析json字符串啊)

public class MyMetaBuilder extends MetaBuilder{

	public MyMetaBuilder(DataSource dataSource) {
		super(dataSource);
	}

	@Override
	/**
	 * 重写不让其他调用转驼峰命名方法
	 */
	protected String buildAttrName(String colName) {
		if (dialect instanceof OracleDialect) {
			colName = colName.toLowerCase();
		}
		return colName;
	}

}

新建类MyGenerator,重写一些构造方法

public class MyGenerator extends Generator {
	public MyGenerator(DataSource dataSource, String baseModelPackageName, String baseModelOutputDir, String modelPackageName, String modelOutputDir) {
		this(dataSource, new BaseModelGenerator(baseModelPackageName, baseModelOutputDir), new ModelGenerator(modelPackageName, baseModelPackageName, modelOutputDir));
	}
	
	public MyGenerator(DataSource dataSource, String baseModelPackageName, String baseModelOutputDir) {
		this(dataSource, new BaseModelGenerator(baseModelPackageName, baseModelOutputDir));
	}

	public MyGenerator(DataSource dataSource, BaseModelGenerator baseModelGenerator, ModelGenerator modelGenerator) {
		super(dataSource, baseModelGenerator, modelGenerator);
		this.metaBuilder = new MyMetaBuilder(dataSource);
	}

	public MyGenerator(DataSource dataSource, BaseModelGenerator baseModelGenerator) {
		super(dataSource, baseModelGenerator);
		this.metaBuilder = new MyMetaBuilder(dataSource);		
	}
}

然后是类BeanGenerator,参考自demo

ublic class BeanGenerator {
	public static DataSource getDataSource() {
		PropKit.use("config.txt");
		C3p0Plugin c3p0Plugin = Config.createC3p0Plugin();
		c3p0Plugin.start();
		return c3p0Plugin.getDataSource();
	}
	
	public static void main(String[] args) {
		// base model 所使用的包名
		String baseModelPackageName = "tool.bean";
		// base model 文件保存路径
		String baseModelOutputDir = PathKit.getWebRootPath() + "/../src/tool/bean";
		
		// model 所使用的包名 (MappingKit 默认使用的包名)
		String modelPackageName = "tool.model";
		// model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)
		String modelOutputDir = PathKit.getWebRootPath() + "/../src/tool/model";
		
		// 创建生成器
		Generator gernerator = new MyGenerator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
		// 添加不需要生成的表名
		gernerator.addExcludedTable("adv");
		// 设置是否在 Model 中生成 dao 对象
		gernerator.setGenerateDaoInModel(true);
		// 设置是否生成字典文件
		gernerator.setGenerateDataDictionary(false);
		// 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUser
		gernerator.setRemovedTableNamePrefixes("t_");
		// 生成
		gernerator.generate();
	}
}

在BeanGenerator中右击运行,出现如下字符,表示创建成功:

Build TableMeta ...
Generate base model ...
Generate model ...
Generate MappingKit file ...
Generate complete in 0 seconds.

在项目上右击,刷新出现新包tool.bean\tool.model,报下多了文件

打开tool.config报下的Config类的configPlugin方法,添加一行绑定

        _MappingKit.mapping(arp);

下面写openid获取用户信息的service添加方法:

        /**
	 * 根据openid获取详细信息
	 * @param openid
	 */
	public void getFollowerInfo(String openid){
		ApiResult apiResult = UserApi.getUserInfo(openid);
		Follower follower = JsonUtils.parse(apiResult.getJson(), Follower.class);
		Follower follower2 = null;
		if ((follower2 = Follower.dao.findFirst("select * from follower where openid = ?",
				new Object[]{follower.getOpenid()})) == null) {
			follower.save();
		} else {
			follower2.setSubscribe(1);
			follower2.update();
		}
	}

完善关注和取消关注事件

        /**
	 * 用户关注事件
	 * @param openid
	 */
	public void Subscribe(String openid) {
		getFollowerInfo(openid);
	}
	
	/**
	 * 用户取消关注事件
	 * @param openid
	 */
	public void unSubscribe(String openid) {
		Follower follower = Follower.dao.findFirst("select * from follower where openid = ?", new Object[]{openid});
		follower.setSubscribe(0);
		follower.update();
	}

参照model使用在FollowerService中添加

public static FollowerService me = new FollowerService();

返回到WxMsgCon中的processInFollowEvent方法内

        @Override
	protected void processInFollowEvent(InFollowEvent inFollowEvent) {
		if (InFollowEvent.EVENT_INFOLLOW_SUBSCRIBE.equals(inFollowEvent.getEvent()))
		{
			OutTextMsg outMsg = new OutTextMsg(inFollowEvent);
			FollowerService.me.Subscribe(inFollowEvent.getFromUserName());
			outMsg.setContent("这是chmin的测试微信号\r\n感谢您的关注!");
			render(outMsg);
		}
		if (InFollowEvent.EVENT_INFOLLOW_UNSUBSCRIBE.equals(inFollowEvent.getEvent()))
		{
			FollowerService.me.unSubscribe(inFollowEvent.getFromUserName());
			renderJson("");
		}
	}

启动项目进行测试,结果如下:

同时,在数据库中可以看到新增数据

展开阅读全文
打赏
2
0 收藏
分享
加载中
chmin博主

引用来自“JFinal”的评论

如果使用的是 mysql数据库,建议字段名直接是驼峰的,这样就全体统一了,表名记得仍然用下划线命名规则,有利于linux与win迁移
正式做项目一定记得,学习么,就是为了方便了,json可以傻瓜式的转成bean
2016/01/26 12:42
回复
举报
如果使用的是 mysql数据库,建议字段名直接是驼峰的,这样就全体统一了,表名记得仍然用下划线命名规则,有利于linux与win迁移
2016/01/26 12:05
回复
举报
更多评论
打赏
2 评论
0 收藏
2
分享
返回顶部
顶部