zoukankan      html  css  js  c++  java
  • (三)mybatis之通过接口加载映射配置文件

    1.1  需求

    • 通过(二)在全局配置文件 mybatis-configuration.xml 通过 <mappers> 标签来加载映射文件,那么如果我们项目足够大,有很多映射文件呢,难道我们每一个映射文件都这样加载吗,这样肯定是不行的,那么我们就需要使用 mapper 接口来加载映射文件
    • 以前的做法:

    • 改进做法:使用 mapper 接口来加载映射文件

    1.2.2 引包

    • 本例中使用maven构造项目,所以只需配置依赖即可引相应的包。

    pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.shyrolk</groupId>
      <artifactId>firstMybatis</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>firstMybatis</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        
        <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.4</version>
    </dependency>
    
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>6.0.6</version>
    </dependency>
      </dependencies>
    </project>

    1.2 编写mybatis总配置文件mybatis-config.xml

    <?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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC" />
                <!-- 配置数据库连接信息 -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC" />
                    <property name="username" value="root" />
                    <property name="password" value="" />
                </dataSource>
            </environment>
        </environments>
        
    
        
    </configuration>

    1.3  创建数据库和实体

       1.3.1 创建数据库

      1.3.2 创建实体对象

    package com.shyroke.entity;
    
    public class User {
        private int id;
        private String userName;
        private String passWord;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassWord() {
            return passWord;
        }
    
        public void setPassWord(String passWord) {
            this.passWord = passWord;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", userName=" + userName + ", passWord=" + passWord + "]";
        }
    
    }

    1.4 定义UserMapper.java接口

    • 在myabtis中的mapper接口相当于dao层,调用mapper接口的方法即可实现对数据库的增删改查操作。

    package com.shyroke.mapper;
    
    import org.apache.ibatis.annotations.Param;
    
    import com.shyroke.entity.User;
    
    public interface UserMapper {
        public User findUserById(@Param("id")int id);
    }

     1.5 编写UserMapper.xml配置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.shyroke.mapper.UserMapper">
     
         
        <!-- 根据 id 查询 user 表中的数据
           id:唯一标识符,此文件中的id值不能重复
           resultType:返回值类型,一条数据库记录也就对应实体类的一个对象
           parameterType:参数类型,也就是查询条件的类型
        -->
        <select id="findUserById"
                resultType="com.shyroke.entity.User" parameterType="int">
            <!-- 这里和普通的sql 查询语句差不多,后面的 #{id}表示占位符,里面不一定要写id,写啥都可以,但是不要空着 -->
            select * from user where id = #{id}
        </select>
         
         
    </mapper>
    • <select>标签表示这是一条查询sql,id必须和UserMapper.java接口中的方法一致,这样当我们调用UserMapper.java接口中的方法时,通过namespace="com.shyroke.mapper.UserMapper" 将接口和配置文件联系在了一起。
    • UserMapper.xml和UserMapper.java两个文件的文件名要一致且要处于同一个目录。

    1.6 加载UserMapper接口

    • 在mybatis的总配置文件mybatis-config.xml中添加
        <mappers>
            <mapper class="com.shyroke.mapper.UserMapper"/>
        </mappers>

    1.7 测试

    package com.shyrolk.firstMybatis;
    
    import java.awt.image.ImageProducer;
    import java.io.InputStream;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    import com.shyroke.entity.User;
    import com.shyroke.mapper.UserMapper;
    
    
    /**
     * Hello world!
     *
     */
    public class App 
    {
        public static void main( String[] args )
        {
    
            InputStream inputStream=App.class.getClassLoader().getResourceAsStream("resource/mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession=sqlSessionFactory.openSession();
            
            UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
            User user= userMapper.findUserById(1);
            System.out.println(user);
            sqlSession.close();
        }
    }

    结果:

     1.8 注意

    • UserMapper 接口必须要和 UserMapper.xml 文件同名且在同一个包下,也就是说 UserMapper.xml 文件中的namespace是UserMapper接口的全类名

    • UserMapper接口中的方法名和 UserMapper.xml 文件中定义的 id 一致
    • UserMapper接口输入参数类型要和 UserMapper.xml 中定义的 parameterType 一致
    • UserMapper接口返回数据类型要和 UserMapper.xml 中定义的 resultType 一致
  • 相关阅读:
    【BUUCTF】WEB SECRET FILE
    你是如何让函数返回IEnumerable<T>的
    对Closure的再思考
    旋转的女郎
    Tools in Visual Studio 2010
    解析命令行的正则表达式
    Closure中关于递归的一点补充
    对C++和C#中多态及类型转换的理解(二)
    对C#和C++0x中Lamda表达式的简略对比
    对C++和C#中多态及类型转换的理解(一)
  • 原文地址:https://www.cnblogs.com/shyroke/p/7600994.html
Copyright © 2011-2022 走看看