创建 Maven 项目
1. 菜单上选择新建项目
File | New | Project
2. 选择左侧的Maven
由于我们只是创建一个普通的项目, 此处点击 Next
即可。
3. 输入GroupId
和ArtifactId
在我的项目中,
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, '[email protected]', 1, 0), ('小丽', 13821378271, '[email protected]', 0, 0), ('小刚', 13821378272, '[email protected]', 1, 0), ('小花', 13821378273, '[email protected]', 0, 0), ('小强', 13821378274, '[email protected]', 1, 0), ('小红', 13821378275, '[email protected]', 0, 0);
配置Mybatis
配置mybatis的XML文件
XML 配置文件(configuration XML)中包含了对 MyBatis 系统的核心设置。
1. 复制框架
从 2. 配置 environments 3. 配置 settings 在本项目中, 主要是为了配置日志输出。 4. 配置 typeAliases 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。 如果我们这样配置 那么在 但一般来说 本项目中, 如下配置 5. 配置 mappers 同理, 可以单个配置, 也可以通过扫描包来识别。 该配置会扫描指定包中的所有 1. 创建实体类 实体类, 属性需要与数据库表中的字段一一对应, 并有对应的 2. 创建 Mapper 接口和 Mapper.xml 配置了结果映射和 通过 通过 底层通过 最后记得关闭 获得的结果如下 有SQL输出, 以及SQL的执行情况 请访问我的 Github 主页获取。 原文出处:https://www.cnblogs.com/homejim/p/9613205.htmlenvironments
对应的是数据库相关的属性。我们可以配置多个环境,但每个 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>
pom.xml
中配置的是 log4j
, 因此此处的日志实现值是 LOG4J
。<settings>
<setting name="logImpl" value="LOG4J" /></settings>
<--项目中不是这样配置的--><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>
<mappers>
<package name="com.homejim.mybatis.mapper"/></mappers>
.xml
文件,这些文件包含着mybatis
的 SQL 语句和映射配置文件。后续会创建。创建实体类和对应的Mapper.xml
getter
和setter
。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, 省略
*/
}
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
中的 id
与Mappe
r中的方法名一致。测试
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();
}
}
}
}
Resources
工具类读取 mybatis-config.xml
, 存入 Reader
;SqlSessionFactoryBuilder
使用上一步获得的reader
创建SqlSessionFactory
对象;sqlSessionFactory
对象获得SqlSession
;SqlSession
对象通过selectList
方法找到对应的“selectAll”
语句, 执行SQL
查询。JDBC
查询后获得ResultSet
, 对每一条记录, 根据resultMap
的映射结果映射到Student
中, 返回List
。SqlSession
。源码
共同學習,寫下你的評論
評論加載中...
作者其他優質文章