Skip to content

Commit

Permalink
合并项目目录,添加动态数据源
Browse files Browse the repository at this point in the history
  • Loading branch information
ywj committed Dec 24, 2014
1 parent f184bb4 commit 331dba1
Show file tree
Hide file tree
Showing 75 changed files with 1,703 additions and 163 deletions.
4 changes: 4 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="output" path="bin"/>
</classpath>
23 changes: 23 additions & 0 deletions .project
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>fastser-dal-all</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
</projectDescription>
2 changes: 2 additions & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8
2 changes: 2 additions & 0 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
4 changes: 4 additions & 0 deletions .settings/org.eclipse.m2e.core.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
activeProfiles=
eclipse.preferences.version=1
resolveWorkspaceProjects=true
version=1
25 changes: 20 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
fastser-dal
===========

基于mybatis、spring jdbc、hibernate的通用数据该问层,支持基于datasource的读写分离和主备自动切换
本着不重复造轮子的原则,基于mybatis、spring jdbc、hibernate等ORM的通用数据该问层,支持基于datasource的读写分离、主备自动切换和故障转移,支持简单的负载均衡。

# 功能概述

* 基于mybatis、spring jdbc、hibernate等各大orm框架实现通用dal层功能,并与已有项目完全兼容
* 基于mybatis、spring jdbc、hibernate等各大orm框架实现通用dal层功能,并可以与已有项目完全兼容
* 实现dal层cache
* 实现多数据源的读写分离和主备功能
* 实现基于多数据源(datasource)的读写分离、主备切换、故障转移、恢复检测和负载均衡
* 使用该组件必须遵循以下规则:默认字段名称与数据库表字段一致,每张表有名称为id的唯一标识字段


Expand Down Expand Up @@ -42,13 +42,15 @@ fastser-dal

### 与spring集成

动态数据源可以自动处理故障转移和恢复检测,读写分离时多个读库采用随机获取。缓存可以自定义实现,可以统一开启或关闭,方便在开发环境使用。

<!-- 缓存默认实现,可以自定义实现 -->
<bean id="cacheManager" class="org.fastser.dal.cache.support.SimpleCacheManager"></bean>
<!-- 配置缓存 -->
<bean id="cacheManager" class="org.fastser.dal.cache.support.SimpleCacheManager">
<property name="cache" ref="dalRedisCache"></property>
</bean>
<!-- 配置数据源解析器 -->
<!-- 配置数据源解析器 -->
<bean id="resolveDatabase" class="org.fastser.dal.descriptor.db.impl.SimpleResolveDatabase">
<property name="dataSource" ref="dataSource" />
<property name="cacheManager" ref="cacheManager" />
Expand Down Expand Up @@ -89,7 +91,20 @@ fastser-dal
<!-- hibernate实现配置 -->
待实现


<!--可选,动态数据源配置 -->
<bean id="dynamicDataSource" class="org.fastser.dal.datasource.DynamicDataSource">
<!-- 从数据库配置,用于读操作,目前为随机取一个 -->
<property name="slaveDataSources">
<map key-type="java.lang.String">
<entry key="readDataSourceOne" value-ref="dataSource3"/>
<entry key="readDataSourceTwo" value-ref="dataSource4"/>
</map>
</property>
<!-- 主数据库配置 -->
<property name="masterDataSource" ref="dataSource1" />
<!-- 备数据库配置 -->
<property name="standbyDataSource" ref="dataSource2" />
</bean>
## 使用示例

### 1 现有方法
Expand Down
1 change: 1 addition & 0 deletions fastser-dal-mybatis/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#fastser-dal-mybatis
60 changes: 60 additions & 0 deletions fastser-dal-mybatis/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.fastser</groupId>
<artifactId>fastser-dal-root</artifactId>
<version>1.0.2</version>
</parent>

<artifactId>fastser-dal-mybatis</artifactId>


<name>fastser-dal-mybatis</name>
<url>http://maven.apache.org</url>

<dependencies>

<dependency>
<groupId>org.fastser</groupId>
<artifactId>fastser-dal</artifactId>
<version>1.0.1</version>
</dependency>



<!-- =================================================== -->
<!-- mybatis -->
<!-- =================================================== -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.2</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.1.1</version>
</dependency>

<!-- ==================== -->
<!-- 测试 -->
<!-- ==================== -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>


</dependencies>

</project>
3 changes: 3 additions & 0 deletions fastser-dal-mybatis/src/main/java/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Class-Path:

13 changes: 13 additions & 0 deletions fastser-dal-mybatis/src/main/java/org/fastser/dal/mybatis/App.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package org.fastser.dal.mybatis;

