select的用法
先写个根据用户id 查询用户信息的简单方法。在 创建一个数据包dc.com.mapper,并在dc.com.mapper包中创建UserMapper接口,并在接口中添加一个selectById 方法,代码如下。
package dc.com.mapper;
import dc.com.entity.Users;
public interface UsersMapper {
Users selectById(long id);
}
然后在resources目录中创建dc.com.mapper目录,在mapper目录中创建对应UserMapper.xml 文件,并添加如下的<resultMap >和< select >部分的代码。
<?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="qin.com.mapper.UsersMapper">
<resultMap id="userBean" type="Users">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="pass" column="pass"></result>
</resultMap>
<select id="selectById" resultMap="userBean">
select id,name,pass from users where id=#{id}
</select>
</mapper>
前面创建接口和 XML 时提到过,接口和 XML 是通过将 name space 的值设置为接口的全限定名称来进行关联的,那么接口中方法和 XML 又是怎么关联的呢?
可以发现,XML中的 select 标签的 id 属性值和定义的接口方法名是一样的MyBatis 就是通过这种方式将接口方法和 XML 定义的 SQL 语句关联到一起的,如果接口方法没有和XML中的id属性值相对应,启动程序便会报错。映射 XML和接口的命名需要符合如下规则。
1、当只使用 XML 而不使用接口的时候 namespace 的值可以设置为任意不重复的名称。
2、标签的 id 属性值在任何时候都不能出现英文句号“.”,并且同一个命名空间下不能出现重复的id
3 因为接口方法是可以重载的,所以接口中可以出现多个同名但参数不同的方法,但是xml的id 的值不能重复,因而接口中的所有同名方法会对应着 XML 中的同 id 的方法。最常见的用法就是,同名方法中其中一个方法增加 RowBound 类型的参数用于实现分页查询。
明白上述两者之间的关系后,通过UsersMapper.xml 先来了解一下 XML 些标签和属性的作用。
select 映射查询语句使用的标签。
1、 id :命名空间中的唯标识符,可用来代表这条语句。
2、resultMap :用于设置返回值的类型和映射关系
3、select 标签中的 select id,name,pass from users where id= #{id }是查询语句 。
4、#{id} : MyBatis SQL 中使用预编译参数的一种方式,大括号中的 id 是传入的参数名。
5、在上面的 elect 中,使用 resultMap 设置返回值的类型,这里的 userMap 就是上面<resultMap 中的 id 属性值,通过 id 引用需要的<resultMap >。
现在继续在UsersMapper.java接口中增加如下的方法。
package dc.com.mapper;
import dc.com.entity.Users;
import java.util.List;
public interface UsersMapper {
Users selectById(long id);
List<Users> selectAll();
}
接下来在UsersMapper.xml中添加如下代码。
select id,name,pass from users
完整代码如下。
<?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="qin.com.mapper.UsersMapper">
<resultMap id="userBean" type="Users">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="pass" column="pass"></result>
</resultMap>
<select id="selectById" resultMap="userBean">
select id,name,pass from users where id=#{id}
</select>
<select id="selectAll" resultMap="userBean">
select id,name,pass from users
</select>
</mapper>