一、MyBatis的主要功能
1. SQL Mapper : 负责SQL映射,将数据库的一张表的一行数据看做一个对象。
2. Data Access Objects : DAOs 数据访问,主要是DML、DOC语句。
二、使用MyBatis的基本步骤
1. 使用IDEA创建项目
2. 加入Maven依赖:在POM.XML文件中加入MySql、MyBatis坐标。
<dependencies>
<!--单元测试-->
<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.5.1</version><!--写自己需要的版本号-->
</dependency>
<!-- mysql驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version><!--写自己需要的版本号-->
</dependency>
</dependencies>
3. 在数据库中建立一个t_student表:表结构如下。
4. 创建实体类和DAO接口方法:前者将表中一行数据看做一个对象,后者定义操作数据库的方法。
注意对象的属性是表中的列名、一定要有set和get方法、重写tostring方法,代码如下:
package com.aojiaodeRR.domain;
public class student {
private Integer id;
private String name;
private Integer age;
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
② 写dao接口,注意dao是接口,只写对数据库的操作方法,代码如下。
public interface StudentDao {
public List<student> s_student();//定义查询数据方法
5. 创建mapper文件(SQL映射文件):写SQL语句,dao接口的SQL语句,一个表对应一个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 namespace="com.aojiaodeRR.dao.StudentDao">
<select id="s_student" resultType="com.aojiaodeRR.domain.student">
select id , name ,age from t_student order by id
</select>
</mapper>
<!-- sql映射文件,写sql语句
指定约束文件:<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis-3-mapper.dtd是约束文件的名称.dtd格式,限制和检查文件中的语法是否合规
mapper:当前文件的根标签
namespace:命名空间,唯一值,使用dao接口的全路径名称,可自定义但不推荐
id:执行sql语句的唯一标识,mybatis使用此id值来找到要执行的SQL语句,使用接口中的方法名称
resultType:表示sql语句返回结果对象的类型是什么,值写类型的全路径名称
-->
6. 创建主配置文件:一个项目只有一个主配置文件,在resources目录下,负责提供数据库连接信息和SQL映射文件位置。
<?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:必须与你的environment id一致,写谁连谁-->
<environments default="development">
<!-- environment:一个数据库信息配置
id:唯一值,自定义表示环境名称-->
<environment id="development">
<!--transactionManager:mybatis的事务类型type:使用JDBC中的connection对象的commit和rollback处理事务-->
<transactionManager type="JDBC"/>
<!--dataSource:数据源链接数据库 type:数据库类型 POOLED:连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="地址"/>
<property name="username" value="账户"/>
<property name="password" value="密码"/>
</dataSource>
</environment>
</environments>
<!--sql mapper(sql映射文件)的位置 一个mapper标签指定一个文件位置
从类路径开始 target/class(类路径)-->
<mappers>
<mapper resource="com/aojiaodeRR/dao/StudentDao.xml"/>
</mappers>
</configuration>
<!--mybatis主配置文件,主要定义了数据库配置信息,sql映射文件位置
约束文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mybatis-3-config.dtd"约束文件名称
-->
7. 写测试类执行SQL语句。
① 写一个自定义工具类
包名、类名随意,可自定义
package com.aojiaodeRR.utils;
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 {
// 读取配置文件和获取SqlSessionFactory对象
private static SqlSessionFactory factory = null;
static {
String Config = "mybatis.xml";
try {
InputStream in = Resources.getResourceAsStream(Config);
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取SqlSession方法
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
if (factory != null) {
sqlSession = factory.openSession();
}
return sqlSession;
}
}
② 写测试类,运行。
public class TestDao {
// 动态代理使用getMapper方法
@Test
public void tests_student(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<student> students = dao.s_student();
for (student s : students){
System.out.println(s);
}
sqlSession.close();
}
③ 验证结果
=========================================================================
时间有限,剩下内容我将在MyBatis(2)中继续分享。