Bootstrap

MyBatis框架介绍、部署及使用

一、MyBatis介绍

1.1 框架概念

**框架:**就是软件的半成品,完成了软件开发过程中的通用操作,开发者只需很少或者不用进行加工,就能 实现特定的功能。从而简化开发人员在开发过程中的步骤,提高开发效率。

1.2 常用框架

  • MVC框架:简化Servlet的开发步骤
    • Struts2
    • SpringMVC
  • 持久层框架:完成数据库操作框架
    • apache DBUtils
    • Hibernate
    • Spring JPA
    • MyBatis
  • 胶水框架:Spring整合作用

SSM: Spring SpringMVC MyBatis

SSH:Spring Struts Hibernate

1.3 MyBatis介绍

MyBatis:是一个半自动的ORM框架

​ ORM(Object Relational Mapping) 对象关系映射,将Java中的一个对象与数据表中一行记录一一对应

​ ORM框架提供了实体类与数据表的映射关系,通过映射文件的配置,实现对象的持久化。

  • MyBatis,前身是iBatis,iBatis是Apache软件基金会提供的一个开源项目
  • 2010年,iBatis迁移到Gogle code,正式更名为MyBatis
  • 2013年,迁移到Github托管
  • MyBatis特点:
    • 支持自定义SQL/存储过程
    • 对原有的JDBC进行了封装,几乎消除了所有的JDBC代码,让开发者只需关注SQL本身
    • 支持XML和注解配置方式自动完成ORM,实现结果映射

二、MyBatis框架部署

框架部署,将框架引入到我们的项目中

2.1 创建Maven项目

  • Java工程
  • JavaWeb工程

2.2 添加MyBatis依赖

  • 在pom.xml中添加依赖

    • mybatis
    • mysql driver
    	<!--Mysql-->	
    	<dependency>
          <groupId>com.mysql</groupId>
          <artifactId>mysql-connector-j</artifactId>
          <version>8.2.0</version>
        </dependency>
        <!-- mybatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.6</version>
        </dependency>
    

    2.3 创建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>
    <!--配置数据库连接信息-->
    <environments default="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/db_test?characterEncoding=utf-8"/>
                <property name="username" value="root"/>
                <property name="password" value="***"/>
            </dataSource>
        </environment>
    </environments>
</configuration>
  • 在项目工程resource中新建mybatis-config.xml
  • mybatis-config.xml中配置数据库连接信息

三、Mybatis框架使用

案例:学生信息的数据库操作

3.1 创建数据表

CREATE TABLE `students` (
  `stu_num` char(8) NOT NULL,
  `stu_name` varchar(20) NOT NULL,
  `stu_denger` char(2) NOT NULL,
  `stu_age` int NOT NULL,
  `stu_tel` char(11) NOT NULL,
  `stu_qq` varchar(11) DEFAULT NULL,
  `cid` int DEFAULT NULL,
  PRIMARY KEY (`stu_num`),
  KEY `FK_STUDENT_CLASS` (`cid`),
  CONSTRAINT `FK_STUDENT_CLASS` FOREIGN KEY (`cid`) REFERENCES `class` (`class_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;


3.2 创建实体类

package com.feng.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
    private String stu_num;
    private String stu_name;
    private int age;
    private String stu_denger;
    private String stu_tel;
    private String stu_qq;
    private int cid;
}

3.3 创建DAO接口

创建接口,并定义方法 addStudent;

package com.feng.dao;

import com.feng.pojo.Student;

public interface StudentDao {
    public int addStudent(Student student);
}

3.4 创建DAO接口的映射文件

  • 在resources目录下,新建mappers文件夹
  • 在mappers文件夹中新建StudentMapper.xml的映射文件(与实体类同名映射文件)
  • 在映射文件中,对DAO中定义的方法进行实现
<?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属性要指定实现DAO接口的全限定名-->
<mapper namespace="com.feng.dao.StudentDao">
    <insert id="addStudent" parameterType="com.feng.pojo.Student">
        insert into students(stu_name,stu_name,stu_age,stu_denger,stu_tel,stu_qq,cid)
        values (#{stu_num},#{stu_name},#{stu_age},#{stu_denger},#{stu_tel},#{stu_qq},#{cid})
    </insert>
</mapper>

3.5 将映射文件添加到主配置文件

  <mappers>
     <mapper resource="mappers/StudentMapper.xml"></mapper>
  </mappers>

四、单元测试

package com.feng.dao;

import com.feng.pojo.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 static org.junit.Assert.*;

public class StudentDaoTest {

    @org.junit.Test
    public void addStudent() throws IOException {
        //加载mybatis配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        //构建session工厂
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //会话工厂
        SqlSessionFactory factory = sqlSessionFactoryBuilder.build(inputStream);
        //会话(连接)
        SqlSession sqlSession = factory.openSession();
        //通过会话,获取dao对象
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        //测试dao方法
        Student student = new Student();
        student.setStu_num("9");
        student.setStu_name("太乙真人");
        student.setStu_age(88);
        student.setStu_denger("男");
        student.setStu_tel("123312312");
        student.setStu_qq("877877");
        student.setCid(2);

        int i = studentDao.addStudent(student);
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
        System.out.println(i);

    }
}
;