什么是MyBatis
MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发
MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
MyBatis简化了jdbc开发
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
快速入门
1.新建maven,导入依赖
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
</dependencies>
2.创建学生实体类
package com.jwl.pojo;
public class Student {
private int id;
private String name;
private int age;
private String address;
private String gender;
private String phone;
private String birthday;
public Student() {
}
public Student(int id, String name, int age, String address, String gender, String phone, String birthday) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
this.gender = gender;
this.phone = phone;
this.birthday = birthday;
}
/**
* 获取
* @return id
*/
public int getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* 获取
* @return phone
*/
public String getPhone() {
return phone;
}
/**
* 设置
* @param phone
*/
public void setPhone(String phone) {
this.phone = phone;
}
/**
* 获取
* @return birthday
*/
public String getBirthday() {
return birthday;
}
/**
* 设置
* @param birthday
*/
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + ", gender = " + gender + ", phone = " + phone + ", birthday = " + birthday + "}";
}
}
3.编写学生接口,在接口中定义准备操作数据库的方法
public interface StudentMapper {
List<Student> selectAll();
}
4.在resources中创建接口对应的映射文件(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.jwl.mapper.StudentMapper">
<select id="selectAll" resultType="com.jwl.pojo.Student">
select * from student;
</select>
</mapper>
5.将映射文件写入mybatis-config.xml(mybatis的配置文件)中,并修改连接池信息
<?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>
<settings>
<!--在控制台显示SQL语句 打印日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!--起别名 因为包名加类名太长了,但是实体类一多也麻烦了,所以用下面的包扫描-->
<typeAlias type="com.jwl.pojo.Student" alias="Student" />
<!--如果有很多对象需要映射,可以直接扫描这个包 -->
<package name="com.jwl.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--配置连接池需要的参数-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db11?useSSL=false & useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="StudentMapper.xml"/>-->
<!-- 使用包扫描必须xml和接口放到一个目录中,且接口名和映射文件名相同-->
<package name="com.jwl.mapper"/>
</mappers>
</configuration>
6.编写测试类
package com.jwl;
import com.jwl.mapper.UserMapper;
import com.jwl.pojo.User;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class TestMybatis {
@Test
public void test1() throws IOException {
/*//1.在测试案例里面访问resoureces的资源,可以直接访问文件
String resource = "mybatis-config.xml";
//2.读取核心配置文件信息,生成一个输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
//3.创建一个生成SqlSession的工厂类 类似于连接池
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//采用了动态代理根据这个接口帮我们创建出Mapper对象,就可以调用其中的方法
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
users.forEach(System.out::println);
sqlSession.close();*/
//因为要使用mybatis,所以要把配置文件mybatis-config.xml加载过来(在测试案例访问resoureces的资源,可以直接访问文件)
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//将这个文件转为流的形式,这个流会自动关闭,然后使用这个流获取连接,首先获得连接的builder对象
//这个builder需要new
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//到这步获得了连接的工厂类,接下来通过工厂类获得连接
SqlSession sqlSession = sqlSessionFactory.openSession();
//成功获得连接,使用这个连接将接口使用动态代理生成对象
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);//因为是动态代理所以用.class
//用代理对象调用接口中的方法
List<Student> Students = mapper.selectAll();
Students.forEach(System.out::println);
//关闭资源,只需要关闭sqlSession
sqlSession.close();
}
}
最后
如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。