支持代码生成和多表查询的ORM框架MyORM(二)
四、系统运行时
1.类结构
上图中简单的列举一下myorm的一些主要的类和关系,描述如下:
类名 |
说明 |
my.myorm.tool.orm. MyORMListener |
web应用的listener,加载代码生成器生成的配置信息。
|
my.myorm.tool.orm. TableBeanMap |
代码生成器生成的配置文件在内存中的镜像 |
my.myorm.tool.jdbc .SQLManager |
SQL执行器的创建工厂 |
my.myorm.tool.jdbc .SQLExecutor |
SQL执行器 |
my.myorm.tool.jdbc .ResultSetHandler |
查询结果处理器,将rusultset转换成javabean |
my.myorm.tool.jdbc .ResultList |
查询转换完毕后的结果,list结构(但不是list) |
my.myorm.tool.jdbc .RecordMap |
ResultList中的记录,map结构(但不是map),其中key为对应bean的class对象,value为对应的bean数组对象(之所以为数组,是因为多张表(如分表)对应着同一个javabean类) |
my.myorm.tool.jdbc .DefaultBean |
默认的javabean,在查询转换过程中,如果字段不属于任何表或找不到对应的javabean,则保存在该bean中,是一个map结构(但不是map) |
my.myorm.tool.jdbc .TransactionContext |
事务上下文,开始/提交/回滚/结束事务。目前事务的实现是利用数据库自带的事务 |
my.myorm.tool.jdbc .Pages |
分页对象,可以结合jsp页面进行分页 |
my.myorm.tool.jdbc .DataSourceFactory |
接口,需要开发者去实现,返回一个datasource。 |
2.用法举例
2.1实现DataSourceFactory
package tool;
import my.myorm.tool.jdbc.DataSourceFactory;
import javax.sql.DataSource;
import my.myspring.tool.SpringBeanProxy;
public class MyDataSourceFactory implements DataSourceFactory {
public DataSource getDataSource() throws Exception {
return (DataSource) SpringBeanProxy.getBean("dataSource1");
}
}
这里的dataource由spring配置而成。数据源配置为:
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
<property name="url"><value>jdbc:mysql://192.168.21.143:3306/pplive_role?characterEncoding=utf-8</value></property>
<property name="username"><value>root</value></property>
<property name="password"><value>qwe123</value></property>
<property name="maxActive"><value>100</value></property>
<property name="maxIdle"><value>2</value></property>
<property name="maxWait"><value>120000</value></property>
<property name="defaultAutoCommit"><value>false</value></property>
</bean>
建议连接池用org.apache.commons.dbcp.BasicDataSource,因为开发、测试和发布myorm我用的都是这个连接池,其他的连接池没有测过。
2.2 增
SysLog log=new SysLog();
log.setUserName(user.getUserName());
log.setCreateTime(new Date());
log.setIP(request.getRemoteAddr());
log.setOperate("登录系统");
DAOManager.sysLogDao.save(log);
DAOManager是一个dao层管理器,由代码生成工具自动生成
如果log中含有自增一字段,执行完毕后该字段的值已经自动设置到该对象的相应属性上去了。
2.3 删
SysLog log=new SysLog();
log.setIP(request.getRemoteAddr());
DAOManager.sysLogDao.save(“ip”,log);
根据ip删除表中的记录
2.4 改
log.setIP(request.getRemoteAddr());
DAOManager.sysLogDao.update(“ip”,log);
根据ip更改表中的记录
2.5 查
SQLExecutor dbconn= SQLManager.getSQLExecutor();
String sql=”select a.*,b.* from sys_user as a,sys_log as b”;
ResultList list=dbconn.query(sql,false,null);
for(int i=0;i<list.size();i++){
RecordMap record=list.get(record);
SysLog log=record.get(SysLog.class);
SysUser user=record.get(SysUser.class);
}
2.6 事务
Try{
//事务开始
TransactionContext. beginTransaction();
SysLog log=new SysLog();
log.setIP(request.getRemoteAddr());
DAOManager.sysLogDao.save(“ip”,log);
log.setIP(“127.0.0.1”);
DAOManager.sysLogDao.update(“ip”,log);
//事务提交
TransactionContext. commitTransaction ();
}catch(Exception ex){
//事务回滚
TransactionContext. commitTransaction ();
}finally{
//事务结束,如果开启了事物,必须保证该函数的执行,否则不能释放数据库链接
TransactionContext. endTransaction();
}
有很多的重载函数,这里就不再一一说明了。详情请见API文档,或者与我话聊。
五、安装和配置
code.war(集成了SQL生成器、代码配置器和代码生成器):,拷贝到tomcat的webapps下即可,访问http://localhost[:port]/code即可
my.jar(myorm架包),加入到类路径中。包含了五个相互独立的包:
名称 |
说明 |
myaction |
一个结合了ajax的action框架,避免了struts的action类中只能有一个execute的问题,也少了配置文件的麻烦。尚在测试中,咱略。 |
myproperties |
没有什么新的东西,只是一个属性文件配置器,可以根据配置动态刷新各属性文件而不用重启服务器。 |
mylog4j |
没有什么新的东西,封装了一下log4j的配置和启动,可以指定属性文件的路径。 |
myspring |
没有什么新的东西,封装了一下spring的配置和启动 |
myorm |
ORM的框架包 |
以上各个功能5个包都是通过web.xml配置的,配置代码和实例请见附件中的API文档。如图:
六、附件
1.code.war(代码工具)
2.包文件(myorm,log4j,spring,mysqldriver等等)
4.样例文件(web.xml和数据库设计文档)
七、附属语
这篇文档写得比较仓促,如果安装或使用的过程中出现了什么问题,直接给我反馈,谢谢。