/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
System.out.println( "Hello World!" );
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
package org.fastser.dal.mybatis;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.SelectKey;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import org.apache.ibatis.mapping.StatementType;
import org.fastser.dal.descriptor.Table;
import org.fastser.dal.mybatis.template.SqlTemplate;

public interface CommonMapper{

/**
* 条件查询
* 自定议显示字段传入 model.params,为空时为所有字段
* 条件传入model.QueryCriteria
* @param model
* @return
*/
@SelectProvider(method = "selectByCriteria", type = SqlTemplate.class)
@ResultType(value = Map.class)
List<Map<String, Object>> selectByCriteria(Table model);

/**
* 新增
* 所有字段传入 model.params,不能为空
* @param model
* @return
*/
//@SelectKey(statement="call identity()", keyProperty="id", before=false, resultType=int.class)
@InsertProvider(method = "insert", type = SqlTemplate.class)
@SelectKey(before=false,keyProperty="params.id",resultType=int.class,statementType=StatementType.STATEMENT,statement="SELECT LAST_INSERT_ID() AS id")
int insert(Table model);

/**
* 条件删除
* 条件传入model.QueryCriteria
* @param model
* @return
*/
@DeleteProvider(method = "deleteByCriteria", type = SqlTemplate.class)
int deleteByCriteria(Table model);

/**
* 条件更新
* 更新字段传入 model.params,不能为空
* 条件传入model.QueryCriteria
* @param model
* @return
*/
@UpdateProvider(method = "updateByCriteria", type = SqlTemplate.class)
int updateByCriteria(Table model);

/**
* 主键查询
* 自定议显示字段传入 model.params,为空时为所有字段
* 主键参数传入 model.conditions,不能为空
* @param model
* @return
*/
@SelectProvider(method = "selectByPrimaryKey", type = SqlTemplate.class)
@ResultType(value = Map.class)
Map<String, Object> selectByPrimaryKey(Table model);

/**
* 主键删除
* 主键参数传入 model.conditions,不能为空
* @param model
* @return
*/
@DeleteProvider(method = "deleteByPrimaryKey", type = SqlTemplate.class)
int deleteByPrimaryKey(Table model);

/**
* 主键更新
* 更新字段传入 model.params,不能为空
* 主键参数传入 model.conditions,不能为空
* @param model
* @return
*/
@UpdateProvider(method = "updateByPrimaryKey", type = SqlTemplate.class)
int updateByPrimaryKey(Table model);

/**
* 条件count
* 条件传入model.QueryCriteria
* @param model
* @return
*/
@SelectProvider(method = "countByCriteria", type = SqlTemplate.class)
@ResultType(value = Integer.class)
int countByCriteria(Table model);






}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package org.fastser.dal.mybatis;

import java.util.List;
import java.util.Map;

import org.fastser.dal.core.AbstractBaseDAL;
import org.fastser.dal.core.BaseDAL;
import org.fastser.dal.criteria.QueryCriteria;
import org.fastser.dal.descriptor.QueryResult;
import org.fastser.dal.descriptor.Table;

public class MybatisDAL extends AbstractBaseDAL implements BaseDAL {

private CommonMapper commonMapper;

public void setCommonMapper(CommonMapper commonMapper) {
this.commonMapper = commonMapper;
}


@Override
public List<Map<String, Object>> _selectByCriteria(Table table) {
return commonMapper.selectByCriteria(table);
}

@Override
public int _countByCriteria(Table table) {
return commonMapper.countByCriteria(table);
}

@Override
public Map<String, Object> _selectByPrimaryKey(Table table) {
return commonMapper.selectByPrimaryKey(table);
}

@Override
public int _insert(Table table) {
return commonMapper.insert(table);
}

@Override
public int _updateByCriteria(Table table) {
return commonMapper.updateByCriteria(table);
}

@Override
public int _updateByPrimaryKey(Table table) {
return commonMapper.updateByPrimaryKey(table);
}

@Override
public int _deleteByPrimaryKey(Table table) {
return commonMapper.deleteByPrimaryKey(table);
}

@Override
public int _deleteByCriteria(Table table) {
return commonMapper.deleteByCriteria(table);
}






}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package org.fastser.dal.mybatis.resolver;

import org.fastser.dal.descriptor.Column;
import org.fastser.dal.descriptor.resolver.FieldSqlGenerator;

public class MybatisFieldSqlGenerator implements FieldSqlGenerator {

@Override
public String buildSingleSql(Column field) {
String javaType = MybatisJavaTypeResolver.calculateJavaType(field.getJdbcType());
return javaType;
}



}
Loading

0 comments on commit 331dba1

Please sign in to comment.