业务日志记录组件

1.本组件提供两类方法,记录日志与查询日志。

查询如果只返回List<map>类型又不太方便,所以还得与mybatis一样提供一个返回List这样自定义类型的方法。

有些数据可能需要转换格式,所以提供了一个把Map转为对象的方法,用于把转换格式后的数据转换成对象。直接返回List的也是用了这个方法。

所以接口设计如下:

public interface ILogService {
	/**
	 * @param tableName
	 *            数据表名
	 * @param viewOper
	 *            显示方法名
	 * @param userId
	 *            用户id
	 * @param userName
	 *            用户名
	 * @param extLog
	 *            Map<字段名,字段值> 日志显示附加信息
	 */
	public void saveLog(String tableName, String viewOper, Long userId, String userName, Map<String, Object> extLog);
	
	
	
	/**
	 * 查询日志,返回自定义类型T
	 * @param tableName 表名
	 * @param param 参数
	 * @param beanCls 返回对象类型
	 * @return
	 */
	public <t> List<t> queryLog(String tableName, Map<String, Object> param, Class<t> beanCls);
	
	
	/**
	 * 查询日志,返回ibatis原生的List<Map<String, Object>>
	 * @param tableName 表名
	 * @param param 参数
	 * @return
	 */
	public  List<Map<String, Object>> queryLog(String tableName, Map<String, Object> param);
	
	
	/**
	 * 当需要对返回结果进行处理时,可先返回List<Map<String, Object>>,处理后再调用这个方法进行转换
	 * 把返回的Map<String, Object>转换为List<t>
	 * @param listMap mybatis返回的Map<String, Object>
	 * @param beanCls 转换的目标对象类类型
	 * @return 转换后的List
	 */
	public <t> List<t> convertMap(List<Map<String, Object>> listMap,Class<t> beanCls);
	
	
}

2. 在项目里,可扩展的记录用户信息与分页方法。

对于保存方法中的用户名(userName),用户id(userId)一般有自己的统一获取的方式。另外显示时也需要分页显示。所以在自己的项目里,可写这两个方法:


public interface OperLogService extends ILogService{
	/**
	 * 保存日志
	 * @param tableName 表名
	 * @param viewOper 操作名
	 * @param extLog 附加信息
	 */
	public  void saveLog(String tableName,String viewOper,Map<String, Object> extLog);
	/**
	 * 分页查询日志
	 * @param tableName 表名
	 * @param param 查询参数
	 * @param beanCls 返回类型
	 * @param pageSize 页号 
	 * @param pageNum 每页行数
	 * @return
	 */
	public <t> List<t> queryPageLog(String tableName, Map<String, Object> param, Class<t> beanCls,Integer pageSize,Integer pageNum);
}

3.数据表的创建。

表名需自定义,上面的方法参数也有这个表名,另外自定义的参数就写入Map参数.共用的字段,创建方法如下:

CREATE TABLE `t_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `log_time` datetime DEFAULT NULL COMMENT '记录时间',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `user_name` varchar(45) DEFAULT NULL COMMENT '用户名称',
  `method_name` varchar(512) DEFAULT NULL COMMENT '源码方法名',
  `view_oper` varchar(128) DEFAULT NULL COMMENT '显示操作名',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

另外说明一点,上面把Map转为Bean的规则是把字段名为aa_bb的转为aaBb这样的驼峰命名法,不是这个规则不能转换哦。


Quik Start

1.执行上面的sql

2.pom.xml增加以下配置

<dependency>
	<groupid>net.highersoft</groupid>
	<artifactid>operlog</artifactid>
	<version>1.1.3</version>
</dependency>

3.mybatis配置中添加本组件的类,如下:

<bean id="mybatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations">
      <list>
          <value>classpath*:sql/**/*.xml</value>
          <!-- highersoft业务日志组件sql文件 -->
          <value>classpath*:mapper/LogMapper.xml</value>
      </list>
  	</property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- highersoft业务日志组件Mapper类文件-->
    <property name="basePackage" value="com.xx.**.mapper,net.highersoft.operlog.mapper"/>
    <property name="sqlSessionFactoryBeanName" value="mybatisSqlSessionFactory"></property>
</bean>

<!--highersoft业务日志组件Service类文件-->
<context:component-scan base-package="com.xx,net.highersoft.operlog">
</context:component-scan>
4.在代码中需要记录日志的地方添加代码,如下:

@Autowired
private LogService logService;
logService.saveLog("t_log", "查询Match", 1l, "管理员", null);

文/程忠 浏览次数:0次   2018-06-11 14:12:42

相关阅读


评论: