1 Mapper映射器是什么
是符合映射文件要求的接口
接口要求
a. 方法名要与sql的id一致。
b. 方法的参数类型要与parameterType一致。
c. 方法的返回类型要与resultType一致。
映射文件要求
namespace必须等于接口名(包含包名)
增加笔记(2017年5月19日09:19:46)
Mapper映射器的作用:如果我们不使用Mapper映射器,那么我们就必须调用SqlSession的相应方法区执行相应的增、删、改、查操作;如果我们使用了Mapper映射器,那么我们执行增、删、改、查这些操作时使用的就是Mapper映射器中的相应方法;但是要想使用Mapper映射器中的方法必须要有一个Mapper映射器对象,这个对象可以通过SqlSession的getMapper方法得到,例如:AdminDao ad = sqlSession.getMapper(AdminDao.class);当然也有得到Mapper对象的简便方法,那就是使用spring去集成mybatis,通过在spring配置文件中配置MapperScannerConfigurer就可以帮相应的Mapper映射器配置一个bean,以后我们就可以通过spring容器来使用这个bean啦。
2 如何使用Mapper映射器
2.1 导包
2.2 添加mybatis配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 3 "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> 4 <configuration> 5 <!-- 和spring整合后,environment配置将被废除 --> 6 <environments default="environment"> 7 <environment id="environment"> 8 <!-- 使用jdbc事务管理,事务控制由mybatis实现 --> 9 <transactionManager type="JDBC" /> 10 <!-- 数据库连接池,由mybatis进行管理 --> 11 <dataSource type="POOLED"> 12 <property name="driver" value="com.mysql.jdbc.Driver" /> 13 <property name="url" 14 value="jdbc:mysql://127.0.0.1:3306/xiangxu" /> 15 <property name="username" value="root" /> 16 <property name="password" value="182838" /> 17 </dataSource> 18 </environment> 19 </environments> 20 21 <!-- 指定映射文件的位置(即:加载映射文件) --> 22 <mappers> 23 <mapper resource="cn/xiangxu/telecom/login/entity/AdminMapper.xml" /> <!-- 注意:包名的 . 全部换成 / --> 24 </mappers> 25 26 </configuration>
2.3 编写实体类(类的属性名和表的字段名保持一致)
1 package cn.xiangxu.telecom.login.entity; 2 3 import java.io.Serializable; 4 5 public class Admin implements Serializable { 6 private Integer id; 7 private String name; 8 private String password; 9 private String gender; 10 11 public Integer getId() { 12 return id; 13 } 14 public void setId(Integer id) { 15 this.id = id; 16 } 17 public String getName() { 18 return name; 19 } 20 public void setName(String name) { 21 this.name = name; 22 } 23 public String getPassword() { 24 return password; 25 } 26 public void setPassword(String password) { 27 this.password = password; 28 } 29 public String getGender() { 30 return gender; 31 } 32 public void setGender(String gender) { 33 this.gender = gender; 34 } 35 36 public String toString() { 37 return "Admin [id=" + id + ", name=" + name + ", password=" + password + ", gender=" + gender + "]"; 38 } 39 40 }
2.4 编写 AdminDao 接口
接口中方法的要求
a. 方法名要与sql的id一致。
b. 方法的参数类型要与parameterType一致。
c. 方法的返回类型要与resultType一致。
1 package cn.xiangxu.telecom.login.dao; 2 3 import java.util.List; 4 import java.util.Map; 5 6 import cn.xiangxu.telecom.login.entity.Admin; 7 import cn.xiangxu.telecom.login.entity.Admin2; 8 9 public interface AdminDao { 10 public void insert(Admin admin); // 插入方法 11 public List<Admin> findAll(); // 查询所有方法 12 public Admin findByName(String name); // 限定查询方法 13 public void modify(Admin admin); // 修改方法 14 public void deleteByName(String name); // 删除方法 15 16 public Map<Object, Object> findByName2(String name); // 查询结果返回Map 的方法 17 public Admin2 findByName3(String name); // 实体类的属性名和表的字段名不一致的情况 18 public Admin2 findByName4(String name); 19 public Admin2 findByName5(String name); 20 }
2.4 添加映射文件并进行编写
映射文件需满足的要求
映射文件的 namespace 必须等于接口名(包含包名)
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 3 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> 4 5 <mapper namespace="cn.xiangxu.telecom.login.dao.AdminDao"> 6 <insert id="insert" parameterType="cn.xiangxu.telecom.login.entity.Admin"> 7 <!-- 注意:parameterType的属性值一定要写上类名(基本类型除外) --> 8 INSERT INTO admin 9 (name, password, gender) 10 VALUES(#{name}, #{password}, #{gender}) 11 </insert> 12 13 <select id="findAll" resultType="cn.xiangxu.telecom.login.entity.Admin"> 14 SELECT * FROM admin 15 </select> 16 17 <select id="findByName" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin"> 18 SELECT * FROM admin 19 WHERE NAME = #{MYNAME} 20 </select> 21 22 <update id="modify" parameterType="cn.xiangxu.telecom.login.entity.Admin"> 23 UPDATE admin 24 SET password=#{password}, gender=#{gender} 25 WHERE name=#{name} 26 </update> 27 28 <delete id="deleteByName" parameterType="String"> 29 DELETE FROM admin 30 WHERE name=#{deleteName} 31 </delete> 32 33 <select id="findByName2" parameterType="String" resultType="Map"> 34 SELECT * FROM admin 35 WHERE name=#{selectName} 36 </select> 37 38 <!-- 如果实体类的属性名和表的字段名不一致,那么不一致的字段将返回null --> 39 <select id="findByName3" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin2"> 40 SELECT * FROM admin 41 WHERE name = #{selectName} 42 </select> 43 44 <!-- 利用sql的别名解决实体类的属性名和标的字段名不一致的问题 --> 45 <select id="findByName4" parameterType="String" resultType="cn.xiangxu.telecom.login.entity.Admin2"> 46 SELECT id, name, password word, gender gender1 FROM admin 47 WHERE name = #{selectName} 48 </select> 49 50 <!-- 使用resultMap元素解决实体类的属性名和标的字段名不一致的问题 --> 51 <resultMap type="cn.xiangxu.telecom.login.entity.Admin2" id="admin2Map"> 52 <result property="word" column="password"></result> 53 <result property="gender1" column="gender"></result> 54 </resultMap> 55 <select id="findByName5" parameterType="String" resultMap="admin2Map"> 56 <!-- 注意:查询的返回值是cn.xiangxu.telecom.login.entity.Admin2类型 --> 57 SELECT * FROM admin 58 WHERE name=#{selectName} 59 </select> 60 61 62 63 64 65 </mapper>
本博客源代码地址:点击前往