MyBatis映射文件的基本功能

#{}与${}区别

  1. “#{}”使用的是preparedStatement方式预处理,就是使用了占位符来填充数据防止SQL注入.

  2. ${}使用的是statement方式进行sql语句的拼接操作,有SQL注入风险。

映射文件配置:

    <delete >
		delete from t_user where no = #{no} 
	</delete>
	
	<delete >
		delete from t_user where no = ${no} 
	</delete>

测试代码:

@Test
	public void test2() {
		int add = mapper.delete(1010);
		System.out.println("删除了"+add+"条信息");
	}
	
	@Test
	public void test3() {
		int add = mapper.deleteById(1111);
		System.out.println("删除了"+add+"条信息");
	}

测试结果:
MyBatis映射文件的基本功能
3. ${}使用时必须在接口的参数上面使用注解@Parma("参数名")来定义参数,否则会报错。

resultType与resultMap区别

  1. resultType用来设置SQL事务操作返回的数据是什么类型的。(一般用在单表处理中)

  2. resultMap基本功能在resultType的基础上增加了返回类型数据名称的别名设置,就是针对,引用类型的成员名称与数据库表单的数据名称不一致的情况。(一般使用在多表联级查处理中)

映射文件设置

<resultMap type="user" >
		<!-- 通常使用在多级联表查询中,由于表中的属性
			  名与后端对应类的成员名称对不上,所以可以
			  在此处定义成员变量的别名使查询结果一一对
			  应,方便数据接收 -->
  		<!-- 表结构中的column和对象中成员变量对应关系 -->
  		<id column="no" property="no"/>
  		<result column="name" property="xxxname"/>
  		<result column="age" property="age"/>
  	</resultMap>
  	
  	<!-- 
  		resultType一般用在单表处理中 
  		resultMap 一般使用在多表中
  	-->
  	<select >
		select * from t_user 
	</select>
	<select >
		select * 
		from t_user 
		where no=#{id}
	</select>

查询测试,已经提前将User类中的name成员名改成了xxxname,与数据库中的name不一致:

@Test
	public void test() {
		List<User> list = mapper.query();
		for (User user : list) {
			System.err.println("使用了resultMap"+user);
		}
		User byId = mapper.queryById(1111);
		System.err.println("使用了resultType"+byId);
	}

查询结果,可以看到没有设置成员别名的成员值是NULL:
MyBatis映射文件的基本功能