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.最后生成的目录如下图所示

 

 

原文地址:https://www.cnblogs.com/xyblogs/p/8718310.html