MyBatis入门实验(一)之入门

作者: 学好该死的程序 | 来源:发表于2018-07-11 15:59 被阅读0次

    实验内容

    使用Mybatis执行SQL语句从数据库中取出数据,并封装成Java对象返回

    操作步骤

    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

    一、安装

    添加Maven依赖(本文使用版本为3.4.6)

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>x.x.x</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.42</version>
    </dependency>
    

    二、创建数据库及表结构

    CREATE TABLE `user` (
      `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
      `username` varchar(32) NOT NULL COMMENT '用户名',
      `password` varchar(64) NOT NULL COMMENT '密码',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
    INSERT INTO `user` VALUES ('1', 'admin', '123');
    

    三、创建 Mybatis 配置文件

    src/main/resources 目录下创建 mybatis-config.xml 文件,内容如下

    <configuration>
        <properties resource="jdbc.properties"></properties>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="mybatis/User.xml"></mapper>
        </mappers>
    </configuration>
    

    src/main/resources 目录下创建 jdbc.properties 文件,内容如下

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/tutorial_mybatis?characterEncoding=utf-8&useSSL=true
    jdbc.username=root
    jdbc.password=
    

    四、创建实体类和映射文件

    创建包 tutorial.mybatis.model,并在该包下创建 User 类,内容如下

    public class User {
    
        private Long id;
    
        private String username;
    
        private String password;
        
        // 省略 get / set 方法
    }
    

    src/main/resources 目录下创建目录 mybatis,并在该目录下创建 User.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="userMapper">
    
        <select id="getUserByID" parameterType="int" resultType="tutorial.mybatis.model.User">
            select * from `user` where id = #{id}
        </select>
    
    </mapper>
    

    注意:User.xml的路径为 mybatis/User.xml,这个路径与第三步中定义的 mapperresource 是对应的,mybatis 会在项目启动过程中去加载 mappers 中定义的映射文件

    五、构建

    准备工作就绪,开始最终章,创建启动类 MybatisConfig,内容如下:

    public class MybatisConfig {
    
        private static SqlSessionFactory sqlSessionFactory;
        private static Reader reader;
    
        static {
            try {
                reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws IOException {
            SqlSession session = sqlSessionFactory.openSession();
            try {
                User user = session.selectOne("userMapper.getUserByID", 1);
                if (user != null) {
                    String userInfo = "名字:" + user.getUsername()+", 密码:" + user.getPassword();
                    System.out.println(userInfo);
                }
            } finally {
                session.close();
            }
        }
    }
    

    流程梳理

    1、main函数启动,执行 static 代码块,使用 mybatis-config.xml 文件构建sqlSessionFactory,这个过程中会加载 mappers 文件
    2、创建 sqlSession 连接,执行 SQL 语句 userMapper.getUserByID,userMapper.getUserByID 会被分解为 namespace + sqlId,所以 mybatis 会去寻找 namespace 为 userMapper,sqlId为 getUserByID 的SQL语句,这个语句定义在 User.xml 文件中。
    所以 mybatis 最终会执行

    select * from `user` where id = #{id}
    

    相关文章

      网友评论

        本文标题:MyBatis入门实验(一)之入门

        本文链接:https://www.haomeiwen.com/subject/ghihpftx.html