1、项目结构

 

根据开源项目zheng”拆分出来的切换数据源核心代码,中间有少许改动。


java实现mysql的主从切换(第一部分)_第1张图片


2、代码功能划分

 

Java部分

 

Annotation部分

 

package com.vivebest.annotation;
 
import java.lang.annotation.*;
 
/**
 * 初始化继承BaseService的service
 *Created by shuzheng on 2017/2/11.
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface BaseService {
}

 

Controller部分

 

package com.vivebest.controller;
 
import com.vivebest.entity.UpmsLogExample;
importcom.vivebest.service.CustomerService;
import org.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.web.bind.annotation.PathVariable;
importorg.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.ResponseBody;
 
 
@Controller//标明为控制层
@RequestMapping("/customer")//相当于路径
public class CustomerController{
 
   @Autowired
   private CustomerService customerService;
 
   /**
    * 测试查询1
    */
   @RequestMapping(value ="/queryLog", method =RequestMethod.GET)
   @ResponseBody
   public Object queryLog(){
       return customerService.countByExample(new UpmsLogExample());
    }
 
   /**
    * 测试查询2
    */
   @RequestMapping(value ="/queryLogB", method =RequestMethod.GET)
   @ResponseBody
   public Object queryLogB(){
       return customerService.countByExampleB(new UpmsLogExample());
    }
 
 
   /**
    * 测试事物
    */
   @RequestMapping(value ="/deleteLog/{logId}", method =RequestMethod.GET)
   @ResponseBody
   public Object deleteLog(@PathVariable("logId") Integer logId){
       UpmsLogExample upmsLogExample = new UpmsLogExample();
       UpmsLogExample.Criteria upmsLogExampleCriteria = upmsLogExample.createCriteria();
       upmsLogExampleCriteria.andLogIdEqualTo(logId);
       return customerService.deleteByExample(upmsLogExample);
    }
 
 
   /**
    * 测试事物2
    */
   @RequestMapping(value ="/deleteLogB/{logId}", method =RequestMethod.GET)
   @ResponseBody
   public Object deleteLogB(@PathVariable("logId") IntegerlogId){
       UpmsLogExample upmsLogExample = new UpmsLogExample();
       UpmsLogExample.Criteria upmsLogExampleCriteria =upmsLogExample.createCriteria();
       upmsLogExampleCriteria.andLogIdEqualTo(logId);
       return customerService.deleteByExampleB(upmsLogExample);
    }
 
}

 

Dao部分

 

package com.vivebest.dao;
 
import com.vivebest.entity.UpmsLogExample;
 
public interface UpmsLogMapper {
 
   long countByExample(UpmsLogExample example);
 
   int deleteByExample(UpmsLogExample example);
 
   long countByExampleB(UpmsLogExample example);
 
   int deleteByExampleB(UpmsLogExample example);
}

 

Entity部分

 

-----------------------

 

package com.vivebest.entity;
 
import java.io.Serializable;
 
public class UpmsLog implementsSerializable {
   /**
    * 编号
    *
    * @mbg.generated
    */
   private Integer logId;
 
   /**
    * 操作描述
    *
    * @mbg.generated
    */
   private String description;
 
   /**
    * 操作用户
    *
    * @mbg.generated
    */
   private String username;
 
   /**
    * 操作时间
    *
    * @mbg.generated
    */
   private Long startTime;
 
   /**
    * 消耗时间
    *
    * @mbg.generated
    */
   private Integer spendTime;
 
   /**
    * 根路径
    *
    * @mbg.generated
    */
   private String basePath;
 
   /**
    * URI
    *
    * @mbg.generated
    */
   private String uri;
 
   /**
    * URL
    *
    * @mbg.generated
    */
   private String url;
 
   /**
    * 请求类型
    *
    * @mbg.generated
    */
   private String method;
 
   /**
    * 用户标识
    *
    * @mbg.generated
    */
   private String userAgent;
 
   /**
    * IP地址
    *
     * @mbg.generated
    */
   private String ip;
 
   /**
    * 权限值
    *
    * @mbg.generated
    */
   private String permissions;
 
   private String parameter;
 
   private String result;
 
   private static final long serialVersionUID = 1L;
 
   public Integer getLogId() {
       return logId;
    }
 
   public void setLogId(Integer logId) {
       this.logId = logId;
    }
 
   public String getDescription() {
       return description;
    }
 
   public void setDescription(String description) {
       this.description = description;
    }
 
   public String getUsername() {
       return username;
    }
 
   public void setUsername(String username) {
       this.username = username;
    }
 
   public Long getStartTime() {
       return startTime;
    }
 
   public void setStartTime(Long startTime) {
       this.startTime = startTime;
    }
 
   public Integer getSpendTime() {
       return spendTime;
    }
 
   public void setSpendTime(Integer spendTime) {
       this.spendTime = spendTime;
    }
 
   public String getBasePath() {
       return basePath;
    }
 
   public void setBasePath(String basePath) {
       this.basePath = basePath;
    }
 
   public String getUri() {
       return uri;
    }
 
   public void setUri(String uri) {
       this.uri = uri;
    }
 
   public String getUrl() {
       return url;
    }
 
   public void setUrl(String url) {
       this.url = url;
    }
 
   public String getMethod() {
       return method;
    }
 
    public void setMethod(String method) {
       this.method = method;
    }
 
   public String getUserAgent() {
       return userAgent;
    }
 
   public void setUserAgent(String userAgent) {
       this.userAgent = userAgent;
    }
 
   public String getIp() {
       return ip;
    }
 
   public void setIp(String ip) {
       this.ip = ip;
    }
 
