参数类型
1. MyBatis的parameterType参数类型可以是基本数据类型、String、包装类型、java.util.Map、java.util.LinkHashMapd等
${}和#{}的区别
1. ${}和#{}都是MyBatis的XML文件中的占位符
2. MyBatis处理#{},是通过PreparedStatement的set方法来赋值(Stirng类型参数在解析时会自动加上双引号,其它数据类型则不加双引号),可以有效的防止SQL注入,提高系统安全性
3. MyBatis处理${},会直接将其替换成传入的变量的值,即传入的值是什么就替换成什么
例如:User queryUserByName(String userName); 传入的userName变量值为小橙
-
#{}
SELECT *FROM t_user WHERE username = #{userName}
会被解析成
SELECT *FROM t_user WHERE username = “小橙” -
${}
SELECT *FROM t_user WHERE username = ${userName}
会被解析成
SELECT *FROM t_user WHERE username = 小橙
总结:
-
${}一般用来传入数据库对象,例如数据库表
-
其它类型参数(基本数据类型、String、包装类型、java.util.Map、java.util.LinkHashMapd等)建议使用#{}
SQL传参
单参数传递
<!--单参数传递:使用parameterType指定参数数据类型即可,SQL中#{value}会自动提取变量值-->
<select id="queryUserByName" parameterType="String" resultType="User">
SELECT *FROM t_user WHERE username = ${userName}
</select>
多参数传递
<!--多参数传递:使用parameterType指定java.util.Map接口,SQL中#{key}会自动提取变量值-->
<select id="queryUsers" parameterType="java.util.Map" resultType="User">
select *from t_user
where
age between #{max} and #{min}
order by age
</select>
package com.cd.blog.config;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* @Author: 落叶无痕
* @Date: 2020/5/15 16:45
*/
public class MyBatisUtils {
/*MyBatisUtils工具类,目的是创建全局唯一的SqlSessionFactory对象*/
//static属于类不属于对象,且全局唯一
private static SqlSessionFactory sqlSessionFactory = null;
//利用静态块在初始化类时初始化SqlSessionFactory
static {
InputStream input = null;
try {
// 使用字节流方式加载classpath下的mybatis-config.xml核心配置文件
input = Resources.getResourceAsStream("mybatis-config.xml");
// 初始化SqlSessionFactory对象,并解析mybatis-config.xml文件
sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
} catch (IOException e) {
e.printStackTrace();
//初始化错误时,抛出ExceptionInInitializerError异常通知调用者
throw new ExceptionInInitializerError(e);
}
}
// 创建SqlSession对象(SqlSession是JDBC的扩展类,专门用于与数据库交互)
public static SqlSession openSession(){
return sqlSessionFactory.openSession();
}
// 释放一个有效的SqlSession对象
public static void closeSession(SqlSession sqlSession){
if(sqlSession != null){
sqlSession.close();
}
}
}
package com.cd.blog.config;
import com.cd.blog.entity.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author: 落叶无痕
* @Date: 2020/5/17 21:42
*/
public class TestMyBatisUtils {
@Test
public void demo(){
SqlSession sqlSession = null;
try{
sqlSession = MyBatisUtils.openSession();
Map param = new HashMap();
param.put("min", 25);
param.put("max", 50);
List<User> userList = sqlSession.selectList("queryUsers", param);
for(User u : userList){
System.out.println(u.getUserName() + ": " + u.getAge() + "岁");
}
}catch (Exception e){
throw e;
}finally {
MyBatisUtils.closeSession(sqlSession);
}
}
}