1.基本方式
上一篇文章里的增删改查方式被称为基本方式,其原理是通过命名空间(namespace,在映射文件中设置,本质上是映射类名)+id的方式对sql语句进行定位,就像下面这样
String statment ="mybatis.City.queryCityByName";//映射文件中namespace.id
City city=session.selectOne(statment,"Kabul");
System.out.println(city);
映射文件中的设置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mybatis.City"><!-- 命名空间改成自己的映射类 -->
<select id="queryCityByName" resultType="mybatis.City" parameterType="String"> <!-- resultType必须用全类名 -->
select * from city where name= #{name}
</select>
</mapper>
注意:映射文件中的sql语句参数和返回值在形式上只能是一个
这样,映射类,执行文件,数据库,sql语句便联系在了一起,实现了可以像操作对象一样对数据库进行操作。但是这样在操作时需要组合namespace和id来定位sql语句,在写代码时很麻烦,于是mybatis的动态代理方式便应运而出。
动态代理方式
动态代理方式把对sql的定位交给了接口来完成,程序员在编写代码时只要调用接口中的方法(其实我们调用的是重载之后的真正的方法,重载的工作交给mybatis就好了。)就可以了。这种方式配置起来也很简单。
首先创建一个接口习惯放在一个新包里。
然后把映射文件中的namespace改为接口的限定名(qualified name),namespace="mapper.CityMapper"
在接口中像调用方法一样调用映射文件中的id名就可以了
package mapper;
import mybatis.City;
public interface CityMapper {
City queryCityByName(String name);
}
在运行时,我们要先得到一个映射器(mapper),然后通过映射器去调用sql语句。
//先得到一个映射器(mapper)
CityMapper cityMapper= session.getMapper(CityMapper.class);
City city=cityMapper.queryCityByName("Rafah");
System.out.println(city);
结果
注意:修改运行文件后必须保存,否则将会重复上一次的操作。