编写第一个Mybatis程序
1.准备工作
1.1 新建一个Maven Web项目


1.2 在pom.xml文件中,导入依赖
<dependencies>
<!--导入单元测试jar-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--导入mybatis框架-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--导入mysql数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
注意:在进行导入依赖时,建议也将资源文件导出到打包项目中的依赖进行导入
<!--保证在java和resources下的资源文件可以导出-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
1.3 创建数据库,进行数据库连接
-
数据库创建,创建mybatis数据库(省略)
-
数据库连接

连接到mybatis数据库

1.4 完善项目结构

2.编写实体类
编写与数据库中标对应的实体类:ORM

3.编写mysbatis-config.xml文件,配置数据库配置
在Mybatis官网获得xml文件的格式模板,在resources下编写一个配置文件。

模板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>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
修正我们模板,对应我们的数据库配置
<?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>
<!--环境,可以配置多个 default="development":表示默认使用的环境-->
<environments default="development">
<!--id="development":表示当前环境的id-->
<environment id="development">
<!--transactionManager:表示事务管理 type="JDBC":表示类型为jdbc-->
<transactionManager type="JDBC"/>
<!--dataSource:表示数据源 type="POOLED":表示数据源类型-->
<dataSource type="POOLED">
<!--property name="driver":数据库驱动名 value="${driver}":值-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--property name="url":数据库url value="${url}"-->
<!--时区与编码问题需要注意-->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&charset=utf-8&serverTimezone=UTC"/>
<!--property name="username":用户名 value="${username}"-->
<property name="username" value="root"/>
<!--property name="password":密码 value="${password}-->
<property name="password" value="liyu297628"/>
</dataSource>
</environment>
</environments>
<!--每个mapper.xml文件都需要在mybatis的核心配置文件中进行绑定-->
<mappers>
<!--这里的配置需要在编写Dao的xml文件后配置-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
4.编写MybatisUtil工具类,获得sqlSession类
我们需要获得sqlSession类(这里的sqlSession类可以将其比作Connection类,这个sqlSession封装了很多执行sql语句的方法),所以我们可以编写一个根据类,来获得sqlSession。
MybatisUtil工具类
package com.xiaoli.util;
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 MybatisUtil {
private static SqlSessionFactory sessionFactory;
static {
//xml文件路径
String xmlPath = "mybatis-config.xml";
//获取xml文件的流
InputStream resourceAsStream = null;
try {
resourceAsStream = Resources.getResourceAsStream(xmlPath);
} catch (IOException e) {
e.printStackTrace();
}
//获取SqlSessionFactory工厂,用于获取SqlSession
sessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
}
public static SqlSession getSqlSession(){
return sessionFactory.openSession();
}
}
测试:

如果出现错误,我们需要先把mybatis-config.xml,中的mapper标签注释掉:

5.编写执行sql语句的xml的dao文件

我们可以发现,上面的三个文件中,UserDao与UsereDaoImpl是我们所熟悉的,现在我们使用UserMapper.xml文件来代替实现类。
UserDao代码:
package com.xiaoli.dao;
import com.xiaoli.pojo.User;
import java.util.List;
public interface UserDao {
public List<User> getUserList();
}
UserMapper.xml文件的代码我们可以通过Mybatis官网获得模板,
模板代码:
<?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="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
我们修改模板代码,使其成为我们需要的代码:
<?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:即我们之前的dao namespace="org.mybatis.example.BlogMapper":填入我们需要绑定的接口 Dao/Mapper-->
<mapper namespace="com.xiaoli.dao.UserDao">
<!--<select:需要执行sql语句 id="selectBlog":表示绑定的dao方法 resultType="Blog":表示返回的数据类型>-->
<select id="getUserList" resultType="com.xiaoli.pojo.User">
select *from mybatis.user
</select>
</mapper>
6.对mybatis-config.xml文件的Mapper标签进行修改,使其绑定我们需要执行的sql语句的xml文件

xml代码:
<!--每个mapper.xml文件都需要在mybatis的核心配置文件中进行绑定-->
<mappers>
<!--这里的配置需要在编写Dao的xml文件后配置-->
<mapper resource="com.xiaoli.dao/UserMapper.xml"/>
</mappers>
7.编写测试类,测试sql语句执行结果

测试代码:
package com.xiaoli.dao;
import com.xiaoli.pojo.User;
import com.xiaoli.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
//测试sql语句执行结果
public class UserDaoTest {
@Test
public void test(){
//获取SqlSession对象
SqlSession sqlSession = MybatisUtil.getSqlSession();
//获取UserMapper.xml所对应的接口
UserDao mapper = sqlSession.getMapper(UserDao.class);
//执行sql语句,获取执行结果集(相当于ResultSet)
List<User> userList = mapper.getUserList();
//遍历
for (User user : userList) {
System.out.println(user);
}
}
}
运行结果:(可能会成功,也可能会出错)----resource加载文件必须使用 /

重新配置,运行:
移动目录:

修改mybatis-config.xml文件的mapper标签:

运行:

具体细节:
为什么mapper.xml文件需要保存在resources文件下?---------------------resource加载文件必须用 /
浙公网安备 33010602011771号