mybatis
日常小迷糊
1.1 mybatis小小概念
- mybatis封装了相关jdbc的操作,经过简单的配置,然后该框架就会帮我 们运行我们写的sql.
1.2 在map.xml中的返回值类型是另一个普通实体类
- 在一个map.xml中如果返回值是另一个实体类,需要
map.xml配置:
主配置文件 config.xml:
1.3 如果sql语句中有> 或者< 条件时
- 加上
<![CDATA[ ]]>
把那一部分括起来
<select id="getSameName" resultMap="studenttwo"><!-- 当遇到大于小于时 要用<![CDATA[ ]]>括起来 -->
select sname,count(sid) as total from student group by sname having <![CDATA[count(sid)>1 ]]>
</select>
1.4 一定要记得把map.xml配置文件配到config.xml中去
1.5 传参数执行语句
红色标记与map.xml的标识要一致
绿色是形参
1.6#{}
与${}
参数值的获取区别以及使用范围
区别:
#{}
获取参数值时会自动转成字符串,会自动添加''
但${}
不会它只是将参数的值直接显示在生成的sql语句中(故而#{}
在一定程度上相对于${}
)避免了一定的sql注入问题- 使用
#{ }
方式可以 通过#{参数名}
或者默认的#{_parameter}
来获取参数值, 但是使用${ }
时,不能直接通过${参数名}
来获取,需要通过默认方式${value}
来取值
使用场景: ${ }
方式一般用于传入数据库对象,例如传入表名 ,列名(就是那些不需要变成字符串的参数)- 关于模糊查询 通配符问题 使用
#{}
不能达到要求如:SELECT * FROM bank WHERE user_name LIKE %#{name}%
因为自动加''
的原因,所以 需要使用${}
来处理,如SELECT * FROM bank WHERE user_name LIKE '%${value}%'
但是因为使用${}
有严重的sql注入问题,所以采用CONCAT函数 如 `SELECT * FROM bank WHERE user_name LIKE CONCAT(’%’,#{name},’%’)
1.7 资源配置文件与映射文件的抬头不能写错了
- 资源配置文件只能有一个
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
映射配置文件可以有多个
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- 配置的映射文件,一定要写在资源配置config.xml才能生效,且注意资源配置文件配置的顺序
1.8 测试调用方法步骤
//1. 使用类加载器加载mybatis的配置文件,并构建sqlSession的工厂
InputStream is = Resources.getResourceAsStream(“xml”);
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
//2. 获取SqlSession 对象
SqlSession session = sessionFactory.openSession();
//3. 获得相关的
dao IUserDao userDao = session.getMapper(IUserDao.class);```