初步使用 2个月前

编程语言
624
初步使用

创建 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的执行情况

image
EchoEcho官方
无论前方如何,请不要后悔与我相遇。
1377
发布数
439
关注者
2222348
累计阅读

热门教程文档

Vue
25小节
Linux
51小节
React Native
40小节
CSS
33小节
Maven
5小节