文章目录
一、MyBatis是什么?
mybatis是一个开源、轻量级的数据持久化框架。在前面的学习过程中,使用的是jdbc来操作数据库,但是使用jdbc的过程中,发现操作繁琐,存在大部分重复代码,而mybatis内部封装了jdbc,简化了加载驱动、创建连接、创建statement等繁杂的步骤,开发时只需关注sql语句本身。
二、框架初体验
- 创建一个maven项目(src目录结构如下图),导入项目所需要的jar包
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
- 在本地数据库中创建
Student
表,并在entity下创建对应的Student
类
public class Student {
//定义属性,属性名和列名一致
private Integer id;
private String name;
private String email;
private Integer age;
//这里省略getter、setter以及toString方法
}
- 在
dao
下创建持久层的dao接口—StudentDao,定义操作数据库的方法(本例中可不创建)
public interface StudentDao {
//查询student表的所有数据
public List<Student> selectStudents();
}
- 在
dao
下创建dao接口对应的sql映射文件—StudentDao.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.example.dao.StudentDao">
<select id="selectStudents" resultType="com.example.entity.Student">
select * from student order by id
</select>
</mapper>
- 在
resources
创建mybatis的配置文件—mybatis.xml(名称自定义)及jdbc.properties
jdbc.mysql.driver=com.mysql.cj.jdbc.Driver
jdbc.mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
jdbc.mysql.user=root
jdbc.mysql.password=root
<?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文件的位置,从类路径根开始找文件-->
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.mysql.driver}"/>
<property name="url" value="${jdbc.mysql.url}"/>
<property name="username" value="${jdbc.mysql.user}"/>
<property name="password" value="${jdbc.mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/example/dao/StudentDao.xml"/>
</mappers>
</configuration>
注意
:
- 上述配置文件中的url,由于我使用的版本是5.7,所以需要在后面加上时区,否则运行时会报错!
- 使用数据库属性配置文件jdbc.properties,方便后期进行修改
- 如果不使用数据库属性配置文件,则直接在value中填写对应的数据库配置信息
- 创建类,使用mybatis访问数据库
import com.example.entity.Student;
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;
import java.util.List;
public class App {
public static void main(String[] args) throws IOException {
//访问mybatis读取student数据
//1.定义mybatis主配置文件的名称,从类路径的根开始(target/classes)
String config = "mybatis.xml";
//2.读取这个config表示的文件
InputStream in = Resources.getResourceAsStream(config);
//3.创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
//5.【重要】获取SqlSession对象,从SqlSessionFactory中获取SqlSession
SqlSession sqlSession = factory.openSession();
//6.【重要】指定要执行的sql语句的标识,sql映射文件中的 namespace + "." + 标签的id值
String sqlId = "com.example.dao.StudentDao" + "." + "selectStudents";
//7.执行sql语句,通过sqlId找到语句
List<Student> list = sqlSession.selectList(sqlId);
//8.输出结果
list.forEach(System.out::println);
//9.关闭SqlSession对象
sqlSession.close();
}
}