再查询语句中如果我们用写好的类进行接收数据,如果数据多返回的就是一个 List<类型>。这些类中的属性对应表中的字段
当实体属性和数据库表字段不相同时无法自动封装
解决方法
1 起别名
还可以使用sql语句段提升复用性、使用时调用这个sql语句段
2 resultMap:定义<resultMap>完成不一致的属性和列名的映射,使用时将原来的resultType替换为
resultMap,语法:resultMap="id"。
<resultMap id="brandResultMap" type="brand">
<result column="brand_name" property="brandName"></result>
<result column="company_name" property="companyName"></result>
</resultMap>
<sql id="brand_column">
id,brand_name as brandName,company_name as companyName,ordered,description,status
</sql>
参数占位符: #{参数名}:在执行SQL时,会将#{}占位符替换为?,将来自动设置参数
${参数名}:拼接SQL,会存在SQL注入问题
使用时机: 参数传递都用#{}
如果要对表名、列名进行动态设置,只能用${}
3对特殊字符的处理
1 转义字符
2 <![CDATA[内容】
传参数的三种方式
1. 散装参数
List<Brand> selectByCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
@Param注解给起了一个新键值,因为底层会把传入的参数存到一个Map中,在调用sql时从根据键值来去。默认·一个值对应两个键值agr和param ,当然也可以可以不用@pParam取别名,但是这样在Sql语句中变量名就必须要使用agr0或param1这样的名字,但这样是代码的可读性变得非常差,所以不推荐使用。我们取得键值名都是和对应的sqL语句中的参数名相同的
2 传入类POJO对象
将数据封装到对象中再传入
List<Brand> selectALL(Brand);
3 传入Map
将对应参数名和参数类型存入一个Map,再作为参数传入
List<Brand> selectALL(Map)
动态sql
Mybatis提供了类似if switch的标签,进行动态增删查改
if
choose otherwise
trim
foreach
具体可以去看Mybatis官网,讲的很详细
对于第一个条件不需要逻辑运算符的问题
可以使用<where>标签替换where
具体去看官网
使用注解进行开发
对于些简单的sql语句,我们如果写在sqL映射文件显得很繁琐,这个时候就可以使用注解进行开发
。查询:@Select、
。添加:@Insert
。修改:@Update
。删除:@Delecte
这个注解写Mapper接口中,要和方法连接在一起,注解在上,方法在下
例子;
@Select("select * from tb_User where id=#{id}")
public User selectById(int id);
//这个方法名就可以随便起一个了,因为没有写在映射文件中。这两个是连在一起的。再使用时调用方法就可以了