select
查询语句是mybatis中最常用的元素之一,mybatis的基本原则之一是:在每个插入,更新,或删除操作之间,通常会执行多个查询操作。因此,mybatis在查询和结果映射做了相当多的改进。,一个简单查询的select元素是很简单的:
<select id="selectPerson" parameterType="int" resultType="hashmap">
SELECT * FROM PERSON WHERE ID = #{id}
</select>
这个语句名为selectPerson,接受一个int类型的参数,并返回一个HashMap类型的对象,其中的键是列名,上述map的配置就相当于JDBC中的:
String selectPerson ="SELECT * FROM PERSON WHERE ID=?";
PreparedStatment ps=conn.prepareStatement(selectPerson);
ps.setInt(1,id);//因为SQL语句中使用占位符来代替具体数值,所以需要给SQL语句赋值
select元素中的属性介绍如下:
下面主要介绍三个属性;
- id属性:id属性在命名空间中唯一的标识符,可以被用来引用这条语句,当满足下面三个条件时,系统会为我们自动建立dao的实现类,我们在开发时就无需再写dao的实现类:
-
mybatis的映射配置文件位置必须和dao接口的包结构相同
-
映射配置文件的mapper元素的namspace属性的取值必须是dao接口的全限定类型
-
select元素的id属性取值必须是dao接口的方法名
2. resultType属性:该属性表示了所要映射到的实体类
-
CRUD操作
insert
update
delete
sql
这个元素可以重新用来定义可重用的SQL代码片段,以便在其他语句中使用,例如:
<sql id="table">
wancontext
</sql>
上面的sql元素将数据库表名为“wancontext”重新起名为“table”,然后通过<included refid=“table” />引用
结果映射
resultMap元素是mybatis中最重要最强大的元素,ResultMap的设计思想是,对简单的语句做到零配置,对于一些复杂一点的语句,只需要描述语句之间的关系就行了
我们在进行结果映射的时候,会遇到一些问题:我们实体类中的字段和数据库表中的列名由于某种因素会不同,那么在进行映射的时候,就有可能会映射失败,为了解决这一个隐患,我们可以在resultMap元素中创建对应的映射关系;
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="password" column="hashed_password"/>
</resultMap>
然后再引用它的语句中设置resultMap属性就行了(即用resultMap替换resultType)
<select id="selectUsers" resultMap="userResultMap">
select user_id, user_name, hashed_password
from some_table
where id = #{id}
</select>