实验内容
使用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
,这个路径与第三步中定义的 mapper
的 resource
是对应的,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}
网友评论