Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
kim.zkp.quick.orm.session.Session Maven / Gradle / Ivy
/**
* Copyright (c) 2017, ZhuKaipeng 朱开鹏 ([email protected] ).
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package kim.zkp.quick.orm.session;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import javax.sql.DataSource;
import com.xiaoleilu.hutool.io.IORuntimeException;
import com.xiaoleilu.hutool.log.Log;
import com.xiaoleilu.hutool.log.LogFactory;
import kim.zkp.quick.orm.connection.ConnectionProcessor;
import kim.zkp.quick.orm.connection.JDBCConfig;
import kim.zkp.quick.orm.exception.SqlBuilderException;
import kim.zkp.quick.orm.model.Page;
import kim.zkp.quick.orm.sql.SqlInfo;
import kim.zkp.quick.orm.sql.builder.SqlBuilder;
import kim.zkp.quick.orm.sql.builder.SqlBuilderProcessor;
import kim.zkp.quick.orm.table.CreateTable;
/**
* class : Session
* @author : zhukaipeng
* @version : 1.0
* description : Session类似数据源,且提供了一套操作数据库的API
* @see : *
*/
public class Session implements DataBaseManipulation,SqlDataBaseManipulation,FutureDataBaseManipulation,SqlFutureDataBaseManipulation,Transaction {
private static final Log log = LogFactory.get();
private static final Map sessionContainer = new HashMap();
private ConnectionProcessor connectionProcessor;
private ExecutorService futurePool;
private SqlBuilderProcessor sqlBuilderProcessor;
private Session(String jdbcConfigName) {
super();
JDBCConfig jdbcConfig = JDBCConfig.newInstance(jdbcConfigName);
connectionProcessor = new ConnectionProcessor(jdbcConfig);
sqlBuilderProcessor = new SqlBuilderProcessor(jdbcConfig.getDbType());
futurePool = Executors.newFixedThreadPool(jdbcConfig.getAsyncPoolSize());
if (jdbcConfig.getPackagePath()!=null) {
CreateTable createTable = new CreateTable(this,sqlBuilderProcessor,jdbcConfig.getPackagePath());
createTable.start();
}
}
private DataSource getDataSource(){
return connectionProcessor.getDataSource();
}
public static DataSource getDataSource(String jdbcConfigName){
return getSession(jdbcConfigName).getDataSource();
}
/**
* method name : getDefaultSession
* description : 获取jdbc.setting文件配置的Session
* @return : Session
* @param : @return
* modified : zhukaipeng , 2017年9月15日
* @see : *
*/
public static Session getDefaultSession(){
try {
return getSession("jdbc.setting");
} catch (IORuntimeException e) {
log.warn("未配置默认数据源[jdbc.setting]");
return null;
}
}
/**
* method name : getSession
* description : 获取Session
* @return : Session
* @param : @param jdbcName setting配置文件名
* @param : @return
* modified : zhukaipeng , 2017年9月15日
* @see : *
*/
public static Session getSession(String jdbcConfigName){
Session session = sessionContainer.get(jdbcConfigName);
if (session == null) {
session = new Session(jdbcConfigName);
sessionContainer.put(jdbcConfigName, session);
}
return session;
}
@Override
public int save(Object o) {
SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.SAVE, o);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public int delete(Object o) {
SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.DELETE, o);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public int update(Object o) {
SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.UPDATE, o);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public Object get(Object o) {
return this.get(o, o.getClass());
}
@Override
public Object get(Object o,Class> clzz) {
SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.GET, o);
return connectionProcessor.get(getConnection(), sqlInfo,clzz);
}
@Override
public List list(Object o) {
return this.list(o, o.getClass());
}
@Override
public Page page(Object o) {
return page(o,o.getClass());
}
@Override
public Page page(Object o,Class> clzz) {
Map pageInfo = Page.getPageInfo();
if (pageInfo == null || pageInfo.get("pageNum")==null || pageInfo.get("pageSize")==null) {
throw new SqlBuilderException("PageNum or pageSize is null");
}
SqlInfo countSqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.PAGE_COUNT, o);
Integer total = (Integer) connectionProcessor.get(getConnection(), countSqlInfo,Integer.class);
if (total == 0) {
Page page = new Page(pageInfo.get("pageNum"),pageInfo.get("pageSize"), total, new ArrayList<>());
return page;
}
SqlInfo listSqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.PAGE_LIST, o);
List list = connectionProcessor.list(getConnection(), listSqlInfo,clzz);
return new Page(pageInfo.get("pageNum"),pageInfo.get("pageSize"), total, list);
}
@Override
public Page sqlPage(String countSql,String listSql, Class> clzz, Object ... params) {
Map pageInfo = Page.getPageInfo();
if (pageInfo == null || pageInfo.get("pageNum")==null || pageInfo.get("pageSize")==null) {
throw new SqlBuilderException("PageNum or pageSize is null");
}
List paramList = Arrays.asList(params);
SqlInfo countSqlInfo = new SqlInfo(countSql, paramList);
Integer total = (Integer) connectionProcessor.get(getConnection(), countSqlInfo,Integer.class);
if (total == 0) {
Page page = new Page(pageInfo.get("pageNum"),pageInfo.get("pageSize"), total, new ArrayList());
return page;
}
SqlInfo listSqlInfo = new SqlInfo(listSql, paramList);
List list = connectionProcessor.list(getConnection(), listSqlInfo,clzz);
return new Page(pageInfo.get("pageNum"),pageInfo.get("pageSize"), total, list);
}
@Override
public List list(Object o,Class> clzz) {
SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.LIST, o);
return connectionProcessor.list(getConnection(), sqlInfo,clzz);
}
@Override
public int sqlSave(String sql, Object ... params) {
List paramList = Arrays.asList(params);
SqlInfo sqlInfo = new SqlInfo(sql, paramList);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public int sqlDelete(String sql, Object ... params) {
List paramList = Arrays.asList(params);
SqlInfo sqlInfo = new SqlInfo(sql, paramList);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public int sqlUpdate(String sql, Object ... params) {
List paramList = Arrays.asList(params);
SqlInfo sqlInfo = new SqlInfo(sql, paramList);
return connectionProcessor.update(getConnection(), sqlInfo);
}
@Override
public Object sqlGet(String sql,Class> clzz, Object ... params) {
List paramList = Arrays.asList(params);
SqlInfo sqlInfo = new SqlInfo(sql, paramList);
return connectionProcessor.get(getConnection(), sqlInfo, clzz);
}
@Override
public List sqlList(String sql,Class> clzz, Object ... params) {
List paramList = Arrays.asList(params);
SqlInfo sqlInfo = new SqlInfo(sql, paramList);
return connectionProcessor.list(getConnection(), sqlInfo, clzz);
}
public Connection getConnection(){
return connectionProcessor.getConnection();
}
@Override
public void start(){
connectionProcessor.setAutoCommit(getConnection(), false);
}
@Override
public void rollback(){
connectionProcessor.rollback(getConnection());
}
@Override
public void commit(){
connectionProcessor.commit(getConnection());
}
@Override
public void close(){
connectionProcessor.close(getConnection());
}
@Override
public Future ftSave(Object o) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return save(o);
}
});
}
@Override
public Future ftDelete(Object o) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return delete(o);
}
});
}
@Override
public Future ftUpdate(Object o) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return update(o);
}
});
}
@Override
public Future ftGet(Object o) {
return futurePool.submit(new Callable() {
public Object call() throws Exception {
return get(o);
}
});
}
@Override
public Future ftGet(Object o, Class> clzz) {
return futurePool.submit(new Callable() {
public Object call() throws Exception {
return get(o, clzz);
}
});
}
@Override
public Future> ftList(Object o) {
return futurePool.submit(new Callable>() {
public List call() throws Exception {
return list(o);
}
});
}
@Override
public Future> ftList(Object o, Class> clzz) {
return futurePool.submit(new Callable>() {
public List call() throws Exception {
return list(o, clzz);
}
});
}
@Override
public Future ftSqlSave(String sql, Object ... params) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return sqlSave(sql, params);
}
});
}
@Override
public Future ftSqlDelete(String sql, Object ... params) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return sqlUpdate(sql, params);
}
});
}
@Override
public Future ftSqlUpdate(String sql, Object ... params) {
return futurePool.submit(new Callable() {
public Integer call() throws Exception {
return sqlUpdate(sql, params);
}
});
}
@Override
public Future ftSqlGet(String sql, Class> clzz, Object ... params) {
return futurePool.submit(new Callable() {
public Object call() throws Exception {
return sqlGet(sql, clzz, params);
}
});
}
@Override
public Future> ftSqlList(String sql, Class> clzz, Object ... params) {
return futurePool.submit(new Callable>() {
public List call() throws Exception {
return sqlList(sql, clzz, params);
}
});
}
@Override
public Future> ftPage(Object o) {
return futurePool.submit(new Callable>() {
public Page call() throws Exception {
return page(o);
}
});
}
@Override
public Future> ftPage(Object o, Class> clzz) {
return futurePool.submit(new Callable>() {
public Page call() throws Exception {
return page(o,clzz);
}
});
}
@Override
public Future> ftSqlPage(String countSql, String listSql, Class> clzz, Object ... params) {
return futurePool.submit(new Callable>() {
public Page call() throws Exception {
return sqlPage(countSql, listSql, clzz, params);
}
});
}
// @Override
// public int batchSave(List> list) {
// SqlInfo sqlInfo = sqlBuilderProcessor.getSql(SqlBuilder.SBType.BATCH_SAVE, list);
// return connectionProcessor.update(getConnection(), sqlInfo);
// }
}