   public String getPermissions() {
       return permissions;
    }
 
   public void setPermissions(String permissions) {
       this.permissions = permissions;
    }
 
   public String getParameter() {
       return parameter;
    }
 
   public void setParameter(String parameter) {
       this.parameter = parameter;
    }
 
   public String getResult() {
       return result;
    }
 
   public void setResult(String result) {
       this.result = result;
    }
 
   @Override
   public String toString() {
       StringBuilder sb = new StringBuilder();
       sb.append(getClass().getSimpleName());
       sb.append(" [");
       sb.append("Hash = ").append(hashCode());
       sb.append(", logId=").append(logId);
       sb.append(", description=").append(description);
       sb.append(", username=").append(username);
       sb.append(", startTime=").append(startTime);
       sb.append(", spendTime=").append(spendTime);
       sb.append(", basePath=").append(basePath);
       sb.append(", uri=").append(uri);
       sb.append(", url=").append(url);
       sb.append(", method=").append(method);
       sb.append(", userAgent=").append(userAgent);
       sb.append(", ip=").append(ip);
       sb.append(", permissions=").append(permissions);
       sb.append(", parameter=").append(parameter);
       sb.append(", result=").append(result);
       sb.append("]");
       return sb.toString();
    }
 
   @Override
   public boolean equals(Object that) {
       if (this == that) {
           return true;
       }
       if (that == null) {
           return false;
       }
       if (getClass() != that.getClass()) {
           return false;
       }
       UpmsLog other = (UpmsLog) that;
       return (this.getLogId() == null ? other.getLogId() == null :this.getLogId().equals(other.getLogId()))
           && (this.getDescription() == null ? other.getDescription() ==null : this.getDescription().equals(other.getDescription()))
           && (this.getUsername() == null ? other.getUsername() == null :this.getUsername().equals(other.getUsername()))
           && (this.getStartTime() == null ? other.getStartTime() == null :this.getStartTime().equals(other.getStartTime()))
           && (this.getSpendTime() == null ? other.getSpendTime() == null :this.getSpendTime().equals(other.getSpendTime()))
           && (this.getBasePath() == null ? other.getBasePath() == null :this.getBasePath().equals(other.getBasePath()))
           && (this.getUri() == null ? other.getUri() == null :this.getUri().equals(other.getUri()))
           && (this.getUrl() == null ? other.getUrl() == null :this.getUrl().equals(other.getUrl()))
           && (this.getMethod() == null ? other.getMethod() == null :this.getMethod().equals(other.getMethod()))
           && (this.getUserAgent() == null ? other.getUserAgent() == null :this.getUserAgent().equals(other.getUserAgent()))
            && (this.getIp() == null ?other.getIp() == null : this.getIp().equals(other.getIp()))
           && (this.getPermissions() == null ? other.getPermissions() ==null : this.getPermissions().equals(other.getPermissions()))
           && (this.getParameter() == null ? other.getParameter() == null :this.getParameter().equals(other.getParameter()))
           && (this.getResult() == null ? other.getResult() == null :this.getResult().equals(other.getResult()));
    }
 
   @Override
   public int hashCode() {
       final int prime = 31;
       int result = 1;
       result = prime * result + ((getLogId() == null) ? 0 :getLogId().hashCode());
       result = prime * result + ((getDescription() == null) ? 0 :getDescription().hashCode());
       result = prime * result + ((getUsername() == null) ? 0 :getUsername().hashCode());
       result = prime * result + ((getStartTime() == null) ? 0 :getStartTime().hashCode());
       result = prime * result + ((getSpendTime() == null) ? 0 : getSpendTime().hashCode());
       result = prime * result + ((getBasePath() == null) ? 0 :getBasePath().hashCode());
       result = prime * result + ((getUri() == null) ? 0 :getUri().hashCode());
       result = prime * result + ((getUrl() == null) ? 0 :getUrl().hashCode());
       result = prime * result + ((getMethod() == null) ? 0 :getMethod().hashCode());
       result = prime * result + ((getUserAgent() == null) ? 0 :getUserAgent().hashCode());
       result = prime * result + ((getIp() == null) ? 0 : getIp().hashCode());
       result = prime * result + ((getPermissions() == null) ? 0 :getPermissions().hashCode());
       result = prime * result + ((getParameter() == null) ? 0 :getParameter().hashCode());
       result = prime * result + ((getResult() == null) ? 0 :getResult().hashCode());
       return result;
    }
}

 

-----------------------

 

