1.maven安装
这一点已经在第一天的环境安装中教过了,不会的话可以去看第一天的笔记。
2.Mapper接口
2.1注意事项:
接口的命名为实体名 Mapper,一般和其对应 XML 文件放一起(只要编译之后字节码文件和 XML
文件在一起);
XML 命名空间用其对应接口的全限定名;
Mapper 接口的方法名要和 Mapper XML 文件元素(select | update | delete | insert) id 值一
样;
方法的返回类型对应 SQL 元素中定义的 resultType / resultMap 类型;
方法的参数类型对应 SQL 元素中定义的 paramterType 类型(一般不写)。
2.2定义mapper接口
package cn.wolfcode.mapper;
public interface UserMapper {
User get(Long id);
}
2.3使用mapper接口
package cn.wolfcode.mapper;
public interface UserMapper {
User get(Long id);
}
2.4mapper接口的原理
通过打印接接口,发现打印的是:class com.sun.proxy.$Proxy5,底层使用的是动态代理(后面Spring 再讲),生成 Mapper 接口的实现类。
接口是规范,实质做的实现还是要由实现类对象来做,而这个实现类不需要我们写,实现类对象也不由我们创建,这些都 MyBatis 使用动态代理帮我们做了;
我们只需提供 Mapper 接口对应 Mapper XML 文件,获取实现类对象的时候传入 Mapper 接口就可以了(不然 MyBatis 也不知道你要获取哪个 Mapper 接口的实现类对象);
至于实现类中操作方式底层还是和之前的一样,因为 Mapper XML 命名空间是使用 Mapper 接口的全限定名,方法名又与对应 XML 元素 id 一致,所以可以通过获取调用方法所在 Mapper 接口的权限名和方法名,拼接出 namespace + id,再配合调用方法的实参就可以像之前一样操作了。
3.MyBatis 的 # 和 $
3.1相同点
都可以获取对象(Map 对象或者 JavaBean 对象)的信息。
3.2不同点
使用 # 传递的参数会先转换为?,无论传递是什么类型数据都会带一个单引号;
使用 $ 传递的参 数,直接把值作为 SQL 语句的一部分。 使用 # 支持把简单类型(八大基本数据类型及其包装类、String、BigDecimal 等等)参数作为 值;
使用 $ 不支持把简单类型参数作为值。 使用 # 好比使用 PrepareStatement,没有 SQL 注入的问题,相对比较安全;
使用 $ 好比使用 Statement,可能会有 SQL 注入的问题,相对不安全。
3.3使用总结
若需要作为 ORDER BY 或 GROUP BY 子句获取参数值使用 $;若需要作为其它子句获取参数值使用
Comments | NOTHING