MyBatis
来源:互联网 发布:最好企业网络投资理财 编辑:程序博客网 时间:2024/04/30 10:25
MyBatis
========================================================================
MyBatis/Ibatis中#和$的区别
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:order by #{user_id},如果传入的值是666,那么解析成sql时的值为order by "666",
如果传入的值是id,则解析成的sql为order by "id".
2.$将传入的数据直接显示生成在sql中。
如:order by ${user_id},如果传入的值是888,那么解析成sql时的值为order by 888,
如果传入的值是id,则解析成的sql为order by id.
3.#方式能够很大程度防止sql注入;$方式无法防止Sql注入。
4.$方式一般用于传入数据库对象,例如传入表名、字段名.
5.一般能用#的就别用$.
ps:在使用mybatis中还遇到<![CDATA[ ]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,
比如sql中有大于号>比较时;要执行一个存储过程时等
========================================================================
========================================================================
MyBatis insert操作返回主键
MyBatis insert语句默认返回的是插入的记录条数;
int userAdd(UserEntit user); //dao mapper层
<insert id="add" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="id">
insert into ......
</insert>
返回值为插入的记录条数
user.getId()为插入记录的主键id
========================================================================
MyBatis in
1. 当查询的参数只有一个时
1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
findByIds(List<Long> ids)
findByIds(Long[] ids)
这种情况需要特别注意,在传参数时,一定要改用Map方式,这样在collection属性可以指定名称,下面是一个示例
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("ids", ids);
mapper.findByIdsMap(params);
========================================================================
MyBatis/Ibatis中#和$的区别
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
如:order by #{user_id},如果传入的值是666,那么解析成sql时的值为order by "666",
如果传入的值是id,则解析成的sql为order by "id".
2.$将传入的数据直接显示生成在sql中。
如:order by ${user_id},如果传入的值是888,那么解析成sql时的值为order by 888,
如果传入的值是id,则解析成的sql为order by id.
3.#方式能够很大程度防止sql注入;$方式无法防止Sql注入。
4.$方式一般用于传入数据库对象,例如传入表名、字段名.
5.一般能用#的就别用$.
ps:在使用mybatis中还遇到<![CDATA[ ]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,
比如sql中有大于号>比较时;要执行一个存储过程时等
========================================================================
========================================================================
MyBatis insert操作返回主键
MyBatis insert语句默认返回的是插入的记录条数;
int userAdd(UserEntit user); //dao mapper层
<insert id="add" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="id">
insert into ......
</insert>
返回值为插入的记录条数
user.getId()为插入记录的主键id
========================================================================
========================================================================
MyBatis insert批量插入
int batchInsert(@Param("list") List<User> userList);
<insert id="batchInsert" parameterType="java.util.List">
insert into t_user(username,password,age)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.username},#{item.password},age)
</foreach>
</insert>
========================================================================
MyBatis in
1. 当查询的参数只有一个时
1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
findByIds(List<Long> ids)
<select id="findByIdsMap" resultMap="BaseResultMap"> Select <include refid="Base_Column_List" /> from t_user where ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
findByIds(Long[] ids)
<select id="findByIdsMap" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from t_user where ID in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </select>2. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids)
这种情况需要特别注意,在传参数时,一定要改用Map方式,这样在collection属性可以指定名称,下面是一个示例
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("ids", ids);
mapper.findByIdsMap(params);
<select id="findByIdsMap" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from tabs where ID in <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select>
========================================================================
0 0
- MyBatis
- MyBatis
- Mybatis
- myBatis
- mybatis
- MyBatis
- mybatis
- Mybatis
- MyBatis
- Mybatis
- mybatis
- MyBatis
- MyBatis
- mybatis
- MyBatis
- mybatis
- mybatis
- mybatis
- dm6446 初始化流程
- frontend http 前端名字定义问题
- Android service(四)Intent服务
- R语言实战:机器学习与数据分析源代码6(最终弹)
- c++学习心得
- MyBatis
- 快速中值滤波利用VC++和OpenCV调用其封装的动态链接库出现的错误和处理
- 移动渗透top 10
- UITableViewCell刚出现时,出现的动画
- 软件架构概念(1)
- 剑指offer---链表中倒数第k个结点
- android intent 传递list或者对象
- Windows下C++程序移植到Linux上的几个问题及解决方法
- 银行家算法(操作系统)(c++)