package mybatis.sqlNode;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.scripting.xmltags.*;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import java.util.Arrays;
import java.util.HashMap;
public class SqlNodeDemo {
public static void main(String[] args) {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setUrl("jdbc:mysql://ip:port/wind_whispers_dev?useUnicode=true&characterEncoding=utf8&useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("password");
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
// configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
// 构建sqlNode
SqlNode sn1 = new StaticTextSqlNode("select * from tb_user where 1=1");
SqlNode sn2 = new IfSqlNode(new StaticTextSqlNode(" AND id=#{id}"), "id !=null");
SqlNode sn3 = new IfSqlNode(new StaticTextSqlNode(" AND name=#{name}"), "name !=null");
SqlNode sn4 = new IfSqlNode(new StaticTextSqlNode(" AND phone=#{phone}"), "phone !=null");
MixedSqlNode mixedSqlNode = new MixedSqlNode(Arrays.asList(sn1, sn2, sn3, sn4));
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("id", "1");
paramMap.put("phone", "15101691259");
/**
* 创建动态sql 解析上下文
*/
DynamicContext context = new DynamicContext(sqlSessionFactory.getConfiguration(), paramMap);
// 调用sqlNode的apply方法解析动态sql
mixedSqlNode.apply(context);
// 调用DynamicContext 对象的getSql方法获取动态sql解析后的sql语句
System.err.println(context.getSql());
}
}
代码构建mybatis sqlSessionFactory会话工厂并创建动态sql 解析上下文
最新推荐文章于 2024-04-09 16:10:03 发布