package com.vivebest.entity;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
public class
UpmsLogExample implements Serializable {
   protected String orderByClause;
 
   protected boolean distinct;
 
   protected List oredCriteria;
 
   private static final long serialVersionUID = 1L;
 
   public UpmsLogExample() {
       oredCriteria = new ArrayList();
    }
 
   public void setOrderByClause(String orderByClause) {
       this.orderByClause = orderByClause;
    }
 
   public String getOrderByClause() {
       return orderByClause;
    }
 
   public void setDistinct(boolean distinct) {
       this.distinct = distinct;
    }
 
   public boolean isDistinct() {
       return distinct;
    }
 
   public List getOredCriteria() {
       return oredCriteria;
    }
 
   public void or(Criteria criteria) {
       oredCriteria.add(criteria);
    }
 
   public Criteria or() {
       Criteria criteria = createCriteriaInternal();
       oredCriteria.add(criteria);
       return criteria;
    }
 
   public Criteria createCriteria() {
       Criteria criteria = createCriteriaInternal();
       if (oredCriteria.size() == 0) {
           oredCriteria.add(criteria);
       }
       return criteria;
    }
 
   protected Criteria createCriteriaInternal() {
       Criteria criteria = new Criteria();
       return criteria;
    }
 
   public void clear() {
       oredCriteria.clear();
       orderByClause = null;
       distinct = false;
    }
 
   protected abstract static class GeneratedCriteria implementsSerializable {
       protected List criteria;
 
       protected GeneratedCriteria() {
           super();
           criteria = new ArrayList();
       }
 
       public boolean isValid() {
           return criteria.size() > 0;
       }
 
       public List getAllCriteria() {
           return criteria;
       }
 
       public List getCriteria() {
           return criteria;
       }
 
       protected void addCriterion(String condition) {
           if (condition == null) {
                throw newRuntimeException("Value for condition cannot be null");
           }
           criteria.add(new Criterion(condition));
       }
 
       protected void addCriterion(String condition, Object value, Stringproperty) {
           if (value == null) {
                throw newRuntimeException("Value for " + property + " cannot benull");
           }
           criteria.add(new Criterion(condition, value));
       }
 
       protected void addCriterion(String condition, Object value1, Objectvalue2, String property) {
           if (value1 == null || value2 == null) {
                throw newRuntimeException("Between values for " + property + " cannot benull");
           }
           criteria.add(new Criterion(condition, value1, value2));
       }
 
       public Criteria andLogIdIsNull() {
           addCriterion("log_id is null");
           return (Criteria) this;
       }
 
       public Criteria andLogIdIsNotNull() {
           addCriterion("log_id is not null");
           return (Criteria) this;
       }
 
       public Criteria andLogIdEqualTo(Integer value) {
           addCriterion("log_id =", value, "logId");
           return (Criteria) this;
       }
 
        public Criteria andLogIdNotEqualTo(Integervalue) {
           addCriterion("log_id <>", value, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdGreaterThan(Integer value) {
           addCriterion("log_id >", value, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdGreaterThanOrEqualTo(Integer value) {
           addCriterion("log_id >=", value, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdLessThan(Integer value) {
           addCriterion("log_id <", value, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdLessThanOrEqualTo(Integer value) {
           addCriterion("log_id <=", value, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdIn(List values) {
           addCriterion("log_id in", values, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdNotIn(List values) {
           addCriterion("log_id not in", values, "logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdBetween(Integer value1, Integer value2) {
           addCriterion("log_id between", value1, value2,"logId");
           return (Criteria) this;
       }
 
       public Criteria andLogIdNotBetween(Integer value1, Integer value2) {
           addCriterion("log_id not between", value1, value2,"logId");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionIsNull() {
           addCriterion("description is null");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionIsNotNull() {
           addCriterion("description is not null");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionEqualTo(String value) {
           addCriterion("description =", value, "description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionNotEqualTo(String value) {
           addCriterion("description <>", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionGreaterThan(String value) {
           addCriterion("description >", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionGreaterThanOrEqualTo(String value) {
           addCriterion("description >=", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionLessThan(String value) {
           addCriterion("description <", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionLessThanOrEqualTo(String value) {
           addCriterion("description <=", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionLike(String value) {
           addCriterion("description like", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionNotLike(String value) {
           addCriterion("description not like", value,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionIn(List values) {
           addCriterion("description in", values,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionNotIn(List values) {
           addCriterion("description not in", values,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionBetween(String value1, String value2) {
           addCriterion("description between", value1, value2,"description");
           return (Criteria) this;
       }
 
       public Criteria andDescriptionNotBetween(String value1, String value2) {
           addCriterion("description not between", value1, value2,"description");
           return (Criteria) this;
       }
 
       public Criteria andUsernameIsNull() {
           addCriterion("username is null");
           return (Criteria) this;
       }
 
       public Criteria andUsernameIsNotNull() {
           addCriterion("username is not null");
           return (Criteria) this;
       }
 
       public Criteria andUsernameEqualTo(String value) {
           addCriterion("username =", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameNotEqualTo(String value) {
           addCriterion("username <>", value,"username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameGreaterThan(String value) {
           addCriterion("username >", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameGreaterThanOrEqualTo(String value) {
           addCriterion("username >=", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameLessThan(String value) {
           addCriterion("username <", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameLessThanOrEqualTo(String value) {
           addCriterion("username <=", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameLike(String value) {
           addCriterion("username like", value, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameNotLike(String value) {
           addCriterion("username not like", value,"username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameIn(List values) {
           addCriterion("username in", values, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameNotIn(List values) {
           addCriterion("username not in", values, "username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameBetween(String value1, String value2) {
           addCriterion("username between", value1, value2,"username");
           return (Criteria) this;
       }
 
       public Criteria andUsernameNotBetween(String value1, String value2) {
           addCriterion("username not between", value1, value2,"username");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeIsNull() {
           addCriterion("start_time is null");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeIsNotNull() {
           addCriterion("start_time is not null");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeEqualTo(Long value) {
           addCriterion("start_time =", value, "startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeNotEqualTo(Long value) {
           addCriterion("start_time <>", value,"startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeGreaterThan(Long value) {
           addCriterion("start_time >", value, "startTime");
           return (Criteria) this;
       }
 
        public CriteriaandStartTimeGreaterThanOrEqualTo(Long value) {
           addCriterion("start_time >=", value,"startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeLessThan(Long value) {
           addCriterion("start_time <", value, "startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeLessThanOrEqualTo(Long value) {
           addCriterion("start_time <=", value,"startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeIn(List values) {
           addCriterion("start_time in", values, "startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeNotIn(List values) {
           addCriterion("start_timenot in", values, "startTime");
           return (Criteria) this;
       }
 
       public Criteria andStartTimeBetween(Long value1, Long value2) {
           addCriterion("start_time between", value1, value2,"startTime");
            return (Criteria) this;
       }
 
       public Criteria andStartTimeNotBetween(Long value1, Long value2) {
           addCriterion("start_time not between", value1, value2,"startTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeIsNull() {
           addCriterion("spend_time is null");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeIsNotNull() {
           addCriterion("spend_time is not null");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeEqualTo(Integer value) {
           addCriterion("spend_time =", value, "spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeNotEqualTo(Integer value) {
           addCriterion("spend_time <>", value,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeGreaterThan(Integer value) {
           addCriterion("spend_time >", value, "spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeGreaterThanOrEqualTo(Integer value) {
           addCriterion("spend_time >=", value,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeLessThan(Integer value) {
           addCriterion("spend_time <", value, "spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeLessThanOrEqualTo(Integer value) {
           addCriterion("spend_time <=", value,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeIn(List values) {
           addCriterion("spend_time in", values, "spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeNotIn(List values) {
           addCriterion("spend_time not in", values,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeBetween(Integer value1, Integer value2) {
           addCriterion("spend_time between", value1, value2,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andSpendTimeNotBetween(Integer value1, Integer value2) {
           addCriterion("spend_time not between", value1, value2,"spendTime");
           return (Criteria) this;
       }
 
       public Criteria andBasePathIsNull() {
           addCriterion("base_path is null");
           return (Criteria) this;
       }
 
       public Criteria andBasePathIsNotNull() {
           addCriterion("base_path is not null");
           return (Criteria) this;
       }
 
       public Criteria andBasePathEqualTo(String value) {
           addCriterion("base_path =", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathNotEqualTo(String value) {
           addCriterion("base_path <>", value,"basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathGreaterThan(String value) {
           addCriterion("base_path >", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathGreaterThanOrEqualTo(String value) {
           addCriterion("base_path >=", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathLessThan(String value) {
           addCriterion("base_path <", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathLessThanOrEqualTo(String value) {
           addCriterion("base_path <=", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathLike(String value) {
           addCriterion("base_path like", value, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathNotLike(String value) {
           addCriterion("base_path not like", value,"basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathIn(List values) {
           addCriterion("base_path in", values, "basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathNotIn(List values) {
           addCriterion("base_path not in", values,"basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathBetween(String value1, String value2) {
           addCriterion("base_path between", value1, value2,"basePath");
           return (Criteria) this;
       }
 
       public Criteria andBasePathNotBetween(String value1, String value2) {
           addCriterion("base_path not between", value1, value2,"basePath");
           return (Criteria) this;
       }
 
        public Criteria andUriIsNull() {
           addCriterion("uri is null");
           return (Criteria) this;
       }
 
       public Criteria andUriIsNotNull() {
           addCriterion("uri is not null");
           return (Criteria) this;
       }
 
       public Criteria andUriEqualTo(String value) {
           addCriterion("uri =", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriNotEqualTo(String value) {
           addCriterion("uri <>", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriGreaterThan(String value) {
           addCriterion("uri >", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriGreaterThanOrEqualTo(String value) {
           addCriterion("uri >=", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriLessThan(String value) {
           addCriterion("uri <", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriLessThanOrEqualTo(String value) {
           addCriterion("uri <=", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriLike(String value) {
           addCriterion("uri like", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriNotLike(String value) {
           addCriterion("uri not like", value, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriIn(List values) {
           addCriterion("uri in", values, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriNotIn(List values) {
           addCriterion("uri not in", values, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriBetween(String value1, String value2) {
           addCriterion("uri between", value1, value2, "uri");
           return (Criteria) this;
       }
 
       public Criteria andUriNotBetween(String value1, String value2) {
           addCriterion("uri not between", value1, value2,"uri");
           return (Criteria) this;
       }
 
       public Criteria andUrlIsNull() {
           addCriterion("url is null");
           return (Criteria) this;
       }
 
       public Criteria andUrlIsNotNull() {
           addCriterion("url is not null");
           return (Criteria) this;
       }
 
       public Criteria andUrlEqualTo(String value) {
           addCriterion("url =", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlNotEqualTo(String value) {
           addCriterion("url <>", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlGreaterThan(String value) {
           addCriterion("url >", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlGreaterThanOrEqualTo(String value) {
           addCriterion("url >=", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlLessThan(String value) {
           addCriterion("url <", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlLessThanOrEqualTo(String value) {
           addCriterion("url <=", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlLike(String value) {
           addCriterion("url like", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlNotLike(String value) {
           addCriterion("url not like", value, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlIn(List values) {
           addCriterion("url in", values, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlNotIn(List values) {
           addCriterion("url not in", values, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlBetween(String value1, String value2) {
           addCriterion("url between", value1, value2, "url");
           return (Criteria) this;
       }
 
       public Criteria andUrlNotBetween(String value1, String value2) {
           addCriterion("url not between", value1, value2,"url");
           return (Criteria) this;
       }
 
       public Criteria andMethodIsNull() {
           addCriterion("method is null");
           return (Criteria) this;
       }
 
       public Criteria andMethodIsNotNull() {
           addCriterion("method is not null");
           return (Criteria) this;
       }
 
       public Criteria andMethodEqualTo(String value) {
           addCriterion("method =", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodNotEqualTo(String value) {
           addCriterion("method <>", value, "method");
            return (Criteria) this;
       }
 
       public Criteria andMethodGreaterThan(String value) {
           addCriterion("method >", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodGreaterThanOrEqualTo(String value) {
           addCriterion("method >=", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodLessThan(String value) {
           addCriterion("method <", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodLessThanOrEqualTo(String value) {
           addCriterion("method <=", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodLike(String value) {
           addCriterion("method like", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodNotLike(String value) {
           addCriterion("method not like", value, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodIn(List values) {
           addCriterion("method in", values, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodNotIn(List values) {
           addCriterion("method not in", values, "method");
           return (Criteria) this;
       }
 
       public Criteria andMethodBetween(String value1, String value2) {
           addCriterion("method between", value1, value2,"method");
           return (Criteria) this;
       }
 
       public Criteria andMethodNotBetween(String value1, String value2) {
           addCriterion("method not between", value1, value2,"method");
            return (Criteria) this;
       }
 
       public Criteria andUserAgentIsNull() {
           addCriterion("user_agent is null");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentIsNotNull() {
           addCriterion("user_agent is not null");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentEqualTo(String value) {
           addCriterion("user_agent =", value, "userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentNotEqualTo(String value) {
           addCriterion("user_agent <>", value,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentGreaterThan(String value) {
           addCriterion("user_agent >", value, "userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentGreaterThanOrEqualTo(String value) {
           addCriterion("user_agent >=", value,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentLessThan(String value) {
           addCriterion("user_agent <", value, "userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentLessThanOrEqualTo(String value) {
           addCriterion("user_agent <=", value,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentLike(String value) {
           addCriterion("user_agent like", value, "userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentNotLike(String value) {
           addCriterion("user_agent not like", value,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentIn(List values) {
           addCriterion("user_agent in", values, "userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentNotIn(List values) {
           addCriterion("user_agent not in", values,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andUserAgentBetween(String value1, String value2) {
           addCriterion("user_agent between", value1, value2,"userAgent");
           return (Criteria) this;
        }
 
       public Criteria andUserAgentNotBetween(String value1, String value2) {
           addCriterion("user_agent not between", value1, value2,"userAgent");
           return (Criteria) this;
       }
 
       public Criteria andIpIsNull() {
           addCriterion("ip is null");
           return (Criteria) this;
       }
 
       public Criteria andIpIsNotNull() {
           addCriterion("ip is not null");
           return (Criteria) this;
       }
 
       public Criteria andIpEqualTo(String value) {
           addCriterion("ip =", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpNotEqualTo(String value) {
           addCriterion("ip <>", value, "ip");
           return (Criteria) this;
        }
 
       public Criteria andIpGreaterThan(String value) {
           addCriterion("ip >", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpGreaterThanOrEqualTo(String value) {
           addCriterion("ip >=", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpLessThan(String value) {
           addCriterion("ip <", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpLessThanOrEqualTo(String value) {
           addCriterion("ip <=", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpLike(String value) {
           addCriterion("ip like", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpNotLike(String value) {
           addCriterion("ip not like", value, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpIn(List values) {
           addCriterion("ip in", values, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpNotIn(List values) {
           addCriterion("ip not in", values, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpBetween(String value1, String value2) {
           addCriterion("ip between", value1, value2, "ip");
           return (Criteria) this;
       }
 
       public Criteria andIpNotBetween(String value1, String value2) {
           addCriterion("ip notbetween", value1, value2, "ip");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsIsNull() {
           addCriterion("permissions is null");
           return (Criteria) this;
       }
 
        public Criteria andPermissionsIsNotNull() {
           addCriterion("permissions is not null");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsEqualTo(String value) {
           addCriterion("permissions =", value, "permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsNotEqualTo(String value) {
           addCriterion("permissions <>", value,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsGreaterThan(String value) {
           addCriterion("permissions >", value,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsGreaterThanOrEqualTo(String value) {
            addCriterion("permissions>=", value, "permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsLessThan(String value) {
           addCriterion("permissions <", value,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsLessThanOrEqualTo(String value) {
           addCriterion("permissions <=", value,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsLike(String value) {
           addCriterion("permissions like", value,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsNotLike(String value) {
           addCriterion("permissions not like", value, "permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsIn(List values) {
           addCriterion("permissions in", values,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsNotIn(List values) {
           addCriterion("permissions not in", values,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsBetween(String value1, String value2) {
           addCriterion("permissions between", value1, value2,"permissions");
           return (Criteria) this;
       }
 
       public Criteria andPermissionsNotBetween(String value1, String value2) {
           addCriterion("permissions not between", value1, value2,"permissions");
           return (Criteria) this;
       }
    }
 
   public static class Criteria extends GeneratedCriteria implementsSerializable {
 
       protected Criteria() {
           super();
       }
    }
 
   public static class Criterion implements Serializable {
       private String condition;
 
       private Object value;
 
       private Object secondValue;
 
       private boolean noValue;
 
       private boolean singleValue;
 
       private boolean betweenValue;
 
       private boolean listValue;
 
       private String typeHandler;
 
       public String getCondition() {
           return condition;
       }
 
       public Object getValue() {
           return value;
       }
 
       public Object getSecondValue() {
           return secondValue;
       }
 
       public boolean isNoValue() {
           return noValue;
       }
 
       public boolean isSingleValue() {
           return singleValue;
       }
 
       public boolean isBetweenValue() {
           return betweenValue;
       }
 
       public boolean isListValue() {
           return listValue;
       }
 
       public String getTypeHandler() {
           return typeHandler;
       }
 
       protected Criterion(Stringcondition) {
           super();
           this.condition = condition;
           this.typeHandler = null;
           this.noValue = true;
       }
 
       protected Criterion(String condition, Object value, String typeHandler){
           super();
           this.condition = condition;
           this.value = value;
           this.typeHandler = typeHandler;
           if (value instanceof List) {
                this.listValue = true;
           } else {
                this.singleValue = true;
           }
       }
 
       protected Criterion(String condition, Object value) {
           this(condition, value, null);
       }
 
       protected Criterion(String condition, Object value, Object secondValue,String typeHandler) {
           super();
           this.condition = condition;
           this.value = value;
           this.secondValue = secondValue;
           this.typeHandler = typeHandler;
           this.betweenValue = true;
       }
 
       protected Criterion(String condition, Object value, Object secondValue){
           this(condition, value, secondValue, null);
       }
    }
}

 

------------------------

 

Service部分

 

-----------------------------

 

package com.vivebest.service;
 
import com.vivebest.entity.UpmsLog;
import com.vivebest.entity.UpmsLogExample;
import com.vivebest.util.BaseService;
 
public interface CustomerService extendsBaseService {
 
   long countByExampleB(UpmsLogExample example);
 
   int deleteByExampleB(UpmsLogExample example);
}

 

-------------------------------

 

package com.vivebest.service.impl;
 
import com.vivebest.annotation.BaseService;
import com.vivebest.dao.UpmsLogMapper;
import com.vivebest.entity.UpmsLog;
import com.vivebest.entity.UpmsLogExample;
importcom.vivebest.service.CustomerService;
import com.vivebest.util.BaseServiceImpl;
importorg.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
@BaseService
public class CustomerServiceImpl extendsBaseServiceImpl implementsCustomerService{
 
   @Autowired
   private UpmsLogMapper upmsLogMapper;
 
   @Override
   public long countByExampleB(UpmsLogExample example) {
       return upmsLogMapper.countByExampleB(example);
    }
 
   @Override
   public int deleteByExampleB(UpmsLogExample example) {
       return upmsLogMapper.deleteByExampleB(example);
    }
 
}

 

------------------------------

 

Util部分

 

---------------------------

 

package com.vivebest.util;
 
import com.vivebest.annotation.BaseService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
importorg.springframework.context.event.ContextRefreshedEvent;
import java.lang.reflect.Method;
import java.util.Map;
 
/**
 *spring容器初始化完成事件
 *Created by shuzheng on 2017/1/7.
 */
public class ApplicationContextListenerimplements ApplicationListener {
 
   private static Logger _log =LoggerFactory.getLogger(ApplicationContextListener.class);
 
   @Override
   public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent){
       // root application context
       if(null == contextRefreshedEvent.getApplicationContext().getParent()) {
           _log.debug(">>>>> spring初始化完毕<<<<<");
           // spring初始化完毕后,通过反射调用所有使用BaseService注解的initMapper方法
           Map baseServices =contextRefreshedEvent.getApplicationContext().getBeansWithAnnotation(BaseService.class);
           for(Object service : baseServices.values()) {
               _log.debug(">>>>> {}.initMapper()",service.getClass().getName());
                try {
                    Method initMapper =service.getClass().getMethod("initMapper");
                    initMapper.invoke(service);
                } catch (Exception e) {
                   _log.error("初始化BaseService的initMapper方法异常",e);
                    e.printStackTrace();
                }
           }
 
           // 系统入口初始化
           Map baseInterfaceBeans =contextRefreshedEvent.getApplicationContext().getBeansOfType(BaseInterface.class);
           for(Object service : baseInterfaceBeans.values()) {
               _log.debug(">>>>> {}.init()",service.getClass().getName());
                try {
                    Method init =service.getClass().getMethod("init");
                    init.invoke(service);
                } catch (Exception e) {
                    _log.error("初始化BaseInterface的init方法异常",e);
                    e.printStackTrace();
                }
           }
 
       }
    }
 
}

 

----------------------------

 

package com.vivebest.util;
 
/**
 * 系统接口
 *Created by ZhangShuzheng on 2017/6/13.
 */
public interface BaseInterface {
 
         //系统初始化
         voidinit();
 
}

 

---------------------------

 

package com.vivebest.util;
 
import org.apache.ibatis.annotations.Param;
 
import java.util.List;
 
/**
 *BaseService接口
 *Created by ZhangShuzheng on 2017/01/07.
 */
public interface BaseService {
 
         intcountByExample(Example example);
 
         intdeleteByExample(Example example);
 
         intdeleteByPrimaryKey(Integer id);
 
         intinsert(Record record);
 
         intinsertSelective(Record record);
 
         ListselectByExampleWithBLOBs(Example example);
 
         ListselectByExample(Example example);
 
         ListselectByExampleWithBLOBsForStartPage(Example example, Integer pageNum, IntegerpageSize);
 
         ListselectByExampleForStartPage(Example example, Integer pageNum, IntegerpageSize);
 
         ListselectByExampleWithBLOBsForOffsetPage(Example example, Integer offset, Integerlimit);
 
         ListselectByExampleForOffsetPage(Example example, Integer offset, Integer limit);
 
         RecordselectFirstByExample(Example example);
 
         RecordselectFirstByExampleWithBLOBs(Example example);
 
         RecordselectByPrimaryKey(Integer id);
 
         intupdateByExampleSelective(@Param("record") Record record,@Param("example") Example example);
 
         intupdateByExampleWithBLOBs(@Param("record") Record record,@Param("example") Example example);
 
         intupdateByExample(@Param("record") Record record, @Param("example")Example example);
 
         intupdateByPrimaryKeySelective(Record record);
 
         intupdateByPrimaryKeyWithBLOBs(Record record);
 
         intupdateByPrimaryKey(Record record);
 
         intdeleteByPrimaryKeys(String ids);
 
         voidinitMapper();
 
}

 

----------------------------

 

package com.vivebest.util;
 
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.annotations.Param;
importjava.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.util.List;
 
/**
 * 实现BaseService抽象类
 *Created by ZhangShuzheng on 2017/01/07.
 */
public abstract classBaseServiceImpl implementsBaseService {
 
         publicMapper mapper;
 
         @Override
         publicint countByExample(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodcountByExample =mapper.getClass().getDeclaredMethod("countByExample",example.getClass());
                            Objectresult = countByExample.invoke(mapper, example);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint deleteByExample(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethoddeleteByExample = mapper.getClass().getDeclaredMethod("deleteByExample",example.getClass());
                            Objectresult = deleteByExample.invoke(mapper, example);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint deleteByPrimaryKey(Integer id) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethoddeleteByPrimaryKey =mapper.getClass().getDeclaredMethod("deleteByPrimaryKey",id.getClass());
                            Objectresult = deleteByPrimaryKey.invoke(mapper, id);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint insert(Record record) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            Methodinsert = mapper.getClass().getDeclaredMethod("insert",record.getClass());
                            Objectresult = insert.invoke(mapper, record);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint insertSelective(Record record) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodinsertSelective = mapper.getClass().getDeclaredMethod("insertSelective",record.getClass());
                            Objectresult = insertSelective.invoke(mapper, record);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicList selectByExampleWithBLOBs(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExampleWithBLOBs =mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs",example.getClass());
                            Objectresult = selectByExampleWithBLOBs.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicList selectByExample(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExample = mapper.getClass().getDeclaredMethod("selectByExample",example.getClass());
                            Objectresult = selectByExample.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicList selectByExampleWithBLOBsForStartPage(Example example, IntegerpageNum, Integer pageSize) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExampleWithBLOBs =mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs",example.getClass());
                            PageHelper.startPage(pageNum,pageSize, false);
                            Objectresult = selectByExampleWithBLOBs.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicList selectByExampleForStartPage(Example example, IntegerpageNum, Integer pageSize) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExample =mapper.getClass().getDeclaredMethod("selectByExample",example.getClass());
                            PageHelper.startPage(pageNum,pageSize, false);
                            Objectresult = selectByExample.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicList selectByExampleWithBLOBsForOffsetPage(Example example,Integer offset, Integer limit) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExampleWithBLOBs =mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs",example.getClass());
                            PageHelper.offsetPage(offset,limit, false);
                            Objectresult = selectByExampleWithBLOBs.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicList selectByExampleForOffsetPage(Example example, Integeroffset, Integer limit) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExample = mapper.getClass().getDeclaredMethod("selectByExample",example.getClass());
                            PageHelper.offsetPage(offset,limit, false);
                            Objectresult = selectByExample.invoke(mapper, example);
                            return(List) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicRecord selectFirstByExample(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExample =mapper.getClass().getDeclaredMethod("selectByExample",example.getClass());
                            Listresult = (List) selectByExample.invoke(mapper, example);
                            if(null != result && result.size() > 0) {
                                     returnresult.get(0);
                            }
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicRecord selectFirstByExampleWithBLOBs(Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByExampleWithBLOBs =mapper.getClass().getDeclaredMethod("selectByExampleWithBLOBs",example.getClass());
                            Listresult = (List) selectByExampleWithBLOBs.invoke(mapper, example);
                            if(null != result && result.size() > 0) {
                                     returnresult.get(0);
                            }
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicRecord selectByPrimaryKey(Integer id) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.SLAVE.getName());
                            MethodselectByPrimaryKey =mapper.getClass().getDeclaredMethod("selectByPrimaryKey",id.getClass());
                            Objectresult = selectByPrimaryKey.invoke(mapper, id);
                            return(Record) result;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   returnnull;
         }
 
         @Override
         publicint updateByExampleSelective(@Param("record") Record record,@Param("example") Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            Method updateByExampleSelective =mapper.getClass().getDeclaredMethod("updateByExampleSelective",record.getClass(), example.getClass());
                            Objectresult = updateByExampleSelective.invoke(mapper, record, example);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint updateByExampleWithBLOBs(@Param("record") Record record,@Param("example") Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodupdateByExampleWithBLOBs = mapper.getClass().getDeclaredMethod("updateByExampleWithBLOBs",record.getClass(), example.getClass());
                            Objectresult = updateByExampleWithBLOBs.invoke(mapper, record, example);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint updateByExample(@Param("record") Record record,@Param("example") Example example) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodupdateByExample =mapper.getClass().getDeclaredMethod("updateByExample",record.getClass(), example.getClass());
                            Objectresult = updateByExample.invoke(mapper, record, example);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint updateByPrimaryKeySelective(Record record) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodupdateByPrimaryKeySelective =mapper.getClass().getDeclaredMethod("updateByPrimaryKeySelective",record.getClass());
                            Objectresult = updateByPrimaryKeySelective.invoke(mapper, record);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                  DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint updateByPrimaryKeyWithBLOBs(Record record) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodupdateByPrimaryKeyWithBLOBs = mapper.getClass().getDeclaredMethod("updateByPrimaryKeyWithBLOBs",record.getClass());
                            Objectresult = updateByPrimaryKeyWithBLOBs.invoke(mapper, record);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint updateByPrimaryKey(Record record) {
                   try{
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            MethodupdateByPrimaryKey =mapper.getClass().getDeclaredMethod("updateByPrimaryKey",record.getClass());
                            Objectresult = updateByPrimaryKey.invoke(mapper, record);
                            returnInteger.parseInt(String.valueOf(result));
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicint deleteByPrimaryKeys(String ids) {
                   try{
                            if(StringUtils.isBlank(ids)) {
                                     return0;
                            }
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getName());
                            String[]idArray = ids.split("-");
                            int count = 0;
                            for(String idStr : idArray) {
                                     if(StringUtils.isBlank(idStr)) {
                                               continue;
                                     }
                                     Integerid = Integer.parseInt(idStr);
                                     MethoddeleteByPrimaryKey =mapper.getClass().getDeclaredMethod("deleteByPrimaryKey",id.getClass());
                                     Objectresult = deleteByPrimaryKey.invoke(mapper, id);
                                     count+= Integer.parseInt(String.valueOf(result));
                            }
                            returncount;
                   }catch (IllegalAccessException e) {
                            e.printStackTrace();
                   }catch (InvocationTargetException e) {
                            e.printStackTrace();
                   }catch (NoSuchMethodException e) {
                            e.printStackTrace();
                   }
                   DynamicDataSource.clearDataSource();
                   return0;
         }
 
         @Override
         publicvoid initMapper() {
                   this.mapper= SpringContextUtil.getBean(getMapperClass());
         }
 
         /**
          * 获取类泛型class
          * @return
          */
         publicClass getMapperClass() {
                   return(Class) ((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
         }
 
}

 

---------------------------

 

package com.vivebest.util;
 
/**
 * 多数据源枚举
 *Created by ZhangShuzheng on 2017/1/15.
 */
public enum DataSourceEnum {
 
         //主库
         MASTER("masterDataSource",true),
         //从库
         SLAVE("slaveDataSource",false),;
 
         //数据源名称
         privateString name;
         //是否是默认数据源
         privateboolean master;
 
         DataSourceEnum(Stringname, boolean master) {
                   this.name= name;
                   this.master= master;
         }
 
         publicString getName() {
                   returnname;
         }
 
         publicvoid setName(String name) {
                   this.name= name;
         }
 
         publicboolean isMaster() {
                   returnmaster;
         }
 
         publicvoid setMaster(boolean master) {
                   this.master= master;
         }
 
         publicString getDefault() {
                   StringdefaultDataSource = "";
                   for(DataSourceEnum dataSourceEnum : DataSourceEnum.values()) {
                            if(!"".equals(defaultDataSource)) {
                                     break;
                            }
                            if(dataSourceEnum.master) {
                                     defaultDataSource= dataSourceEnum.getName();
                            }
                   }
                   returndefaultDataSource;
         }
 
}

 

----------------------------

 

package com.vivebest.util;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
importorg.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 
/**
 * 动态数据源(数据源切换)
 *Created by ZhangShuzheng on 2017/1/15.
 */
public class DynamicDataSource extendsAbstractRoutingDataSource {
 
         privatefinal static Logger _log = LoggerFactory.getLogger(DynamicDataSource.class);
 
         privatestatic final ThreadLocal contextHolder = newThreadLocal<>();
 
         @Override
         protectedObject determineCurrentLookupKey() {
                   StringdataSource = getDataSource();
                   _log.info("当前操作使用的数据源:{}",dataSource);
                   returndataSource;
         }
 
         /**
          * 设置数据源
          * @param dataSource
          */
         publicstatic void setDataSource(String dataSource) {
                   contextHolder.set(dataSource);
         }
 
         /**
          * 获取数据源
          * @return
          */
         publicstatic String getDataSource() {
                   StringdataSource = contextHolder.get();
                   //如果没有指定数据源,使用默认数据源
                   if(null == dataSource) {
                            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getDefault());
                   }
                   returncontextHolder.get();
         }
 
         /**
          * 清除数据源
          */
         publicstatic void clearDataSource() {
                   contextHolder.remove();
         }
 
}

 

---------------------------

 

package com.vivebest.util;
 
importorg.springframework.beans.BeansException;
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.ApplicationContextAware;
 
import java.util.Map;
 
/**
 * 资源文件读取工具
 *
 *@author shuzheng
 *@date 2016年10月15日
 */
public class SpringContextUtil implementsApplicationContextAware {
 
         privatestatic ApplicationContext context = null;
 
         privateSpringContextUtil() {
                   super();
         }
 
         @Override
         publicvoid setApplicationContext(ApplicationContext applicationContext) throwsBeansException {
                   context= applicationContext;
         }
 
         /**
          * 根据名称获取bean
          * @param beanName
          * @return
          */
         publicstatic Object getBean(String beanName) {
                   returncontext.getBean(beanName);
         }
 
         /**
          * 根据bean名称获取指定类型bean
          * @param beanName bean名称
          * @param clazz 返回的bean类型,若类型不匹配,将抛出异常
          */
         publicstatic  T getBean(String beanName, Class clazz) {
                   returncontext.getBean(beanName, clazz);
         }
         /**
          * 根据类型获取bean
          * @param clazz
          * @return
          */
         publicstatic  T getBean(Class clazz) {
                   Tt = null;
                   Map map = context.getBeansOfType(clazz);
                   for(Map.Entry entry : map.entrySet()) {
                            t= entry.getValue();
                   }
                   returnt;
         }
 
         /**
          * 是否包含bean
          * @param beanName
          * @return
          */
         publicstatic boolean containsBean(String beanName) {
                   returncontext.containsBean(beanName);
         }
 
         /**
          * 是否是单例
          * @param beanName
          * @return
          */
         publicstatic boolean isSingleton(String beanName) {
                   returncontext.isSingleton(beanName);
         }
 
         /**
          * bean的类型
          * @param beanName
          * @return
          */
         publicstatic Class getType(String beanName) {
                   returncontext.getType(beanName);
         }
 
}

 

----------------------------