zoukankan      html  css  js  c++  java
  • MyBatis02 MyBatis基础知识之Mapper映射器

    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> 
    配置好的SqlMapConfig.xml

      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 }
    实体类Admin.java

      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 }
    编写好的AdminDao.java接口

      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>
    配置好的AdminMapper.xml

    本博客源代码地址:点击前往

  • 相关阅读:
    万维网
    MySQL客户端输出窗口显示中文乱码问题解决办法
    mysql数据库delete数据时不支持表别名
    Java 实现在固定区间内随机生成整数
    【面试】MySQL 中NULL和空值的区别?
    一个因MySQL大小写敏感导致的问题
    windows查看服务的状态
    不就是Select Count语句吗,竟然能被面试官虐的体无完肤!
    Java 代码的精优化
    java服务宕机原因查询
  • 原文地址:https://www.cnblogs.com/NeverCtrl-C/p/6872058.html
Copyright © 2011-2022 走看看