读写分离 spring - wtdig/study GitHub Wiki
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.wtdig</groupId>
<artifactId>mysqlWriteRead</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>mysqlWriteRead Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- spring版本号 -->
<spring.version>4.3.5.RELEASE</spring.version>
<!-- mybatis版本号 -->
<mybatis.version>3.4.1</mybatis.version>
</properties>
<dependencies>
<!-- java ee -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 实现slf4j接口并整合 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.2</version>
</dependency>
<!-- JSON -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.7</version>
</dependency>
<!-- 数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
<scope>runtime</scope>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- mybatis/spring整合包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--aop-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
</dependencies>
<build>
<finalName>mysqlWriteRead</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 设置JDK版本 -->
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
新建code_generator 、much_test两个数据库,分别在2个数据库中执行下面的sql语句:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `code_generator_demo`
-- ----------------------------
DROP TABLE IF EXISTS `code_generator_demo`;
CREATE TABLE `code_generator_demo` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`is_deleted` char(1) DEFAULT 'n' COMMENT '是否被删除',
`gmt_create` datetime DEFAULT NULL COMMENT '创建时间',
`creator` varchar(32) DEFAULT NULL COMMENT '创建人',
`gmt_modified` datetime DEFAULT NULL COMMENT '修改时间',
`modifier` varchar(32) DEFAULT NULL COMMENT '修改人',
`sex` varchar(128) NOT NULL COMMENT '性别',
`name` varchar(192) NOT NULL COMMENT '名字',
`remark` varchar(1024) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8 COMMENT='coa生成规则头';
结构如下:
resources
mapper
CodeGeneratorDemoMapper.xml
CodeGeneratorDemoMapperExt.xml
jdbc.properties
logback.xml
spring-mybatis.xml
mapper文件夹下的CodeGeneratorDemoMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wtdig.dao.CodeGeneratorDemoMapper">
<resultMap id="BaseResultMap" type="com.wtdig.domain.CodeGeneratorDemo">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<id column="id" jdbcType="BIGINT" property="id" />
<result column="is_deleted" jdbcType="CHAR" property="isDeleted" />
<result column="gmt_create" jdbcType="TIMESTAMP" property="gmtCreate" />
<result column="creator" jdbcType="VARCHAR" property="creator" />
<result column="gmt_modified" jdbcType="TIMESTAMP" property="gmtModified" />
<result column="modifier" jdbcType="VARCHAR" property="modifier" />
<result column="sex" jdbcType="VARCHAR" property="sex" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="remark" jdbcType="VARCHAR" property="remark" />
</resultMap>
<sql id="Example_Where_Clause">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<if test="valid">
<foreach close=")" collection="oredCriteria" item="criteria" open="and (" separator="or">
<if test="criteria.valid">
<trim prefix="(" prefixOverrides="and" suffix=")">
<foreach collection="criteria.criteria" item="criterion">
<choose>
<when test="criterion.noValue">
and ${criterion.condition}
</when>
<when test="criterion.singleValue">
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue">
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue">
and ${criterion.condition}
<foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</if>
</sql>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
id, is_deleted, gmt_create, creator, gmt_modified, modifier, sex, name, remark
</sql>
<select id="selectByExample" parameterType="com.wtdig.domain.CodeGeneratorDemoExample" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select
<if test="distinct">
distinct
</if>
<include refid="Base_Column_List" />
from code_generator_demo
where is_deleted = 'n'
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
<if test="orderByClause != null">
order by ${orderByClause}
</if>
<include refid="MysqlPagination" />
</select>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select
<include refid="Base_Column_List" />
from code_generator_demo
where id = #{id,jdbcType=BIGINT}
and is_deleted = 'n'
</select>
<update id="deleteByPrimaryKey" parameterType="com.wtdig.domain.CodeGeneratorDemo">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
update code_generator_demo set is_deleted = 'y',modifier=#{modifier,jdbcType=VARCHAR},gmt_modified=#{gmtModified,jdbcType=TIMESTAMP} where id = #{id,jdbcType=INTEGER}
</update>
<insert id="insertMapSelective" keyColumn="id" keyProperty="id" parameterType="java.util.Map" useGeneratedKeys="true">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<include refid="Insert_Column" />
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.wtdig.domain.CodeGeneratorDemo" useGeneratedKeys="true">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<include refid="Insert_Column" />
</insert>
<select id="countByExample" parameterType="com.wtdig.domain.CodeGeneratorDemoExample" resultType="java.lang.Long">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
select count(*) from code_generator_demo
where is_deleted = 'n'
<if test="_parameter != null">
<include refid="Example_Where_Clause" />
</if>
</select>
<update id="updateByPrimaryKeySelective" parameterType="com.wtdig.domain.CodeGeneratorDemo">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
update code_generator_demo
<set>
<if test="gmtModified != null">
gmt_modified = #{gmtModified,jdbcType=TIMESTAMP},
</if>
<if test="modifier != null">
modifier = #{modifier,jdbcType=VARCHAR},
</if>
<if test="sex != null">
sex = #{sex,jdbcType=VARCHAR},
</if>
<if test="name != null">
name = #{name,jdbcType=VARCHAR},
</if>
<if test="remark != null">
remark = #{remark,jdbcType=VARCHAR},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
and is_deleted = 'n'
</update>
<sql id="Insert_Column">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
insert into code_generator_demo
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="isDeleted != null">
is_deleted,
</if>
<if test="gmtCreate != null">
gmt_create,
</if>
<if test="creator != null">
creator,
</if>
<if test="gmtModified != null">
gmt_modified,
</if>
<if test="modifier != null">
modifier,
</if>
<if test="sex != null">
sex,
</if>
<if test="name != null">
name,
</if>
<if test="remark != null">
remark,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="isDeleted != null">
#{isDeleted,jdbcType=CHAR},
</if>
<if test="gmtCreate != null">
#{gmtCreate,jdbcType=TIMESTAMP},
</if>
<if test="creator != null">
#{creator,jdbcType=VARCHAR},
</if>
<if test="gmtModified != null">
#{gmtModified,jdbcType=TIMESTAMP},
</if>
<if test="modifier != null">
#{modifier,jdbcType=VARCHAR},
</if>
<if test="sex != null">
#{sex,jdbcType=VARCHAR},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="remark != null">
#{remark,jdbcType=VARCHAR},
</if>
</trim>
</sql>
<sql id="MysqlPagination">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<if test="page != null">
<![CDATA[ limit #{page.begin}, #{page.length} ]]>
</if>
</sql>
</mapper>
mapper文件夹下的CodeGeneratorDemoMapperExt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wtdig.dao.CodeGeneratorDemoMapperExt" >
<insert id="myInsert" keyColumn="id" keyProperty="id" parameterType="com.wtdig.domain.CodeGeneratorDemo" useGeneratedKeys="true">
INSERT INTO
code_generator_demo(is_deleted,sex,name,remark)
VALUES("N","N","WTDIG","TEST")
</insert>
</mapper>
jdbc.properties
#数据源1
jdbc.driver=com.mysql.jdbc.Driver
#数据库地址
jdbc.url=jdbc:mysql://localhost:3306/code_generator?useUnicode=true&characterEncoding=utf8
#用户名
jdbc.username=root
#密码
jdbc.password=root
#最大连接数
c3p0.maxPoolSize=30
#最小连接数
c3p0.minPoolSize=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose=false
#获取连接超时时间
c3p0.checkoutTimeout=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts=2
#数据源2
jdbc.driver1=com.mysql.jdbc.Driver
#数据库地址
jdbc.url1=jdbc:mysql://localhost:3306/much_test?useUnicode=true&characterEncoding=utf8
#用户名
jdbc.username1=root
#密码
jdbc.password1=root
#最大连接数
c3p0.maxPoolSize1=30
#最小连接数
c3p0.minPoolSize1=10
#关闭连接后不自动commit
c3p0.autoCommitOnClose1=false
#获取连接超时时间
c3p0.checkoutTimeout1=10000
#当获取连接失败重试次数
c3p0.acquireRetryAttempts1=2
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
spring-mybatis.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="com.wtdig.service"/>
<!-- 配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 数据库连接池 -->
<bean id="dataSource1" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
</bean>
<!-- 数据库连接池 -->
<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver1}"/>
<property name="jdbcUrl" value="${jdbc.url1}"/>
<property name="user" value="${jdbc.username1}"/>
<property name="password" value="${jdbc.password1}"/>
<property name="maxPoolSize" value="${c3p0.maxPoolSize1}"/>
<property name="minPoolSize" value="${c3p0.minPoolSize1}"/>
<property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose1}"/>
<property name="checkoutTimeout" value="${c3p0.checkoutTimeout1}"/>
<property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts1}"/>
</bean>
<!-- 配置多数据源映射关系 -->
<bean id="dataSource" class="com.wtdig.utils.DynamicDataSource">
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry key="dataSource1" value-ref="dataSource1"></entry>
<entry key="dataSource2" value-ref="dataSource2"></entry>
</map>
</property>
<!-- 默认目标数据源为你主库数据源 -->
<property name="defaultTargetDataSource" ref="dataSource1"/>
</bean>
<!-- 配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 扫描model包 使用别名 -->
<!--<property name="typeAliasesPackage" value="com.wtdig.domain"/>-->
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="com.wtdig.dao"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean id="dataSourceAspect" class="com.wtdig.utils.DataSourceAspect"/>
<aop:config>
<aop:aspect id="c" ref="dataSourceAspect">
<aop:pointcut id="tx" expression="execution(* com.wtdig.service..*.*(..))"/>
<aop:before pointcut-ref="tx" method="before"/>
</aop:aspect>
</aop:config>
</beans>
结构如下:
com.wtdig
dao
domain
page
service
utils
dao
package com.wtdig.dao;
import com.wtdig.domain.CodeGeneratorDemo;
import com.wtdig.domain.CodeGeneratorDemoExample;
import java.util.List;
public interface CodeGeneratorDemoMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
long countByExample(CodeGeneratorDemoExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
int deleteByPrimaryKey(CodeGeneratorDemo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
int insertMapSelective(java.util.Map<String, Object> record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
int insertSelective(CodeGeneratorDemo record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
List<CodeGeneratorDemo> selectByExample(CodeGeneratorDemoExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
CodeGeneratorDemo selectByPrimaryKey(Long id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
int updateByPrimaryKeySelective(CodeGeneratorDemo record);
}
package com.wtdig.dao;
import com.wtdig.domain.CodeGeneratorDemo;
import javax.annotation.Resource;
@Resource
public interface CodeGeneratorDemoMapperExt extends CodeGeneratorDemoMapper {
/**
* 自定义方式的插入
*
* @param record
*/
public void myInsert(CodeGeneratorDemo record);
}
domain
package com.wtdig.domain;
import java.io.Serializable;
import java.util.Date;
public class BaseModel implements Serializable{
public static final String YES = "y", NO = "n";
public static final String IS_DELETED = "isDeleted";
public static final String CREATOR = "creator";
public static final String MODIFIER = "modifier";
public static final String GMT_MODIFIED = "gmtModified";
public static final String GMT_CREATE = "gmtCreate";
protected Long id;
protected String isDeleted;
protected String creator;
protected String modifier;
protected Date gmtModified;
protected Date gmtCreate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getIsDeleted() {
return isDeleted;
}
public void setIsDeleted(String isDeleted) {
this.isDeleted = isDeleted;
}
public String getCreator() {
return creator;
}
public void setCreator(String creator) {
this.creator = creator;
}
public String getModifier() {
return modifier;
}
public void setModifier(String modifier) {
this.modifier = modifier;
}
public Date getGmtModified() {
return gmtModified;
}
public void setGmtModified(Date gmtModified) {
this.gmtModified = gmtModified;
}
public Date getGmtCreate() {
return gmtCreate;
}
public void setGmtCreate(Date gmtCreate) {
this.gmtCreate = gmtCreate;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(" [id=");
builder.append(id);
builder.append(", isDeleted=");
builder.append(isDeleted);
builder.append(", creator=");
builder.append(creator);
builder.append(", modifier=");
builder.append(modifier);
builder.append(", gmtModified=");
builder.append(gmtModified);
builder.append(", gmtCreate=");
builder.append(gmtCreate);
builder.append("]");
return builder.toString();
}
}
package com.wtdig.domain;
public class CodeGeneratorDemo extends BaseModel {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column code_generator_demo.sex
*
* @mbg.generated
*/
private String sex;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column code_generator_demo.name
*
* @mbg.generated
*/
private String name;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column code_generator_demo.remark
*
* @mbg.generated
*/
private String remark;
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column code_generator_demo.sex
*
* @return the value of code_generator_demo.sex
*
* @mbg.generated
*/
public String getSex() {
return sex;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column code_generator_demo.sex
*
* @param sex the value for code_generator_demo.sex
*
* @mbg.generated
*/
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column code_generator_demo.name
*
* @return the value of code_generator_demo.name
*
* @mbg.generated
*/
public String getName() {
return name;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column code_generator_demo.name
*
* @param name the value for code_generator_demo.name
*
* @mbg.generated
*/
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method returns the value of the database column code_generator_demo.remark
*
* @return the value of code_generator_demo.remark
*
* @mbg.generated
*/
public String getRemark() {
return remark;
}
/**
* This method was generated by MyBatis Generator.
* This method sets the value of the database column code_generator_demo.remark
*
* @param remark the value for code_generator_demo.remark
*
* @mbg.generated
*/
public void setRemark(String remark) {
this.remark = remark == null ? null : remark.trim();
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", sex=").append(sex);
sb.append(", name=").append(name);
sb.append(", remark=").append(remark);
sb.append("]");
sb.append(", from super class ");
sb.append(super.toString());
return sb.toString();
}
}
package com.wtdig.domain;
import com.wtdig.page.Page;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class CodeGeneratorDemoExample {
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected String orderByClause;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected boolean distinct;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected List<Criteria> oredCriteria;
/**
* This field was generated by MyBatis Generator.
* This field corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected Page page;
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public CodeGeneratorDemoExample() {
oredCriteria = new ArrayList<Criteria>();
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public void setOrderByClause(String orderByClause) {
this.orderByClause = orderByClause;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public String getOrderByClause() {
return orderByClause;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public void setDistinct(boolean distinct) {
this.distinct = distinct;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public boolean isDistinct() {
return distinct;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public List<Criteria> getOredCriteria() {
return oredCriteria;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public void or(Criteria criteria) {
oredCriteria.add(criteria);
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public Criteria or() {
Criteria criteria = createCriteriaInternal();
oredCriteria.add(criteria);
return criteria;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public Criteria createCriteria() {
Criteria criteria = createCriteriaInternal();
if (oredCriteria.size() == 0) {
oredCriteria.add(criteria);
}
return criteria;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected Criteria createCriteriaInternal() {
Criteria criteria = new Criteria();
return criteria;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public void clear() {
oredCriteria.clear();
orderByClause = null;
distinct = false;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public void setPage(Page page) {
this.page = page;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public Page getPage() {
return page;
}
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public boolean isValid() {
if (oredCriteria.isEmpty()) {
return false;
}
for (Criteria criteria : oredCriteria) {
if (criteria.isValid()) {
return true;
}
}
return false;
}
/**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value1, value2));
}
public Criteria andIdIsNull() {
addCriterion("id is null");
return (Criteria) this;
}
public Criteria andIdIsNotNull() {
addCriterion("id is not null");
return (Criteria) this;
}
public Criteria andIdEqualTo(Long value) {
addCriterion("id =", value, "id");
return (Criteria) this;
}
public Criteria andIdNotEqualTo(Long value) {
addCriterion("id <>", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThan(Long value) {
addCriterion("id >", value, "id");
return (Criteria) this;
}
public Criteria andIdGreaterThanOrEqualTo(Long value) {
addCriterion("id >=", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThan(Long value) {
addCriterion("id <", value, "id");
return (Criteria) this;
}
public Criteria andIdLessThanOrEqualTo(Long value) {
addCriterion("id <=", value, "id");
return (Criteria) this;
}
public Criteria andIdIn(List<Long> values) {
addCriterion("id in", values, "id");
return (Criteria) this;
}
public Criteria andIdNotIn(List<Long> values) {
addCriterion("id not in", values, "id");
return (Criteria) this;
}
public Criteria andIdBetween(Long value1, Long value2) {
addCriterion("id between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIdNotBetween(Long value1, Long value2) {
addCriterion("id not between", value1, value2, "id");
return (Criteria) this;
}
public Criteria andIsDeletedIsNull() {
addCriterion("is_deleted is null");
return (Criteria) this;
}
public Criteria andIsDeletedIsNotNull() {
addCriterion("is_deleted is not null");
return (Criteria) this;
}
public Criteria andIsDeletedEqualTo(String value) {
addCriterion("is_deleted =", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedNotEqualTo(String value) {
addCriterion("is_deleted <>", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedGreaterThan(String value) {
addCriterion("is_deleted >", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedGreaterThanOrEqualTo(String value) {
addCriterion("is_deleted >=", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedLessThan(String value) {
addCriterion("is_deleted <", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedLessThanOrEqualTo(String value) {
addCriterion("is_deleted <=", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedLike(String value) {
addCriterion("is_deleted like", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedNotLike(String value) {
addCriterion("is_deleted not like", value, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedIn(List<String> values) {
addCriterion("is_deleted in", values, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedNotIn(List<String> values) {
addCriterion("is_deleted not in", values, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedBetween(String value1, String value2) {
addCriterion("is_deleted between", value1, value2, "isDeleted");
return (Criteria) this;
}
public Criteria andIsDeletedNotBetween(String value1, String value2) {
addCriterion("is_deleted not between", value1, value2, "isDeleted");
return (Criteria) this;
}
public Criteria andGmtCreateIsNull() {
addCriterion("gmt_create is null");
return (Criteria) this;
}
public Criteria andGmtCreateIsNotNull() {
addCriterion("gmt_create is not null");
return (Criteria) this;
}
public Criteria andGmtCreateEqualTo(Date value) {
addCriterion("gmt_create =", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateNotEqualTo(Date value) {
addCriterion("gmt_create <>", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateGreaterThan(Date value) {
addCriterion("gmt_create >", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateGreaterThanOrEqualTo(Date value) {
addCriterion("gmt_create >=", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateLessThan(Date value) {
addCriterion("gmt_create <", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateLessThanOrEqualTo(Date value) {
addCriterion("gmt_create <=", value, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateIn(List<Date> values) {
addCriterion("gmt_create in", values, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateNotIn(List<Date> values) {
addCriterion("gmt_create not in", values, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateBetween(Date value1, Date value2) {
addCriterion("gmt_create between", value1, value2, "gmtCreate");
return (Criteria) this;
}
public Criteria andGmtCreateNotBetween(Date value1, Date value2) {
addCriterion("gmt_create not between", value1, value2, "gmtCreate");
return (Criteria) this;
}
public Criteria andCreatorIsNull() {
addCriterion("creator is null");
return (Criteria) this;
}
public Criteria andCreatorIsNotNull() {
addCriterion("creator is not null");
return (Criteria) this;
}
public Criteria andCreatorEqualTo(String value) {
addCriterion("creator =", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorNotEqualTo(String value) {
addCriterion("creator <>", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorGreaterThan(String value) {
addCriterion("creator >", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorGreaterThanOrEqualTo(String value) {
addCriterion("creator >=", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorLessThan(String value) {
addCriterion("creator <", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorLessThanOrEqualTo(String value) {
addCriterion("creator <=", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorLike(String value) {
addCriterion("creator like", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorNotLike(String value) {
addCriterion("creator not like", value, "creator");
return (Criteria) this;
}
public Criteria andCreatorIn(List<String> values) {
addCriterion("creator in", values, "creator");
return (Criteria) this;
}
public Criteria andCreatorNotIn(List<String> values) {
addCriterion("creator not in", values, "creator");
return (Criteria) this;
}
public Criteria andCreatorBetween(String value1, String value2) {
addCriterion("creator between", value1, value2, "creator");
return (Criteria) this;
}
public Criteria andCreatorNotBetween(String value1, String value2) {
addCriterion("creator not between", value1, value2, "creator");
return (Criteria) this;
}
public Criteria andGmtModifiedIsNull() {
addCriterion("gmt_modified is null");
return (Criteria) this;
}
public Criteria andGmtModifiedIsNotNull() {
addCriterion("gmt_modified is not null");
return (Criteria) this;
}
public Criteria andGmtModifiedEqualTo(Date value) {
addCriterion("gmt_modified =", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedNotEqualTo(Date value) {
addCriterion("gmt_modified <>", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedGreaterThan(Date value) {
addCriterion("gmt_modified >", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedGreaterThanOrEqualTo(Date value) {
addCriterion("gmt_modified >=", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedLessThan(Date value) {
addCriterion("gmt_modified <", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedLessThanOrEqualTo(Date value) {
addCriterion("gmt_modified <=", value, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedIn(List<Date> values) {
addCriterion("gmt_modified in", values, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedNotIn(List<Date> values) {
addCriterion("gmt_modified not in", values, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedBetween(Date value1, Date value2) {
addCriterion("gmt_modified between", value1, value2, "gmtModified");
return (Criteria) this;
}
public Criteria andGmtModifiedNotBetween(Date value1, Date value2) {
addCriterion("gmt_modified not between", value1, value2, "gmtModified");
return (Criteria) this;
}
public Criteria andModifierIsNull() {
addCriterion("modifier is null");
return (Criteria) this;
}
public Criteria andModifierIsNotNull() {
addCriterion("modifier is not null");
return (Criteria) this;
}
public Criteria andModifierEqualTo(String value) {
addCriterion("modifier =", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierNotEqualTo(String value) {
addCriterion("modifier <>", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierGreaterThan(String value) {
addCriterion("modifier >", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierGreaterThanOrEqualTo(String value) {
addCriterion("modifier >=", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierLessThan(String value) {
addCriterion("modifier <", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierLessThanOrEqualTo(String value) {
addCriterion("modifier <=", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierLike(String value) {
addCriterion("modifier like", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierNotLike(String value) {
addCriterion("modifier not like", value, "modifier");
return (Criteria) this;
}
public Criteria andModifierIn(List<String> values) {
addCriterion("modifier in", values, "modifier");
return (Criteria) this;
}
public Criteria andModifierNotIn(List<String> values) {
addCriterion("modifier not in", values, "modifier");
return (Criteria) this;
}
public Criteria andModifierBetween(String value1, String value2) {
addCriterion("modifier between", value1, value2, "modifier");
return (Criteria) this;
}
public Criteria andModifierNotBetween(String value1, String value2) {
addCriterion("modifier not between", value1, value2, "modifier");
return (Criteria) this;
}
public Criteria andSexIsNull() {
addCriterion("sex is null");
return (Criteria) this;
}
public Criteria andSexIsNotNull() {
addCriterion("sex is not null");
return (Criteria) this;
}
public Criteria andSexEqualTo(String value) {
addCriterion("sex =", value, "sex");
return (Criteria) this;
}
public Criteria andSexNotEqualTo(String value) {
addCriterion("sex <>", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThan(String value) {
addCriterion("sex >", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThanOrEqualTo(String value) {
addCriterion("sex >=", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThan(String value) {
addCriterion("sex <", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThanOrEqualTo(String value) {
addCriterion("sex <=", value, "sex");
return (Criteria) this;
}
public Criteria andSexLike(String value) {
addCriterion("sex like", value, "sex");
return (Criteria) this;
}
public Criteria andSexNotLike(String value) {
addCriterion("sex not like", value, "sex");
return (Criteria) this;
}
public Criteria andSexIn(List<String> values) {
addCriterion("sex in", values, "sex");
return (Criteria) this;
}
public Criteria andSexNotIn(List<String> values) {
addCriterion("sex not in", values, "sex");
return (Criteria) this;
}
public Criteria andSexBetween(String value1, String value2) {
addCriterion("sex between", value1, value2, "sex");
return (Criteria) this;
}
public Criteria andSexNotBetween(String value1, String value2) {
addCriterion("sex not between", value1, value2, "sex");
return (Criteria) this;
}
public Criteria andNameIsNull() {
addCriterion("name is null");
return (Criteria) this;
}
public Criteria andNameIsNotNull() {
addCriterion("name is not null");
return (Criteria) this;
}
public Criteria andNameEqualTo(String value) {
addCriterion("name =", value, "name");
return (Criteria) this;
}
public Criteria andNameNotEqualTo(String value) {
addCriterion("name <>", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThan(String value) {
addCriterion("name >", value, "name");
return (Criteria) this;
}
public Criteria andNameGreaterThanOrEqualTo(String value) {
addCriterion("name >=", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThan(String value) {
addCriterion("name <", value, "name");
return (Criteria) this;
}
public Criteria andNameLessThanOrEqualTo(String value) {
addCriterion("name <=", value, "name");
return (Criteria) this;
}
public Criteria andNameLike(String value) {
addCriterion("name like", value, "name");
return (Criteria) this;
}
public Criteria andNameNotLike(String value) {
addCriterion("name not like", value, "name");
return (Criteria) this;
}
public Criteria andNameIn(List<String> values) {
addCriterion("name in", values, "name");
return (Criteria) this;
}
public Criteria andNameNotIn(List<String> values) {
addCriterion("name not in", values, "name");
return (Criteria) this;
}
public Criteria andNameBetween(String value1, String value2) {
addCriterion("name between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andNameNotBetween(String value1, String value2) {
addCriterion("name not between", value1, value2, "name");
return (Criteria) this;
}
public Criteria andRemarkIsNull() {
addCriterion("remark is null");
return (Criteria) this;
}
public Criteria andRemarkIsNotNull() {
addCriterion("remark is not null");
return (Criteria) this;
}
public Criteria andRemarkEqualTo(String value) {
addCriterion("remark =", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkNotEqualTo(String value) {
addCriterion("remark <>", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkGreaterThan(String value) {
addCriterion("remark >", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkGreaterThanOrEqualTo(String value) {
addCriterion("remark >=", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkLessThan(String value) {
addCriterion("remark <", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkLessThanOrEqualTo(String value) {
addCriterion("remark <=", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkLike(String value) {
addCriterion("remark like", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkNotLike(String value) {
addCriterion("remark not like", value, "remark");
return (Criteria) this;
}
public Criteria andRemarkIn(List<String> values) {
addCriterion("remark in", values, "remark");
return (Criteria) this;
}
public Criteria andRemarkNotIn(List<String> values) {
addCriterion("remark not in", values, "remark");
return (Criteria) this;
}
public Criteria andRemarkBetween(String value1, String value2) {
addCriterion("remark between", value1, value2, "remark");
return (Criteria) this;
}
public Criteria andRemarkNotBetween(String value1, String value2) {
addCriterion("remark not between", value1, value2, "remark");
return (Criteria) this;
}
}
/**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table code_generator_demo
*
* @mbg.generated do_not_delete_during_merge
*/
public static class Criteria extends GeneratedCriteria {
protected Criteria() {
super();
}
}
/**
* This class was generated by MyBatis Generator.
* This class corresponds to the database table code_generator_demo
*
* @mbg.generated
*/
public static class Criterion {
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(String condition) {
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);
}
}
}
page
package com.wtdig.page;
public class Page {
// 分页查询开始记录位置
private int begin;
// 分页查看下结束位置
private int end;
// 每页显示记录数
private int length;
// 查询结果总记录数
private int count;
// 当前页码
private int current;
// 总共页数
private int total;
public Page() {
}
/**
* 构造函数
*
* @param begin
* @param length
*/
public Page(int begin, int length) {
this.begin = begin;
this.length = length;
this.end = this.begin + this.length;
this.current = (int) Math.floor((this.begin * 1.0d) / this.length) + 1;
}
/**
* @param begin
* @param length
* @param count
*/
public Page(int begin, int length, int count) {
this(begin, length);
this.count = count;
}
/**
* @return the begin
*/
public int getBegin() {
return begin;
}
/**
* @return the end
*/
public int getEnd() {
return end;
}
/**
* @param end the end to set
*/
public void setEnd(int end) {
this.end = end;
}
/**
* @param begin the begin to set
*/
public void setBegin(int begin) {
this.begin = begin;
if (this.length != 0) {
this.current = (int) Math.floor((this.begin * 1.0d) / this.length) + 1;
}
}
/**
* @return the length
*/
public int getLength() {
return length;
}
/**
* @param length the length to set
*/
public void setLength(int length) {
this.length = length;
if (this.begin != 0) {
this.current = (int) Math.floor((this.begin * 1.0d) / this.length) + 1;
}
}
/**
* @return the count
*/
public int getCount() {
return count;
}
/**
* @param count the count to set
*/
public void setCount(int count) {
this.count = count;
this.total = (int) Math.floor((this.count * 1.0d) / this.length);
if (this.count % this.length != 0) {
this.total++;
}
}
/**
* @return the current
*/
public int getCurrent() {
return current;
}
/**
* @param current the current to set
*/
public void setCurrent(int current) {
this.current = current;
}
/**
* @return the total
*/
public int getTotal() {
if (total == 0) {
return 1;
}
return total;
}
/**
* @param total the total to set
*/
public void setTotal(int total) {
this.total = total;
}
}
service
package com.wtdig.service;
import com.wtdig.domain.CodeGeneratorDemo;
import com.wtdig.domain.CodeGeneratorDemoExample;
public interface CodeGeneratorDemoBo extends BaseBo<CodeGeneratorDemo, CodeGeneratorDemoExample> {
}
package com.wtdig.service;
import com.wtdig.domain.BaseModel;
import java.util.List;
/**
* 通用BO
*
* @param <T>
* @param <E>
* @author wenbo.mwb
*/
public interface BaseBo<T extends BaseModel, E> {
/**
* 插入数据
*
* @param record
* @return
*/
int insert(T record);
/**
* 更新数据
*
* @param record
* @return
*/
int updateById(T record);
/**
* 删除数据
*
* @param record
* @return
*/
int deleteById(T record);
/**
* 根据id查询数据
*
* @param id
* @return
*/
T queryById(Long id);
/**
* 根据条件查询多个结果集
*
* @param example
* @return
*/
List<T> queryByExample(E example);
/**
* 根据条件查询记录数
*
* @param example
* @return
*/
long countByExample(E example);
/**
* 根据条件查询一条结果集
*
* @param example
* @return
*/
T queryOneByExample(E example);
}
impl包下的
package com.wtdig.service.impl;
import com.wtdig.dao.CodeGeneratorDemoMapperExt;
import com.wtdig.domain.CodeGeneratorDemo;
import com.wtdig.domain.CodeGeneratorDemoExample;
import com.wtdig.service.CodeGeneratorDemoBo;
import com.wtdig.utils.DataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;
import java.util.List;
@Service("codeGeneratorDemoBo")
public class CodeGeneratorDemoBoImpl implements CodeGeneratorDemoBo {
@Autowired
private CodeGeneratorDemoMapperExt codeGeneratorDemoMapperExt;
@Override
@DataSource("dataSource1")
public int insert(CodeGeneratorDemo record) {
return codeGeneratorDemoMapperExt.insertSelective(record);
}
@Override
public int updateById(CodeGeneratorDemo record) {
validate(record);
return codeGeneratorDemoMapperExt.updateByPrimaryKeySelective(record);
}
@Override
public int deleteById(CodeGeneratorDemo record) {
validate(record);
return codeGeneratorDemoMapperExt.deleteByPrimaryKey(record);
}
@Override
@DataSource("dataSource2")
public CodeGeneratorDemo queryById(Long id) {
return codeGeneratorDemoMapperExt.selectByPrimaryKey(id);
}
@Override
public List<CodeGeneratorDemo> queryByExample(CodeGeneratorDemoExample example) {
return codeGeneratorDemoMapperExt.selectByExample(example);
}
@Override
public long countByExample(CodeGeneratorDemoExample example) {
return codeGeneratorDemoMapperExt.countByExample(example);
}
@Override
public CodeGeneratorDemo queryOneByExample(CodeGeneratorDemoExample example) {
List<CodeGeneratorDemo> list = queryByExample(example);
if (CollectionUtils.isEmpty(list)) {
return null;
}
return list.get(0);
}
private void validate(CodeGeneratorDemo record) {
Assert.notNull(record);
Assert.notNull(record.getId(), "id is null");
}
}
utils
package com.wtdig.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DataSource {
String value();
}
package com.wtdig.utils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import java.lang.reflect.Method;
public class DataSourceAspect {
public void before(JoinPoint point)
{
Object target = point.getTarget();
System.out.println(target.toString());
String method = point.getSignature().getName();
System.out.println(method);
Class<?> classz = target.getClass();
Class<?>[] parameterTypes = ((MethodSignature) point.getSignature())
.getMethod().getParameterTypes();
try {
Method m = classz.getMethod(method, parameterTypes);
System.out.println(m.getName());
if (m != null && m.isAnnotationPresent(DataSource.class)) {
DataSource data = m.getAnnotation(DataSource.class);
DynamicDataSourceHolder.putDataSource(data.value());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.wtdig.utils;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSourceHolder.getDataSouce();
}
}
package com.wtdig.utils;
public class DynamicDataSourceHolder {
public static final ThreadLocal<String> holder = new ThreadLocal<String>();
public static void putDataSource(String name) {
holder.set(name);
}
public static String getDataSouce() {
return holder.get();
}
}
package com.wtdig;
import com.wtdig.domain.CodeGeneratorDemo;
import com.wtdig.service.CodeGeneratorDemoBo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
/**
* @author wb-wt261136
* @version 2018/4/11. 10:41
*/
// 加载spring配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-mybatis.xml"})
public class UserDaoTest {
@Resource
private CodeGeneratorDemoBo codeGeneratorDemoBo;
@Test
public void test1() {
CodeGeneratorDemo demo1 = new CodeGeneratorDemo();
demo1.setName("多数据源");
demo1.setSex("n");
demo1.setRemark("测试多数据源");
codeGeneratorDemoBo.insert(demo1);
CodeGeneratorDemo codeGeneratorDemo = codeGeneratorDemoBo.queryById(28l);
System.out.println(codeGeneratorDemo);
}
}