ibatis测试配置sql

本文介绍了一个使用 Ibatis 框架进行 DAO 层测试的例子,并详细展示了如何配置数据库连接及执行查询操作。同时,文章强调了在 SQL 语句中使用变量符号 # 和 $ 的区别及其对防止 SQL 注入攻击的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ibatis测试DAO

import java.io.Reader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class AccurateQuery {
	
	public static void testQueryUser() throws Exception{
		try {
			PropertyConfigurator.configure(cusAccurateQuery.class.getClassLoader().getResource("log4j.properties"));
			Reader reader = Resources.getResourceAsReader("sql-map-config.xml");
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			Map<String, String> map = new HashMap<String, String>();
			ArrayList<User> result = (ArrayList<User>) sqlMap.queryForList("queryUser", map);
			System.err.println(result.size());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

sql-map-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" 
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
  	<settings
	    cacheModelsEnabled="true"
	    lazyLoadingEnabled="true"
	    enhancementEnabled="true"
	    maxSessions="1500"
	    maxTransactions="1500"
	    maxRequests="1500"
	    useStatementNamespaces="false"
	    />    
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
			<property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/testDB" />
			<property name="JDBC.Username" value="admin" />
			<property name="JDBC.Password" value="admin" />
		</dataSource>
	</transactionManager>

	<sqlMap resource="com/ibatis-config/mysql/ibatis_person_customer.xml" /> 
</sqlMapConfig>

ibatis_person_customer.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
<sqlMap>
	<!-- 获得个人客户列表 -->
  <select id="queryUser" parameterClass="java.util.Map" resultMap="User">
  			SELECT * FROM user	
  </select>
</sqlMap>

对于变量部分, 应当使用#, 这样可以有效的防止sql注入,
# 都是用到了prepareStement,这样对效率也有一定的提升
$只是简单的字符拼接而已,对于非变量部分, 那只能使用$, 
实际上, 在很多场合,$也是有很多实际意义的 
例如 
select * from $tableName$ 对于不同的表执行统一的查询 
update $tableName$ set status = #status# 每个实体一张表,改变不用实体的状态 
特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值