- 浏览: 211895 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (121)
- 投资杂记 (6)
- Java技术 (46)
- 记忆 (7)
- 科技随笔 (6)
- 随感 (8)
- 漫谈云计算 (4)
- 生活点滴 (1)
- andriod笔记 (13)
- mysql-数据库 (2)
- OSGI (1)
- Spring Data JPA (1)
- gradle maven nexus (1)
- Java性能优化 多核线程 优化 (2)
- Open-Erp (oe) (8)
- Java技术 camel (1)
- jetty camel dynamicRouter (1)
- karaf (1)
- amqp apollo camel karaf (1)
- Java技术 MyCat (1)
- Java技术 并行调用 线程池 (1)
最新评论
-
白云天:
主机网络端口使用命令: netstat -nplt
centos7.4上安装mysql5.7记录 -
白云天:
登录到 容器内部 docker ps -a查询容器IDsudo ...
docker初探 -
白云天:
export jars to local directory ...
Camel的direct,Bean测试 -
白云天:
location /esb/ { proxy_ ...
Camel的direct,Bean测试 -
白云天:
centos 中添加 shell_script.sh 为开机启 ...
Camel的direct,Bean测试
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE}) //用于 方法
@Retention(RetentionPolicy.RUNTIME) //在运行时加载到Annotation到JVM中
public @interface SqlDef {
String sql(); //定义一个 SQL 语句
String name() default "";
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.HashMap;
import javax.persistence.NamedAttributeNode;
@Target({ElementType.TYPE}) //用于 方法
@Retention(RetentionPolicy.RUNTIME) //在运行时加载到Annotation到JVM中
public @interface SqlDefs {
SqlDef[] defs() default {};
}
import java.lang.reflect.Method;
import java.util.HashMap;
@SqlDefs(defs={@SqlDef(name="update",
sql="update g_product set name=${name},version=#{version} where id=${id}"),
@SqlDef(name="insert",
sql="insert into g_product (name,version) values (${name},${version}"),
@SqlDef(name="delete",
sql="delete from g_product where id=${id}"),
@SqlDef(name="selectAll",
sql="select * from g_product"),
@SqlDef(name="findOne",
sql="select * from g_product where id=${id}"),
})
public class SqlService {
protected Sql dao;
public SqlService(Sql dao){
this.dao=dao;
}
/**
* 获取 SQL 语句
* @param method_name 方法名称
* @param types 方法的参数类别
* @return
*/
public String getSqlCommand(String sqlId){
String sql=null;
try{
Class<? extends SqlService> cls=this.getClass();
if(cls.isAnnotationPresent(SqlDefs.class)){
SqlDefs sm=(SqlDefs) cls.getAnnotation(SqlDefs.class);
SqlDef[] mps=sm.defs();
for(int i=0;i<mps.length;i++){
// System.out.println(mps[i].name()+"\t"+mps[i].sql());
if(sqlId.equalsIgnoreCase(mps[i].name())){
sql = mps[i].sql();
break;
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return sql;
}
/**
* 获取 SQL 语句
* @param method_name 方法名称
* @param types 方法的参数类别
* @return
*/
public String getSqlCommand(String method_name,Class []types){
String sql=null;
try{
Class cls=this.getClass();
Method method = cls.getMethod(method_name,types);
if(method.isAnnotationPresent(SqlDef.class)){
SqlDef ad = method.getAnnotation(SqlDef.class);
sql=ad.sql();
}
}catch(Exception e){
e.printStackTrace();
}
return sql;
}
@SqlDef(sql="update g_product set name=${name},version=#{version} where id=${id} ")
public int sampleUpdate(int id, String name,int version){
Class []type={int.class,String.class,int.class};
String sql=getSqlCommand("sampleUpdate",type);
if(sql==null){
return -1;
}
HashMap<String,Object> ps=new HashMap<String,Object>();
ps.put("id", id);
ps.put("name", name);
ps.put("version", version);
int r=dao.update(sql, ps);
return r;
}
public void testSql(int id, String name,int version){
HashMap<String,Object> ps=new HashMap<String,Object>();
ps.put("id", id);
ps.put("name", name);
ps.put("version", version);
}
public static void main(String []args){
SqlService sb=new SqlService(null);
String sql=sb.getSqlCommand("update_");
System.out.println(sql);
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.datasource.DataSourceUtils;
public class Sql {
protected Logger log = LoggerFactory.getLogger(Sql.class);
DataSource ds;
JdbcTemplate db ;
public Sql(DataSource ds){
this.ds=ds;
this.db = new JdbcTemplate(ds);
}
/**
* 更新操作, sql 中用 #{param_name}, 或者 ${param_name} 代表参数, ${param} 作为 SQL 语句的一部分
* @param sql
* @param param
* @return
*/
public int tUpdate(String sql,final HashMap<String,Object> param){
int ret=0;
long t=System.currentTimeMillis();
final ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
try{
ret=db.update(sqlCmd,new PreparedStatementSetter(){
public void setValues(PreparedStatement ps) throws SQLException{
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
ps.setObject(i+1, v);
}
}
});
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return ret;
}
/**
* 更新操作, sql 中用 #{param_name}, 或者 ${param_name} 代表参数, ${param} 作为 SQL 语句的一部分
* @param sql
* @param param
* @return
*/
public int update(String sql,HashMap<String,Object> param){
int ret=0;
Connection con=null;
PreparedStatement st=null;
long t=System.currentTimeMillis();
ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
try{
con=DataSourceUtils.doGetConnection(ds);
st=con.prepareStatement(sqlCmd);
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
st.setObject(i+1, v);
}
ret=st.executeUpdate();
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}finally{
try{
if(st!=null){
st.close();
}
}catch(Exception e){}
try{
if(con!=null){
con.close();
//DataSourceUtils.doCloseConnection(con, ds);
}
}catch(Exception e){
log.error("Close Exception:", e);
}
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return ret;
}
public JResult select(String sql,HashMap<String,Object> param){
JResult rs=null;
Connection con=null;
PreparedStatement st=null;
long t=System.currentTimeMillis();
ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
ResultSet set=null;
try{
con=DataSourceUtils.doGetConnection(ds);
st=con.prepareStatement(sqlCmd);
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
st.setObject(i+1, v);
}
set=st.executeQuery();
ResultSetMetaData met=set.getMetaData();
List<String[]> ls=new ArrayList<String[]>();
int num=met.getColumnCount();
String []cols=new String[num];
for(int i=0;i<cols.length;i++){
cols[i]=met.getColumnName(i+1);
}
ls.add(cols);
while(set.next()){
cols=new String[num];
for(int i=0;i<cols.length;i++){
cols[i]=set.getString(i+1);
}
ls.add(cols);
}
rs=new JResult(ls);
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}finally{
try{
if(set!=null){
set.close();
}
if(st!=null){
st.close();
}
}catch(Exception e){}
try{
if(con!=null){
DataSourceUtils.doCloseConnection(con, ds);
}
}catch(Exception e){
log.error("Close Exception:", e);
}
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return rs;
}
/**
* 处理 sql , 获取 sql 中的参数名称, 将 #{p_name} 中的 p_name 加入到 pList, 且 将 #{p_name} 替换为 ? ;
* 将 ${p_name} 替换为具体的值 , p_name 不加入到 pList
* @param sql
* @param param
* @param ps
* @return
*/
public static String getSqlCmd(String sql,HashMap<String,Object> param,ArrayList<String> pList){
if(param==null || param.size()==0){
return sql;
}
StringBuilder sb=new StringBuilder();
pList.clear();
char c;
String key=null;
int i=0;
while(i<sql.length()){
key=null;
c=sql.charAt(i);
if(c=='#' || c=='$'){
if(i+1<sql.length()){
char t=sql.charAt(i+1);
if(t=='{'){
key=getKey(sql,i+1);
}
}
}
if(key!=null){
i+=key.length()+3;
if(c=='$'){ //替换为值
Object v=param.get(key);
if(v==null){
sb.append("null");
}else{
if(v instanceof Number){
sb.append(v.toString());
}else{
sb.append('\'');
if( v instanceof Date ){
sb.append(getTM((java.util.Date)v));
}else{
if( v instanceof Calendar ){
sb.append(getTM((Calendar)v));
}else{
sb.append(v.toString());
}
}
sb.append('\'');
}
}
}else{ //'#' 替换为参数
sb.append('?');
pList.add(key);
}
}else{
sb.append(c);
i++;
}
}
return sb.toString();
}
public static String getKey(String msg,int from){
int i=from+1;
int to=-1;
char c;
String key=null;
while(i<msg.length()){
c=msg.charAt(i);
if(c=='}'){
to=i;
break;
}
i++;
}
if(to>0){
key=msg.substring(from+1, to);
}
return key;
}
public static String getTM(Date d){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = df.format(d);
return s;
}
public static String getTM(Calendar c){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = df.format(new Date(c.getTimeInMillis()));
return s;
}
}
@Target({ElementType.METHOD,ElementType.TYPE}) //用于 方法
@Retention(RetentionPolicy.RUNTIME) //在运行时加载到Annotation到JVM中
public @interface SqlDef {
String sql(); //定义一个 SQL 语句
String name() default "";
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.HashMap;
import javax.persistence.NamedAttributeNode;
@Target({ElementType.TYPE}) //用于 方法
@Retention(RetentionPolicy.RUNTIME) //在运行时加载到Annotation到JVM中
public @interface SqlDefs {
SqlDef[] defs() default {};
}
import java.lang.reflect.Method;
import java.util.HashMap;
@SqlDefs(defs={@SqlDef(name="update",
sql="update g_product set name=${name},version=#{version} where id=${id}"),
@SqlDef(name="insert",
sql="insert into g_product (name,version) values (${name},${version}"),
@SqlDef(name="delete",
sql="delete from g_product where id=${id}"),
@SqlDef(name="selectAll",
sql="select * from g_product"),
@SqlDef(name="findOne",
sql="select * from g_product where id=${id}"),
})
public class SqlService {
protected Sql dao;
public SqlService(Sql dao){
this.dao=dao;
}
/**
* 获取 SQL 语句
* @param method_name 方法名称
* @param types 方法的参数类别
* @return
*/
public String getSqlCommand(String sqlId){
String sql=null;
try{
Class<? extends SqlService> cls=this.getClass();
if(cls.isAnnotationPresent(SqlDefs.class)){
SqlDefs sm=(SqlDefs) cls.getAnnotation(SqlDefs.class);
SqlDef[] mps=sm.defs();
for(int i=0;i<mps.length;i++){
// System.out.println(mps[i].name()+"\t"+mps[i].sql());
if(sqlId.equalsIgnoreCase(mps[i].name())){
sql = mps[i].sql();
break;
}
}
}
}catch(Exception e){
e.printStackTrace();
}
return sql;
}
/**
* 获取 SQL 语句
* @param method_name 方法名称
* @param types 方法的参数类别
* @return
*/
public String getSqlCommand(String method_name,Class []types){
String sql=null;
try{
Class cls=this.getClass();
Method method = cls.getMethod(method_name,types);
if(method.isAnnotationPresent(SqlDef.class)){
SqlDef ad = method.getAnnotation(SqlDef.class);
sql=ad.sql();
}
}catch(Exception e){
e.printStackTrace();
}
return sql;
}
@SqlDef(sql="update g_product set name=${name},version=#{version} where id=${id} ")
public int sampleUpdate(int id, String name,int version){
Class []type={int.class,String.class,int.class};
String sql=getSqlCommand("sampleUpdate",type);
if(sql==null){
return -1;
}
HashMap<String,Object> ps=new HashMap<String,Object>();
ps.put("id", id);
ps.put("name", name);
ps.put("version", version);
int r=dao.update(sql, ps);
return r;
}
public void testSql(int id, String name,int version){
HashMap<String,Object> ps=new HashMap<String,Object>();
ps.put("id", id);
ps.put("name", name);
ps.put("version", version);
}
public static void main(String []args){
SqlService sb=new SqlService(null);
String sql=sb.getSqlCommand("update_");
System.out.println(sql);
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.datasource.DataSourceUtils;
public class Sql {
protected Logger log = LoggerFactory.getLogger(Sql.class);
DataSource ds;
JdbcTemplate db ;
public Sql(DataSource ds){
this.ds=ds;
this.db = new JdbcTemplate(ds);
}
/**
* 更新操作, sql 中用 #{param_name}, 或者 ${param_name} 代表参数, ${param} 作为 SQL 语句的一部分
* @param sql
* @param param
* @return
*/
public int tUpdate(String sql,final HashMap<String,Object> param){
int ret=0;
long t=System.currentTimeMillis();
final ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
try{
ret=db.update(sqlCmd,new PreparedStatementSetter(){
public void setValues(PreparedStatement ps) throws SQLException{
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
ps.setObject(i+1, v);
}
}
});
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return ret;
}
/**
* 更新操作, sql 中用 #{param_name}, 或者 ${param_name} 代表参数, ${param} 作为 SQL 语句的一部分
* @param sql
* @param param
* @return
*/
public int update(String sql,HashMap<String,Object> param){
int ret=0;
Connection con=null;
PreparedStatement st=null;
long t=System.currentTimeMillis();
ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
try{
con=DataSourceUtils.doGetConnection(ds);
st=con.prepareStatement(sqlCmd);
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
st.setObject(i+1, v);
}
ret=st.executeUpdate();
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}finally{
try{
if(st!=null){
st.close();
}
}catch(Exception e){}
try{
if(con!=null){
con.close();
//DataSourceUtils.doCloseConnection(con, ds);
}
}catch(Exception e){
log.error("Close Exception:", e);
}
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return ret;
}
public JResult select(String sql,HashMap<String,Object> param){
JResult rs=null;
Connection con=null;
PreparedStatement st=null;
long t=System.currentTimeMillis();
ArrayList<String> pList=new ArrayList<String>();
String sqlCmd=getSqlCmd(sql,param,pList);
ResultSet set=null;
try{
con=DataSourceUtils.doGetConnection(ds);
st=con.prepareStatement(sqlCmd);
Object v;
String key;
for(int i=0;i<pList.size();i++){
key=pList.get(i);
v=param.get(key);
st.setObject(i+1, v);
}
set=st.executeQuery();
ResultSetMetaData met=set.getMetaData();
List<String[]> ls=new ArrayList<String[]>();
int num=met.getColumnCount();
String []cols=new String[num];
for(int i=0;i<cols.length;i++){
cols[i]=met.getColumnName(i+1);
}
ls.add(cols);
while(set.next()){
cols=new String[num];
for(int i=0;i<cols.length;i++){
cols[i]=set.getString(i+1);
}
ls.add(cols);
}
rs=new JResult(ls);
}catch(Exception e){
log.error("Update_sql["+sqlCmd+"]", e);
}finally{
try{
if(set!=null){
set.close();
}
if(st!=null){
st.close();
}
}catch(Exception e){}
try{
if(con!=null){
DataSourceUtils.doCloseConnection(con, ds);
}
}catch(Exception e){
log.error("Close Exception:", e);
}
}
t=System.currentTimeMillis()-t;
log.debug("Exec_sql["+sqlCmd+"],time="+t);
return rs;
}
/**
* 处理 sql , 获取 sql 中的参数名称, 将 #{p_name} 中的 p_name 加入到 pList, 且 将 #{p_name} 替换为 ? ;
* 将 ${p_name} 替换为具体的值 , p_name 不加入到 pList
* @param sql
* @param param
* @param ps
* @return
*/
public static String getSqlCmd(String sql,HashMap<String,Object> param,ArrayList<String> pList){
if(param==null || param.size()==0){
return sql;
}
StringBuilder sb=new StringBuilder();
pList.clear();
char c;
String key=null;
int i=0;
while(i<sql.length()){
key=null;
c=sql.charAt(i);
if(c=='#' || c=='$'){
if(i+1<sql.length()){
char t=sql.charAt(i+1);
if(t=='{'){
key=getKey(sql,i+1);
}
}
}
if(key!=null){
i+=key.length()+3;
if(c=='$'){ //替换为值
Object v=param.get(key);
if(v==null){
sb.append("null");
}else{
if(v instanceof Number){
sb.append(v.toString());
}else{
sb.append('\'');
if( v instanceof Date ){
sb.append(getTM((java.util.Date)v));
}else{
if( v instanceof Calendar ){
sb.append(getTM((Calendar)v));
}else{
sb.append(v.toString());
}
}
sb.append('\'');
}
}
}else{ //'#' 替换为参数
sb.append('?');
pList.add(key);
}
}else{
sb.append(c);
i++;
}
}
return sb.toString();
}
public static String getKey(String msg,int from){
int i=from+1;
int to=-1;
char c;
String key=null;
while(i<msg.length()){
c=msg.charAt(i);
if(c=='}'){
to=i;
break;
}
i++;
}
if(to>0){
key=msg.substring(from+1, to);
}
return key;
}
public static String getTM(Date d){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = df.format(d);
return s;
}
public static String getTM(Calendar c){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s = df.format(new Date(c.getTimeInMillis()));
return s;
}
}
发表评论
-
docker初探
2017-08-17 16:49 5681、docker , 先从仓库中下载一个和自己的 ... -
java-nio的hello-word
2017-04-27 17:55 459重点注意:有说明的地 ... -
Java NIO 系列教程
2015-07-02 14:28 845Java NIO提供了与标准IO不同的IO工作方式: ... -
随手记录-设计目录中的jar到类路径
2015-05-07 18:01 754@echo off color 7 SetLocal Enab ... -
gradle和maven结合nexus服务解决jar包依赖
2014-07-17 11:00 15961、架设 nexus nexus 的基础不多讲了,去官网下载 ... -
使用 Spring Data JPA 简化 JPA 开发(Spring Data JPA 开发指南)
2014-06-11 15:46 663从一个简单的 JPA 示例开始 本文主要讲述 Spring D ... -
My-sql批量更新或者插入的SQL
2013-09-25 17:03 1350My-sql批量更新或者插入的SQL,高效, MyBatis中 ... -
加减的艺术用于工作学习管理
2013-02-17 17:12 683回顾做过的事情,总结起来,就是先加,后减,再加。 不是吗? ... -
记录到内存的Logger,可用于web动态显示内容的来源
2013-02-17 09:35 1790import java.io.ByteArrayOutputS ... -
一个表达式计算工具
2012-11-21 12:57 742可以计算: 加减乘除,余数,括号 , 结果为整数,操作数全部为 ... -
ms-sql-server获取某表的当前可用的自增值
2012-01-10 09:46 887执行 SQL : select IDENT_CURRENT( ... -
一个加密数字和逗号且减少空间的算法
2010-11-09 17:19 1297注意本算法只能处理由 0,1,2,3,4,5,6,7,8, ... -
云计算笔记
2010-09-01 14:13 775最近得闲,去了解下 hadoop系统,下面为过程记录: 1、 ... -
在MySql上实现Replication(Master 与 Slave 数据同步)
2010-04-23 17:54 1115假设这里有三个数据库分别为 d1、d2、d3,其中d ... -
在一台windows机器上如何安装多个Mysql
2010-04-23 17:41 33711、将mysql程序直接拷贝到某个目录(假设目录为d:\mys ... -
MySQL复制配置步骤文档(主从备份机制)
2010-03-30 10:14 1848本文档主要对一个主服务器,一个从服务器(简称一主一从)的复制配 ... -
如何得到SqlServer的自增ID
2010-03-16 11:09 5884转自:http://hi.baidu.com/vc60/blo ... -
J2EE集群
2010-01-04 15:29 3600对于理解J2EE集群技术不 ... -
JDBC 调用存储过程的整理
2010-01-04 14:30 1019String sqls = this.getSqls().ge ... -
Jboss下设置一个web-app
2009-12-18 14:06 1140<!--StartFragment --> 虚拟 ...
相关推荐
在我们日常的开发过程中,肯定不可避免的会使用到数据库以及SQL语句。比如,刚开始学习Java的时候可能会遇到JDBC,它是连接Java和数据库的桥梁,我们可以使用JDBC来建立与数据库之间的连接并且执行相应的SQL语句。...
MyBatis 的前身是 iBatis 。是一个数据持久层(ORM)框架。至今,MyBatis 源 码内的包名仍在使用 org.apache.ibatis。 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀...的配合数据库和 sql 语句来开发项目。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将...
5.11 执行SQL语句(Execute) 5.12 commit&rollback; 5.13 其它命令 5.14 事务管理 5.15 Martini项目下的ibatis文件配置 5.16 数据库测试FAQ 6 Spring和SQL跟踪 6.1 @Tracer 6.2 FAQ 7 JTester插件的使用 7.1 插件功能...
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将...
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将...
其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如IUserOperation.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细...
11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 ...
11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.2.9. 获取自动生成的主键 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 ...
11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. ...
11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. SingleConnectionDataSource类 ...
11.2.6. 执行SQL语句 11.2.7. 执行查询 11.2.8. 更新数据库 11.3. 控制数据库连接 11.3.1. DataSourceUtils类 11.3.2. SmartDataSource接口 11.3.3. AbstractDataSource类 11.3.4. ...
cn.dreampie.jfinal-sqlinxml https://github.com/Dreampie/jfinal-sqlinxml 基于jfinal 的类似ibatis的sql语句管理方案 cn.dreampie.jfinal-lesscss https://github.com/Dreampie/jfinal-lesscss java...