基础类的收集

在开发中常用到的基础类:

RetMsg.java:

 1 **
 2 * 返回业务层的结果处理对象
 3 */
 4 public class RetMsg<T> implements java.io.Serializable {
 5 
 6 private static final long serialVersionUID = 1L;
 7 
 8 private boolean success;
 9 private String msg;
10 private T obj;
11 private List<T> list;
12 
13 public boolean isSuccess() {
14 return success;
15 }
16 public void setSuccess(boolean success) {
17 this.success = success;
18 }
19 public String getMsg() {
20 return msg;
21 }
22 public void setMsg(String msg) {
23 this.msg = msg;
24 }
25 public T getObj() {
26 return obj;
27 }
28 public void setObj(T obj) {
29 this.obj = obj;
30 }
31 public List<T> getList() {
32 return list;
33 }
34 public void setList(List<T> list) {
35 this.list = list;
36 }
37 @Override
38 public String toString() {
39 return "RetMsg [success=" + success + ", msg=" + msg + ", obj=" + obj
40 + ", list=" + list + "]";
41 }
42 }
43 
44  

其中T代表的含义是:

这个方法涉及到两个知识点:
1)泛型
2)扩展方法

先抛开“扩展方法”不提,这个方法属于“泛型方法”(注意:不是泛型类)。
以下为简单示例:
public static T ToString<T>(T obj)
{
return obj.ToString();
}
假设调用:
ToString<int>(2);
等效于:
public static int ToString(int obj) // 原来的 T 被替换为 int
{ return obj.ToString(); }

假设调用
ToString<string>("MyString");
等效于:
public static string ToString(string obj) // 原来的 T 被替换为 string
{ return obj.ToString(); }

通过以上例子可以看出,泛型参数 T 其实就是一个“类型占位符”,在编译时或运行时动态的替换为实际数据类型。我想你现在可以大致理解泛型方法了吧?
最后备注:where T : class 表示约束泛型参数 T 必须是引用类型,不能是值类型。

扩展方法:
是指在某个类型上,扩展出一个方法(属于编译技术,俗称:语法糖)。
CloneObject<T>(this T obj) 意思,是指在类型 T 上扩展一个 CloneObject 方法。
这个 T 是泛型参数:
1)如果泛型参数是 string 则表示在 string 上扩展 CloneObject 方法
2)如果泛型参数是 ArrayList 则表示在 ArrayList 上扩展 CloneObject 方法
3)如果泛型参数是其它 XXXXX 类,则表示在 XXXXX 类上扩展 CloneObject 方法

常量配置:
java 常量就是不变的值,在JAVA中就用final关键字来标识,主要作用是为了更方便的让很多人使用变量,易于维护。
static就是静态变量,声明为static的变量实质上就是全局变量,如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象!
static类中只能有静态成员,可以理解为是静态变量的集合!
如果在方法前面加static关键字,则表示为静态方法。
声明为static的方法有以下几条限制:
1、它们仅能调用其他的static 方法。 
2、它们只能访问static数据。 
3、它们不能以任何方式引用this 或super


 2 import org.apache.ibatis.session.SqlSessionFactory;
 3 import org.mybatis.spring.SqlSessionTemplate;
 4 import org.mybatis.spring.support.SqlSessionDaoSupport;
 5 import org.springframework.beans.factory.annotation.Autowired;
 6 import javax.annotation.Resource;
 7 import java.io.Serializable;
 8 /**
 9  * mybatis dao基础类,提供实体类的CRUD基本功能
10  * @param <T> 实体类的类型
11  * @param <PK> 主键类的类型
12  */
13 public abstract class SimpleMybatisSupport<T, PK extends Serializable> extends SqlSessionDaoSupport{
14 
15     protected final String baseNamesapce = "cn.ffcs.server.dao.mapper";
16     @Autowired
17     public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
18         super.setSqlSessionTemplate(sqlSessionTemplate);
19     }
20 
21     public int deleteByPrimaryKey(PK id) {
22         return getSqlSession().delete(toMybatisStatement("deleteByPrimaryKey"), id);
23     }
24     public int insert(T record) {
25         return getSqlSession().insert(toMybatisStatement("insert"), record);
26     }
27 
28     public int insertSelective(T record) {
29         return getSqlSession().insert(toMybatisStatement("insertSelective"), record);
30     }
31 
32     @SuppressWarnings("unchecked")
33     public T selectByPrimaryKey(PK id) {
34         return (T)getSqlSession().selectOne(toMybatisStatement("selectByPrimaryKey"),id);
35     }
36 
37     public int updateByPrimaryKey(T record) {
38         return getSqlSession().update(toMybatisStatement("updateByPrimaryKey"), record);
39     }
40 
41     public int updateByPrimaryKeySelective(T record) {
42         return getSqlSession().update(toMybatisStatement("updateByPrimaryKeySelective"), record);
43     }
44 
45     public String toMybatisStatement(String statementName) {
46         return getMybatisMapperNamesapce() + "." + statementName;
47     }
48 
49     public abstract String getMybatisMapperNamesapce();
50 
51     @Resource
52     public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
53         super.setSqlSessionFactory(sqlSessionFactory);
54     }
55 }

异常处理: 

这是处理没法进一步处理的异常的一般做法。try块中出现了一个异常,它被catch住了,我们首先要在标准输出上打印出异常但是如果没有throw这句,这个错误就静悄悄地被catch块吃掉了,程序会继续运行。可这个时候很可能你的程序的状态已经不对了,继续下去也没有什么意义,所以应该继续抛出这个异常。你当然可以写throw e;,但是这个e是一般的异常,如果这样抛出的话,你得在这个函数头上用throws来声明,比如:
public void abc() throws Exception
然后调用这个函数的函数也还得这么干,所以一般的处理是把e包装成运行时异常:new RuntimeException(e),这样就不需要在函数头声明了。但这只是一般的处理方法,在实际程序中不可不顾实际情况和需求生搬硬套。

 




posted on 2016-11-18 11:31  DiscretOrz  阅读(209)  评论(0编辑  收藏  举报

导航