• mybatis 初步使用(IDEA的Maven项目, 超详细)


    @

    创建 Maven 项目

    1. 菜单上选择新建项目

    File | New | Project

    2. 选择左侧的Maven

    Maven
    由于我们只是创建一个普通的项目, 此处点击 Next即可。

    3. 输入GroupIdArtifactId

    • 在我的项目中,

    GroupId 填 com.homejim.mybatis

    ArtifactId 填 helloMybatis

    点击 Next

    4. Finish

    通过以上步骤, 一个普通的Maven项目就创建好了。

    Maven配置

    为了让mybatis在项目上跑起来,需要进行如下配置。

    pom.xml

    1. 配置 JDK 版本和编码方式

    <plugins>
    	<plugin>
    		<groupId>org.apache.maven.plugins</groupId>
    		<artifactId>maven-compiler-plugin</artifactId>
    		<version>2.3.2</version>
    		<configuration>
    			<source>1.8</source>
    			<target>1.8</target>
    			<encoding>UTF-8</encoding>
    		</configuration>
    	</plugin>
    </plugins>
    
    

    设置后, 编码方式为 UTF-8, JDK 版本为 1.8

    2. 设置资源文件路径

    Maven 中默认是只会打包 resource下的资源文件。如果我们的文件不放在resource, 则需要通过配置告知Maven

     <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    

    2. 添加 mybatis 依赖

    	<!--mybatis-->
    	<dependency>
    		<groupId>org.mybatis</groupId>
    		<artifactId>mybatis</artifactId>
    		<version>3.4.5</version>
    	</dependency>
    

    本项目的 mybatis版本为3.4.5

    3. 添加数据库驱动依赖

    <!--数据库 mysql 驱动-->
    <dependency>
    	<groupId>mysql</groupId>
    	<artifactId>mysql-connector-java</artifactId>
    	<version>5.1.45</version>
    </dependency>
    

    本项目使用的是mysql数据库。

    4. 添加日志依赖

    <!-- 实现slf4j接口并整合 -->
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-api</artifactId>
    	<version>1.7.25</version>
    </dependency>
    <dependency>
    	<groupId>org.slf4j</groupId>
    	<artifactId>slf4j-log4j12</artifactId>
    	<version>1.7.25</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.logging.log4j</groupId>
    	<artifactId>log4j-core</artifactId>
    	<version>2.10.0</version>
    </dependency>
    

    添加日志是为了在测试时可以输出sql语句。

    5. 添加测试依赖

    <!--junit 测试-->
    <dependency>
    	<groupId>junit</groupId>
    	<artifactId>junit</artifactId>
    	<version>4.12</version>
    	<scope>test</scope>
    </dependency>
    

    添加junit是为了测试更加方便。

    6. 导入依赖

    右键 pom.xml | Maven | Reimport

    导入依赖

    创建数据库

    1. 创建数据库

    CREATE DATABASE IF NOT EXISTS `mybatis` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    

    指定编码为 UTF8

    2. 创建数据库表

    创建一个 student 表。

    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student` (
      `student_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',
      `name` VARCHAR(20) DEFAULT NULL COMMENT '姓名',
      `phone` VARCHAR(20) DEFAULT NULL COMMENT '电话',
      `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
      `sex` TINYINT(4) DEFAULT NULL COMMENT '性别',
      `locked` TINYINT(4) DEFAULT NULL COMMENT '状态(0:正常,1:锁定)',
      `gmt_created` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '存入数据库的时间',
      `gmt_modified` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改的时间',
      PRIMARY KEY (`student_id`)
    ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='学生表';
    

    3. 插入测试数据

    插入一些测试数据。

    
    INSERT INTO `student`(`name`, phone, email, sex, locked)
    VALUES
    ('小明', 13821378270, 'xiaoming@mybatis.cn', 1, 0),
    ('小丽', 13821378271,  'xiaoli@mybatis.cn', 0, 0),
    ('小刚', 13821378272, 'xiaogang@mybatis.cn', 1, 0),
    ('小花', 13821378273, 'xiaohua@mybatis.cn', 0, 0),
    ('小强', 13821378274, 'xiaoqiang@mybatis.cn', 1, 0),
    ('小红', 13821378275, 'xiaohong@mybatis.cn', 0, 0);
    

    配置Mybatis

    配置mybatis的XML文件

    XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置。

    1. 复制框架

    官网中复制最基本的配置:

    <?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="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
      </mappers>
    </configuration>
    

    2. 配置 environments

    environments 对应的是数据库相关的属性。我们可以配置多个环境,但每个 SqlSessionFactory 实例只能选择其一。在本项目中, 我们只配置一个即可。数据库时刚刚我们创建的mybatis

    <environments default="development">
    	<environment id="development">
    		<transactionManager type="JDBC">
    			<property name="" value=""/>
    		</transactionManager>
    		<dataSource type="POOLED">
    			<property name="driver" value="com.mysql.jdbc.Driver"/>
    			<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
    			<property name="username" value="root"/>
    			<property name="password" value="你自己的密码"/>
    		</dataSource>
    	</environment>
    </environments>
    

    3. 配置 settings

    在本项目中, 主要是为了配置日志输出。 pom.xml中配置的是 log4j, 因此此处的日志实现值是 LOG4J

    <settings>
    	<setting name="logImpl" value="LOG4J" />
    </settings>
    

    4. 配置 typeAliases

    类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

    如果我们这样配置

    <--项目中不是这样配置的-->
    <typeAliases>
      <typeAlias alias="Student" type="com.homejim.mybatis.entity.Student"/>
    </typeAliases>
    

    那么在mybatis中, Student可以用在任何使用com.homejim.mybatis.entity.Student的地方。

    但一般来说entity都会有很多, 因此这样配置太繁琐了, mybatis支持指定包名, 会使用类的首字母小写的类限定名作为别名。

    本项目中, 如下配置

    <typeAliases>
    	<package name="com.homejim.mybatis.entity"/>
    </typeAliases>
    

    5. 配置 mappers

    同理, 可以单个配置, 也可以通过扫描包来识别。

    <mappers>
    	<package name="com.homejim.mybatis.mapper"/>
    </mappers>
    

    该配置会扫描指定包中的所有 .xml 文件,这些文件包含着mybatis的 SQL 语句和映射配置文件。后续会创建。

    创建实体类和对应的Mapper.xml

    1. 创建实体类

    实体类, 属性需要与数据库表中的字段一一对应, 并有对应的gettersetter

    package com.homejim.mybatis.entity;
    
    import java.util.Date;
    
    public class Student {
        private Integer studentId;
    
        private String name;
    
        private String phone;
    
        private String email;
    
        private Byte sex;
    
        private Byte locked;
    
        private Date gmtCreated;
    
        private Date gmtModified;
        /**
         * 以下部分为setter和getter, 省略
         */
    }
    

    2. 创建 Mapper 接口和 Mapper.xml

    StudentMapper.java

    package com.homejim.mybatis.mapper;
    
    import com.homejim.mybatis.entity.Student;
    
    import java.util.List;
    
    public interface StudentMapper {
    
        /**
         *
         * @return
         */
        List<Student> selectAll();
    }
    

    StudentMapper.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.homejim.mybatis.mapper.StudentMapper">
      <resultMap id="BaseResultMap" type="com.homejim.mybatis.entity.Student">
        <id column="student_id" jdbcType="INTEGER" property="studentId" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="phone" jdbcType="VARCHAR" property="phone" />
        <result column="email" jdbcType="VARCHAR" property="email" />
        <result column="sex" jdbcType="TINYINT" property="sex" />
        <result column="locked" jdbcType="TINYINT" property="locked" />
        <result column="gmt_created" jdbcType="TIMESTAMP" property="gmtCreated" />
        <result column="gmt_modified" jdbcType="TIMESTAMP" property="gmtModified" />
      </resultMap>
      <sql id="Base_Column_List">
        student_id, name, phone, email, sex, locked, gmt_created, gmt_modified
      </sql>
      <select id="selectAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from student
      </select>
    </mapper>
    

    配置了结果映射和 sql 语句, 其中 sql 中的 idMapper中的方法名一致。

    测试

    public class StudentMapperTest {
        private static SqlSessionFactory sqlSessionFactory;
    
        @BeforeClass
        public static void init() {
            try {
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void testSelectList() {
            SqlSession sqlSession = null;
            try {
                sqlSession = sqlSessionFactory.openSession();
    
                List<Student> students = sqlSession.selectList("selectAll");
                for (int i = 0; i < students.size(); i++) {
                    System.out.println(students.get(i));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    }
    
    
    1. 通过 Resources 工具类读取 mybatis-config.xml, 存入 Reader
    2. SqlSessionFactoryBuilder使用上一步获得的reader创建SqlSessionFactory对象;
    3. 通过 sqlSessionFactory 对象获得SqlSession;
    4. SqlSession对象通过selectList方法找到对应的“selectAll”语句, 执行SQL查询。
    5. 底层通过 JDBC 查询后获得ResultSet, 对每一条记录, 根据resultMap的映射结果映射到Student中, 返回List
    6. 最后记得关闭 SqlSession

    获得的结果如下

    结果

    有SQL输出, 以及SQL的执行情况

    源码

    请访问我的 Github 主页获取。

  • 相关阅读:
    栈及其在.NET FrameWork中的源码分析
    《高性能网站建设指南》读书笔记
    九宫格数独问题
    队列及其在.NET FrameWork中的源码分析
    《web标准之道》读后感(书评)
    SharePoint中的权限体系
    关于异步方法调用
    WF4.0 Beta2:关于动态保存和装载XAML工作流
    Lotus Symphony介绍及试用
    Node.js 0.8.18 / 0.9.7 发布
  • 原文地址:https://www.cnblogs.com/homejim/p/9613205.html
Copyright © 2020-2023  润新知