mybatis
MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。
简单来讲就是简化数据库的相关操作。
开发环境
Windows10 + jdk-13.0 + MySql 5.7.28 + Idea
Mysql最新版本已经到8.x,但是5.x使用更为广泛,因此使用5.7版本
开始
创建 maven 项目
配置maven默认的jdk版本
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>13</source>
<target>13</target>
</configuration>
</plugin>
</plugins>
上边的配置文件应放置在pom.xml文件中,如果不配置,在每一次修改pom.xml文件后,再次编译运行时都会提示 不支持的发行版本XXX的错误。
在pom.xml中注册所有的xml
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
这是极其关键的一步,只有这一步成功,在运行时所有的xml文件才能正确发挥其作用。
添加相关的依赖
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
分别添加mybatis、mysql、junit包,idea的提示足够智能,只要输入相关的名称,稍等片刻就能自动补全。
文件创建及配置
创建文件
在resources目录下创建 mybatis-config.xml 文件。 文件名可以任意更改,但建议如上命名。db.properties文件可以创建,也可以不创建,建议创建,命名无要求,主要是用来存放一些数据库连接相关的配置,如用户名、密码等。
在 src/main/java 目录下创建 com.XXX.dao、 com.XXX.pojo、 com.XXX.utils三个包
简要解释一下三个包的含义:
Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理。
Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。
POJO是Plain OrdinaryJava Object的缩写,它不实现任何接口,不继承任何父类,且不应该含有注解。
在我的项目中,数据库内容如下:
poet表中有三个字段,因此,在 pojo 下建立 poet类。相应的,建立 poetMapper等文件。
配置文件
配置数据库连接
<?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>
<properties resource="db.properties"/>
<typeAliases>
<package name="com.wang.pojo"/>
</typeAliases>
<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="com/wang/dao/poetMapper.xml"/>
</mappers>
</configuration>
<properties resource="db.properties"/>
将resources目录下的 db.properties 文件导入,如果前边创建文件时没有创建这个文件,可以忽略这一步。
<typeAliases>
<package name="com.wang.pojo"/>
</typeAliases>
为我们的包设置一个别名,这样在下边的使用中可以简化步骤,当然也可以省略这一步。 同时,为包取别名的方法不唯一,这里采取比较简单的一种。在后续使用中,如果要使用 com.wang.pojo.poet ,可以直接用 poet 代替。
<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>
这是比较复杂的一步,在mybatis官方文档中有详细说明。 这一步主要是配置mysql的环境, environments 的 s 说明在此标签下可以配置多个环境 default="development" 则选择其中一个作为默认环境。
<transactionManager type="JDBC"/> 配置事务管理器,采用mysql保持默认即可。
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
db.properties文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=root
datasource 标签配置数据源,默认即可。 下边三个属性配置数据库的驱动、url、用户名、密码。这里因为创建了data.properties配置文件,因此相关信息并未直接写在此处的文件中。如果没有创建配置文件,下边配置可以参考:
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="xxx"/>
<property name="password" value="xxx"/>
</dataSource>
<mappers>
<mapper resource="com/wang/dao/poetMapper.xml"/>
</mappers>
这一步的目的是注册xml文件,不注册在运行时会报错。 注册也有多种方式,此处选择resource注册。
至此,数据库文件就配置完毕了。
配置mybatisUtils工具类
public class mybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
String res = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(res);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSession getSession() {
return sqlSessionFactory.openSession();
}
}
所谓工具类,仅仅提供一个基础的工具。在这个类中,返回一个MySQL的session。
编写poet类
package com.wang.pojo;
public class poet {
private int id;
private String name;
private String info;
public poet(int id, String name, String info) {
this.id = id;
this.name = name;
this.info = info;
}
public poet( ) {
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getInfo() {
return info;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "poet{" +
"id=" + id +
", name='" + name + '\'' +
", info='" + info + '\'' +
'}';
}
}
完整内容如上图,可以根据自己的项目编写相关的内容。
编写dao中的接口和mapper映射文件
public interface poetMapper {
List<poet> getList();
}
<?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.wang.dao.poetMapper">
<select id="getList" resultType="poet">
select *
from poems.poets
</select>
</mapper>
上图在mapper标签中 namespace 对应相应的接口类,要给出完整的包名。在resultType处要注意,原本应该写完整的包名 com.XXX.pojo.XXX ,但由于我们在 mapper-config.xml中配置了别名,在此使用 poet 即可。
所有的标签都如下图所示,在此仅以select作为示例:
到此,所有的配置已经完成。
编写测试类
public class mybatisUtilsTest {
//注意此处的 @Test 注解,不可少。
@Test
public void test() {
//下边两行就是我们创建的工厂类的使用,从工厂类中获得一个session。
SqlSession sqlSession = mybatisUtils.getSession();
poetMapper poetMapper = sqlSession.getMapper(com.wang.dao.poetMapper.class);
List<poet> poets = poetMapper.getList();
for (poet poet : poets) {
System.out.println(poet);
}
}
}
成功!
good luck~
参考: