MyBatis的学习之路(二)
上篇文章介绍了MyBatis的配置文件,现在来介绍实体映射文件Mapper.xml。
说道实体映射文件,就不得不说一下实体与表之间的映射关系:单表映射和多表映射。
a. 单表映射
1 public class Admin{ 2 private String id; 3 private String name; 4 private String password; 5 //三个属性的setter和getter方法 6 }
映射文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="yitian.study.dao.mapper"> 6 <resultMap id="adminMapper" type="com.xxx.entity.Admin"> 7 <id property="id" column="id"/> 8 <result property="name" column="name"/> 9 <result property="password" column="password"/> 10 </resultMap> 11 <select id="selectAdmin" 12 resultType="Admin" parameterType="Admin"> 13 SELECT * 14 FROM Admin 15 WHERE id = #{id} 16 </select> 17 <select id="selectAdminByName" 18 resultType="Admin"> 19 SELECT * 20 FROM Admin 21 WHERE name = #{name} 22 </select> 23 <insert id="insertAdmin" 24 useGeneratedKeys="true"> 25 INSERT INTO Admin (name, password) VALUES (#{name}, #{password}) 26 </insert> 27 <update id="updateAdmin"> 28 UPDATE Admin 29 SET password = #{password} 30 WHERE id = #{id} 31 </update> 32 <delete id="deleteAdmin"> 33 DELETE FROM Admin 34 WHERE id = #{id} 35 </delete> 36 </mapper>
映射文件包含实体类的映射和5条SQL语句,分别是增删查改以及按名称查找。每一条语句都需要一个标识符(id),将会在后面再代码中用到。如果是查询语句还需要resultType,指定返回类型。MyBatis会将数据表列名和这里指定的类型属性按名称自动映射起来。如果需要在语句中传入参数,可以使用 parameterType属性,指定Java实体类的全名或简写,然后就可以在SQL语句中使用#{}来访问参数的属性了。如果是简单的映射,那么parameterType属性还可以省略,MyBatis会自动从传入的Java对象中获取相应的属性。对于某些数据库(例如MySQL),还可以在插入的时候指定useGeneratedKeys="true",让数据库自动生成主键。
常用的方法有增删查改这几个方法。这些方法的第一个参数是前面我们在映射文件中定义的语句ID,第二个参数是要传入的参数。对于查询来说有selectOne和selectList方法,它们的区别主要在于返回个数,如果确定只返回一个对象就使用selectOne方法。
示例如下:
1 Admin admin = sqlSession.selectOne("selectAdminByName",name);
上述方法是采用字符串来指定要使用的查询。MyBatis还给我们提供了一种映射类的方式来实现sql语句。
映射类其实就是一个简单的接口。该接口中的方法和映射文件中定义的语句一一对应。接口方法的名称必须和语句id完全相同,接口方法的返回值和参数和相应的语句相对应。
public interface AdminMapper { Admin selectAdmin(int id); Admin selectAdminByName(String name); void insertAdmin(Admin admin); void updateAdmin(Admin admin); void deleteAdmin(Admin admin); }
仅仅增加映射类还不够,我们需要修改映射文件,以便让MyBatis能找到这个映射类。做法就是将映射文件的命名空间改为对应的映射类的类名。
<mapper namespace="com.xxx.mapper.AdminMapper">
在两者定义好之后,我们就可以使用了。在SqlSession上调用getMapper方法,并传入要获取的Mapper类即可。
1 AdminMapper mapper = sqlSession.getMapper(AdminMapper.class); 2 Admin s = mapper.selectAdminByName(name);
b. 多表映射
关于多表映射的书写,请参考这篇文章----《MyBatis快速入门(2):多表映射》个人觉得讲的还不错,本人就不在赘述了。