MyBatis的基本使用
一、官方网站
二、说明
创建一个简单的Maven项目,应用MyBatis框架连接mysql数据库,实现简单的查询。
项目目录结构效果如下:
- utils:封装了MyBatis连接数据库和获取查询对象的方法
- pojo:User为与数据库中的User表对应的类
- dao:数据访问层实现数据库表与pojo对象的查询映射
- mybatis-config.xml为mybatis核心配置文件
- test下对UserMapper进行测试
三、基本使用(实现)
1.创建环境
创建一个maven项目,在pom.xml中引入相关依赖:
-
引入mybatis依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency>
-
引入jdbc驱动依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency>
-
引入junit依赖(用于测试)
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency>
因为后续编写的一些mapper.xml文件没有放在resources下,会被过滤掉,所以我们还需要在pom.xml文件中增加build配置,如下:
<build>
<!--build中配置resources,防止资源导出失败问题-->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
2.配置核心XML
在main/resources
下创建mybatis-config.xml
文件,编辑如下内容:
<?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>
</configuration>
其中,需要编辑以下参数:
- driver:驱动名称
- 老版本(mysql5之前)驱动:
com.mysql.jdbc.Driver
- 新版本(mysql6之后)驱动:
com.mysql.cj.jdbc.Driver
- 老版本(mysql5之前)驱动:
- url:连接url
- 例如:
jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
- 新版本必须指定
serverTimezone
参数 - 注意:参数连接符号
&
应当使用&
的写法
- 例如:
- username:用户名
- password:登录密码
3.编写工具类
创建一个utils
包,创建MybatisUtils
类,内容如下:
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory = null;
static {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
}
4.mapper配置和使用
-
使用前的准备
首先需要在数据库中创建一张表,并在项目里创建对应的POJO类。
-
创建
User
表,插入测试数据create table user( id int primary key, name varchar(20) not null , pwd varchar(20) ); insert into user(id,name,pwd) values (1,'xxx','123456'), (2,'yyy','123456') ;
-
创建POJO类
User.java
public class User { private int id; private String name; private String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
-
-
编写Mapper接口和对应xml文件
-
创建一个
dao
包,在包下创建UserMapper
接口,定义数据访问的方法:import com.gitung.pojo.User; import java.util.List; public interface UserMapper { //定义方法 List<User> getUserList(); }
-
创建
UserMapper.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.gitung.dao.UserMapper"> <select id="getUserList" resultType="com.gitung.pojo.User"> select * from mybatis.user </select> </mapper>
说明:
- namespace表示mapper类,要用全路径
- id与方法名一致
- resultType为查询结果类,要用全路径
-
-
在mybatis-config.xml中注册UserMapper.xml
在
mybatis-config.xml
文件中的configuration
标签下增加一个mappers
标签,用于管理所有的mapper。并在该标签下为我们之前创建的mapper.xml文件注册,如下所示:<mappers> <mapper resource="com/gitung/dao/UserMapper.xml"/> </mappers>
注意资源路径的格式
-
使用测试
编写测试类,进行测试:
import com.gitung.pojo.User; import com.gitung.utils.MybatisUtils; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest { @Test public void test() { //获取SqlSession对象 SqlSession sqlSession = null; try { sqlSession = MybatisUtils.getSqlSession(); //执行sql UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.getUserList(); for (User user : userList) { System.out.println(user); } } catch (Exception e) { e.printStackTrace(); } finally { //关闭SqlSession sqlSession.close(); } } }
执行测试结果: