• mybatis的mapper接口代理使用的三个规范


    2018-07-29

    1.什么是mapper代理接口方式?

    MyBatis之mapper代理方式。mapper代理使用的是JDK的动态代理策略

    2.使用mapper代理方式有什么好处

    使用这种方式可以不用写接口的实现类,免除了复杂的方法,使得代码更加清晰易懂

    按照以前的DAO 开发模式 ,我们有一个写了一个接口类 然后需要写这接口的实现类

    现在就是MyBATis 通过帮我们生成了这个实现了。而我们要做的就是配置好这实现类的 XML。

    也就是说 使用了mybatis 开发中不需要写数据库的实现类 而只要实现接口 所有的实现又mybatis的配置文件去生成。

    3.使用mappper代理方式要遵循什么规范?

    1.接口名要和对应的映射文件的名称相同(只是后缀名不同)

    2.接口的全限定名要和mapper映射文件的namespace 一致

    3.接口中的方法名要和mapper映射文件中的唯一标识的id相同

    4.要在同一目录下面(可以创建一个源文件夹,然后创建一个和src目录下面相同的包,已达到xml和接口分离的作用)

    5: 接口的方法返回类型和mapper 映射文件返回的类型一致

    6 接口的方法参数类型和mapper 映射文件输入类型要一致

    For Example

    1.建立一个web项目

    2.在webRoot文件夹下面lib中导入mybatis的jar、log4j的jar(日志文件)、mysql-connection的jar(mysql连接数据库的jar包),使用什么数据库就导入什么jar包

    注意:要添加到构建路径中才能够被使用

    3.创建一个源文件夹用于存放mybatis的主配置文件和接口的映射文件(要创建和src目录下面的接口的包名相同)、还有properties文件(键值对文件)

    注意:配置文件如果要用于配置数据库一定要写正确不能多加空格,字符,写得颠三倒四

      如com.mysql.jdbc.Driver 不能写成com.jdbc.mysql.Driver

      也不能多加一个点,少一个点

    config|--com.imp

             |--main_config.xml

        |--main_config.properties

     

    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/myweb?characterEncoding=utf-8&&useSSL=false
    3 username=root
    4 password=root
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd" >
    <configuration>
        <properties resource="main_config.properties"></properties>
        <typeAliases>
        <package name="com.pojo"/>
        </typeAliases>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}" />
                    <property name="url" value="${url}" />
                    <property name="username" value="${username}" />
                    <property name="password" value="${password}" />
                </dataSource>
            </environment>    
        </environments>
        <mappers>
        <package name="com.imp"/>
        </mappers>
    </configuration>
    main_config.xml

     

     

    4.写一个对应数据库的pojo类(com.pojo)

    package com.pojo;
    
    public class Students {
        /**
         * 学号 姓名 年龄
         */
        private int id;
        private String name;
        private int age;
        /**
         * 默然的构造函数
         */
        public Students() {
            super();
            // TODO 自动生成的构造函数存根
        }
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
    
    }
    Students.java

     

    5.写一个接口类(com.imp)

     1 package com.imp;
     2 
     3 import java.util.List;
     4 
     5 import com.pojo.Students;
     6 
     7 public interface IStudents {
     8     
     9     List<Students> selectAll();
    10 
    11 }
    IStudents.java

     

    6.写一个和接口名相同的映射文件(xml)(com.imp)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
     3 <!-- 命名空间要和接口的全限定名相同 -->
     4 <mapper namespace="com.imp.IStudents">
     5 <select id="selectAll" resultType="students">
     6     select * from students
     7 </select>
     8 
     9   
    10 </mapper>
    IStudents.xml

     

    7.写一个工具类(com.util)

     1 package com.util;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 public class DataBaseManager {
    12     
    13 
    14     /**
    15      * 使用的是静态方法
    16      * @return
    17      * @throws IOException
    18      */
    19     public static SqlSession getSqlSession() throws IOException{
    20         //加载配置文件
    21         InputStream inputStream = Resources.getResourceAsStream("main_config.xml");
    22         //创建会话工厂
    23         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    24         //开启会话
    25         SqlSession sqlSession = sqlSessionFactory.openSession();
    26         
    27         
    28         return sqlSession;
    29     }
    30 
    31 }
    DataBaseManager .java

     

    8.写一个测试类

     1 package com.test;
     2 
     3 import java.io.IOException;
     4 import java.util.List;
     5 import org.apache.ibatis.session.SqlSession;
     6 import org.junit.Test;
     7 import com.imp.IStudents;
     8 import com.pojo.Students;
     9 import com.util.DataBaseManager;
    10 
    11 public class TestBasic {
    12     @Test
    13     public void testSelectAll() throws IOException{
    14         //获取sqlsession
    15         SqlSession sqlSession = DataBaseManager.getSqlSession();
    16         System.out.println(sqlSession);
    17         
    18         IStudents mapper =sqlSession.getMapper(IStudents.class);
    19         List<Students> all = mapper.selectAll();
    20         for (Students students : all) {
    21             System.out.println(students.getId()+students.getName()+students.getAge());
    22         }
    23         
    24     }
    25 }
    TestBasic .java

     

    9.最后生成的目录如下图所示

     

     

  • 相关阅读:
    剑指 Offer 31. 栈的压入、弹出序列
    【笔记】小样本学习(Few-shot Learning)(1)
    【VS】Visual Studio 自带的反编译工具,方便了太多了。
    秋招提前批已来,万字长文教你如何增加面试大厂的成功率🔥
    Spring Boot自动配置原理与实践(二)
    MySQL是怎么解决幻读问题的?
    深入学习Netty(5)——Netty是如何解决TCP粘包/拆包问题的?
    深入学习Netty(4)——Netty编程入门
    HttpRunner3.X
    HttpRunner3.X
  • 原文地址:https://www.cnblogs.com/xyblogs/p/8718310.html
Copyright © 2020-2023  润新知