MyBatis核心知识点解析:#{}, ${}, 参数映射与返回值处理

需积分: 10 2 下载量 127 浏览量 更新于2024-09-02 收藏 3.78MB DOCX 举报
"mybatis知识点" 在MyBatis中,`#{}`和`${}`是两种不同的参数占位符。`#{}`是预编译参数,主要用于PreparedStatement,它能够防止SQL注入,提高安全性。而`${}`是简单的字符串替换,用于Statement,没有安全防护,容易受到SQL注入攻击。在实际开发中,为了程序的安全性和可读性,通常推荐使用`#{}`。 接口方法的参数类型在MyBatis中非常灵活,可以接受基本类型、引用类型(如Bean、集合)、数组等。对于一个参数的情况,直接传递即可。如果有多个参数,可以使用`@Param`注解来指定参数名,使SQL语句更加清晰。 当需要将参数传递给SQL语句时,MyBatis会根据参数类型进行处理。如果是基本类型,MyBatis会自动处理;如果是复杂类型,如Bean或集合,可能需要使用`resultMap`来定义映射规则。 返回数据的封装主要有以下几种情况: 1. 返回单条数据时,首选的方式是直接使用Bean进行封装。如果不想用Bean,也可以使用`Map<String, Object>`,其中key是列名,value是对应的值。 2. 返回多条数据时,一般使用`List<Bean>`来封装,这里的Bean对应SQL查询结果的每一行。另一种方式是使用`Map<Integer, Bean>`,但这种情况较为少见。 3. 当返回的数据来自多个表,且不是一个单一的Bean所能容纳时,可以创建一个新的Bean(如UserVO),或者使用`association`和`collection`标签。`association`用于表示一个对象中包含另一个对象,`collection`用于表示一个对象包含一个对象集合。对于包含另一个对象的情况,可以使用级联属性、`association`标签或分步查询来处理。 如果数据库列名和实体类属性名不一致,可以通过以下方式解决: 1. 开启MyBatis的驼峰命名规则,这样MyBatis会自动将列名转换为驼峰命名的属性名。 2. 如果开启驼峰命名规则仍无法解决,可以在SQL语句中为列名设置别名,使其与属性名相同。 3. 使用`resultMap`标签手动定义列名与属性名的映射关系。 在处理动态SQL时,`trim`标签可以帮助去除SQL语句中的前导或后缀。`foreach`标签则常用于批量插入,尤其在有自增主键的情况下,需要注意处理自增主键的返回值,以及在插入数据时避免重复。 `concat()`函数在MyBatis中用于字符串拼接,可能出现错误,需要根据具体情况进行调整。动态SQL的使用能极大地提高代码的灵活性和可维护性。 MyBatis提供了一系列灵活的机制来处理参数、返回值和动态SQL,使得开发者能够更好地控制SQL操作,提高代码质量。在实际项目中,理解并熟练运用这些知识点是非常关键的。