- 浏览: 216797 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 6231、docker , 先从仓库中下载一个和自己的 ... -
java-nio的hello-word
2017-04-27 17:55 504重点注意:有说明的地 ... -
Java NIO 系列教程
2015-07-02 14:28 884Java NIO提供了与标准IO不同的IO工作方式: ... -
随手记录-设计目录中的jar到类路径
2015-05-07 18:01 791@echo off color 7 SetLocal Enab ... -
gradle和maven结合nexus服务解决jar包依赖
2014-07-17 11:00 16361、架设 nexus nexus 的基础不多讲了,去官网下载 ... -
使用 Spring Data JPA 简化 JPA 开发(Spring Data JPA 开发指南)
2014-06-11 15:46 710从一个简单的 JPA 示例开始 本文主要讲述 Spring D ... -
My-sql批量更新或者插入的SQL
2013-09-25 17:03 1386My-sql批量更新或者插入的SQL,高效, MyBatis中 ... -
加减的艺术用于工作学习管理
2013-02-17 17:12 745回顾做过的事情,总结起来,就是先加,后减,再加。 不是吗? ... -
记录到内存的Logger,可用于web动态显示内容的来源
2013-02-17 09:35 1835import java.io.ByteArrayOutputS ... -
一个表达式计算工具
2012-11-21 12:57 782可以计算: 加减乘除,余数,括号 , 结果为整数,操作数全部为 ... -
ms-sql-server获取某表的当前可用的自增值
2012-01-10 09:46 920执行 SQL : select IDENT_CURRENT( ... -
一个加密数字和逗号且减少空间的算法
2010-11-09 17:19 1336注意本算法只能处理由 0,1,2,3,4,5,6,7,8, ... -
云计算笔记
2010-09-01 14:13 809最近得闲,去了解下 hadoop系统,下面为过程记录: 1、 ... -
在MySql上实现Replication(Master 与 Slave 数据同步)
2010-04-23 17:54 1149假设这里有三个数据库分别为 d1、d2、d3,其中d ... -
在一台windows机器上如何安装多个Mysql
2010-04-23 17:41 34161、将mysql程序直接拷贝到某个目录(假设目录为d:\mys ... -
MySQL复制配置步骤文档(主从备份机制)
2010-03-30 10:14 1879本文档主要对一个主服务器,一个从服务器(简称一主一从)的复制配 ... -
如何得到SqlServer的自增ID
2010-03-16 11:09 5957转自:http://hi.baidu.com/vc60/blo ... -
J2EE集群
2010-01-04 15:29 3633对于理解J2EE集群技术不 ... -
JDBC 调用存储过程的整理
2010-01-04 14:30 1054String sqls = this.getSqls().ge ... -
Jboss下设置一个web-app
2009-12-18 14:06 1178<!--StartFragment --> 虚拟 ...
相关推荐
在iBatis中,我们通常通过XML配置文件或者注解来定义SQL语句,并使用占位符(例如#{}或${})来传递参数。 1. **参数绑定**:iBatis使用占位符(#{})进行参数绑定,可以防止SQL注入攻击。当使用#{paramName}时,...
MyBatis,原名iBatis,是一款优秀的Java持久层框架,它主要解决了在Java开发中数据访问层的繁琐工作,使得开发者可以更加专注于业务逻辑的实现。本学习工程是针对MyBatis进行深入理解与实践的一个绝佳示例,特别适合...
在ibatis中,可以通过XML配置文件或者注解的方式定义SQL语句。以下是一些常见的SQL语句类型及其编写方式: ##### 3.1 查询(SELECT) 查询操作是最常见的数据库操作之一,用于从数据库中检索数据。 ```xml ...
iBatis的核心思想是将SQL语句和Java代码分离,提供了一种灵活的数据访问接口,简化了数据库操作。 一、iBatis基本概念 1. SQL映射文件:iBatis的配置文件,包含了SQL语句、参数映射和结果映射等信息。 2. Mapper...
Ibatis是一个轻量级的Java ORM(对象关系映射)框架,它允许我们编写SQL语句并将其与Java对象绑定,从而简化了数据访问层的开发。在传统的XML配置文件中,Ibatis允许我们定义SQL语句、参数映射以及结果集映射。然而...
它将SQL语句与Java代码分离,通过XML或注解配置文件来定义SQL与Java方法的映射关系,以及参数模型、结果模型等。这样既避免了JDBC的繁琐,又不失SQL的灵活性。 2. **SQL转换工具的必要性** 在使用iBATIS时,可能会...
Ibatis的核心理念是“SQL就是你的API”,它通过XML或注解方式来定义SQL语句,实现了SQL语句的动态执行。 在"Ibatis数据库示例"中,我们可以看到一些关于如何使用Ibatis进行数据库操作的实际代码示例。这些示例可能...
通过XML配置或注解,可以定义SQL映射文件,将Java对象与SQL语句关联起来。 "注解"在这里指的是Spring的注解驱动开发,它简化了配置,使得开发者能够直接在类或方法上使用注解(如@Controller、@Service、@...
1. SQL映射文件:Ibatis通过XML或注解方式定义SQL语句,这些语句被封装在SQL映射文件中。映射文件包含了各种SQL操作,如查询、插入、更新和删除等。 2. 映射器接口:在Java代码中,开发者定义一个接口,这个接口的...
IBatis 是一个基于.NET平台的持久层框架,它实现了SQL语句与.NET代码的解耦,通过XML或注解的方式将SQL与数据访问逻辑分离,提高了开发效率。其主要组成部分包括:SqlMapConfig.xml(全局配置文件)、Mapper.xml...
其设计理念是将SQL语句与Java代码解耦,通过XML配置文件或注解方式定义SQL语句,使得数据库操作更加灵活且易于维护。 ## 2. Ibatis的核心概念 ### 2.1 SQL映射文件 SQL映射文件是Ibatis的核心组成部分,它包含了...
【ibatis入门--对数据库的操作】这篇文章主要讲解了如何使用iBatis框架来操作数据库,iBatis是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提高了开发效率和代码的可维护性。以下是文章涉及的关键知识点: ...
然后,使用MyBatis的Mapper注解或Mapper XML文件来实现这些方法,将SQL语句绑定到接口方法上。这样,业务层只需调用DAO接口,无需关心SQL的具体执行细节。 在具体的实现中,可能会有BaseDAO类作为所有DAO的基类,...
通过XML配置文件或者注解,开发者可以定义SQL语句、存储过程以及复杂的映射,避免了直接在Java代码中编写SQL的繁琐和复杂性。 在《ibatis-sqlmaps-2_cn》中,你将会学习到如何设置和配置IBATIS环境,包括引入必要的...
Ibatis 是一款轻量级的Java持久层框架,它与Hibernate和JPA等ORM框架不同,Ibatis 更强调SQL的灵活性,将SQL语句的编写和执行交给了开发者,允许在XML配置文件或者注解中定义SQL语句,从而实现了数据访问逻辑与业务...
3. **DAO(数据访问对象)**:与iBATIS结合,实现数据库操作。 4. **Mapper文件**:iBATIS的XML文件,包含SQL语句。 5. **实体类**:Java对象,对应数据库中的表。 6. **JSP页面**:视图部分,展示用户界面。 7. **...
开发者可以通过Ibatis的API编写SQL,利用MySQL JDBC驱动与数据库建立连接,执行SQL语句,最后通过SQL驱动处理结果集。这种组合的优势在于: 1. **灵活性**:Ibatis允许开发者直接编写SQL,避免了ORM框架可能带来的...
iBATIS 是一个在Java应用程序中持久化数据的开源框架,它为数据库访问提供了一个中间层,使得开发者可以将SQL语句与Java代码分离,从而简化了数据库驱动的应用程序的开发过程。这个框架由Apache Software Foundation...
MyBatis是一款流行的Java持久层框架,用于简化数据库操作,其特点是将SQL语句与Java代码分离,使得SQL和业务逻辑更加清晰。本项目提供的"mybatis自动sql生成插件源码"则进一步提升了开发效率,通过拦截器...
6. **编写SQL Maps**: 使用XML文件或者基于注解的方式定义SQL Maps,这些映射文件会指定SQL语句和.NET对象之间的关系。 7. **实现业务逻辑**: 在WinForm控件的事件处理程序中,使用iBATIS的SqlMapClient对象执行SQL...