欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搞懂MyBatis-快速入门

程序员文章站 2022-07-13 21:12:53
...

搞懂MyBatis-快速入门

1.什么是MyBatis

MyBatis是一个持久层的框架,是对JDBC的进一步封装的ORM实现框架。

什么是ORM:

Object Relation Mapping:对象关系映射。是一种为了解决面向对象与关系数据库存在互不匹配的现象的技术。通过描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上是将数据从一种形式转换到另一种技术,实现程序对象到关系数据库数据的映射。

为什么要使用ORM呢?

  • 建立对象和数据库的联系,方便使用面向对象

缺点:

  • 性能较直接用SQL差
  • 不太容易处理复杂查询语句

2.为什么使用Mybatis

实现程序对象到关系数据库数据的映射。

3. 快速入门

3.1基于xml配置文件

步骤:

  • 创建maven工程,导入相关依赖
<!--管理版本-->
<properties>
    <mybatis.version>3.4.5</mybatis.version>
    <junit.version>4.10</junit.version>
    <mysql-connector-java.version>5.1.6</mysql-connector-java.version>
    <log4j.version>1.2.12</log4j.version>
</properties>
  • 编写数据库表
CREATE TABLE student(
	id INT NOT NULL,
	NAME VARCHAR(20) NOT NULL,
	gmt_create DATETIME NOT NULL,
	gmt_modified DATETIME NOT NULL,
	PRIMARY KEY(id)
);
  • 创建实体,在项目中创建entity包下创建Student类
//lombok的注解,可以为下面的属性自动添加getter和setter
@Data
public class Student {
    private Integer id;
    private String name;

    public Student() {
    }

    public Student(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

}
  • 编写持久层接口,在项目中创建Dao包或Mapper包,里面创建StudentDao或StudentMapper类
public interface StudentMapper {
	
    List<Student> findAll();
}
  • 编写持久层接口的映射文件,要求,和持久层接口在同一个包下,名称和持久层接口的名字一样,扩展名是xml(在resource下建)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cTgED5oX-1591241400621)(C:\Users\xiaolong\Desktop\images\mapper.png)]

<?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.xiaolong.mapper.StudentMapper">
    <!-- 配置查询所有操作 -->
    <select id="findAll" resultType="com.xiaolong.entitys.Student">
        select * from student
    </select>
</mapper>
  • 编写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> 	
    <!-- 配置 mybatis 的环境 -->
    <environments default="mysql">
        <!-- 配置 mysql 的环境 -->
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/book"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <mapper resource="com/xiaolong/mapper/StudentMapper.xml"/>
    </mappers>
</configuration>
  • 测试
public class MybatisTest {

    public static void main(String[] args) throws IOException {
        //1.读取配置文件
        InputStream reader = Resources.getResourceAsStream("SqlMapperConfig.xml");
        //2.创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory factory = builder.build(reader);
        //4.使用 SqlSessionFactory 生产 SqlSession 对象
        SqlSession session = factory.openSession();
        //5.使用 SqlSession 创建 dao 接口的代理对象
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);
        //6.使用代理对象执行查询所有方法
        List<Student> students = studentMapper.findAll();
        for (Student student : students) {
            System.out.println(student);
        }
        //7.释放资源
        session.close();
        in.close();
    }
}

mybatis流程总结

  • 通过Reader对象读取Mybatis映射⽂件
  • 通过SqlSessionFactoryBuilder对象创建SqlSessionFactory对象
  • 获取当前线程的SQLSession
  • 事务默认开启
  • 通过SQLSession读取映射⽂件中的操作编号,从⽽读取SQL语句
  • 提交事务
  • 关闭资源

3.2基于注解

增删改查

修改1:删除StudentMapper.xml配置文件,将sql语句直接写在StudentMapper上

public interface StudentMapper {

    @Select("select * from student")
    List<Student> findAll();

    @Insert("INSERT INTO student(id,name) VALUES(#{id},#{name})")
    void addStudent(Student student);

    @Delete("delete from student where id=#{id}")
    void deleteStudentById(int id);

    @Update("update Student set name=#{jackson} where id=#{id}")
    void updateStudent(Student student);
}

修改2:在mybatis的配置文件上,修改映射位置

<!--基于注解方式告诉mybatis映射配置的位置-->
<mappers>
    <mapper class="com.xiaolong.mapper.StudentMapper"></mapper>
</mappers>

测试

public class MybatisTest {

    public static void main(String[] args) throws IOException {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapperConfig.xml");
        //2.创建 SqlSessionFactory 的构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.使用构建者创建工厂对象 SqlSessionFactory
        SqlSessionFactory factory = builder.build(in);
        //4.使用 SqlSessionFactory 生产 SqlSession 对象
        SqlSession session = factory.openSession();
        //5.使用 SqlSession 创建 dao 接口的代理对象
        StudentMapper studentMapper = session.getMapper(StudentMapper.class);

        Student jack = new Student(10, "jack");
        //增
        studentMapper.addStudent(jack);
        //删
        studentMapper.deleteStudentById(1);
        //查
        List<Student> students = studentMapper.findAll();
        for (Student student : students) {
            System.out.println(student);
        }

        //7.释放资源
        session.close();
        in.close();
    }
}

注:仅用于学习交流