Mybatis使用步骤

时间:2024-5-24    作者:老大夫    分类: SSM


  1. 导入依赖
  2. 准备实体类
  3. 创建一个mapper接口和mapper.xml文件
  4. 创建mybatis配置文件
  5. 使用mybatis的API进行数据库查询
    • sqlSessionFactory 全局使用创建sqlSession对象
    • sqlSession业务使用完毕即销毁
    • getMapper(接口.class)获得代理对象
    • 代理对象.方法()即可操作数据库

导入依赖

<!-- mybatis依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>

        <!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
        </dependency>

        <!--junit5测试-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.1</version>
        </dependency>

准备一个实体类

//使用了lombok也可以自己创建里面的Setter和Getter方法等等
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Employee {

    private Integer empId;

    private String empName;

    private Double empSalary;
}

创建mapper接口和mapper.xml文件

//mapper接口
public interface EmployeeMapper {
    //根据id查询员工信息
    Employee queryById(Integer id);

    int deleteById(Integer id);
}
//在resources/mappers文件目录下
//EmployeeMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <!--xml方式写sql语句,没有java代码
            mybatis规定在特定的sql标签里写sql语句
            mapper文件应该有约束就是上面的.tdt文件
        -->
<!-- namespace等于mapper接口类的全限定名,这样实现对应 -->
<mapper namespace="com.atguigu.mapper.EmployeeMapper">

    <!-- 查询使用 select标签
            id = 方法名
            resultType = 返回值类型
            标签内编写SQL语句
            mapper接口不能重载,它只认识id标签名,不可以同名不同参数
     -->
    <select id="queryById" resultType="com.atguigu.pojo.Employee">
        <!-- #{empId}代表动态传入的参数,并且进行赋值!后面详细讲解 -->
        select emp_id empId,emp_name empName, emp_salary empSalary from
        t_emp where emp_id = #{empId}
    </select>

    <select id="deleteById">
        delete from t_emp where emp_id = #{empId}
    </select>
</mapper>

动态变量的使用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.atguigu.mapper.EmployeeMapper">

    <!--
        #{ key }  : 占位符 + 赋值  emp_id = ?   ?=赋值
        ${ key }  : 字符串拼接   " emp_id = "  +  id

        推荐使用#{}  防止sql注入
        总结: 动态值 使用 #{} , 列名,表名,写成${ }
        ?  只能替代值的位置,不能代替容器名(列名、表名、sql关键字)  emp_id = ?  不能写 ? = ?
        sql  select *  from  表  where  列名动态 ${ColumName} = 值动态 #{ColumValue}
    -->

    <select id="queryById" resultType="com.atguigu.pojo.Employee">
        select * from emp_id empId,emp_name empName,emp_salary empSalary
            from e_tmp where emp_id =
    </select>
</mapper>

mybatis配置文件

//在resources文件目录下
//mybatis-config.xml配置文件
<?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表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 -->
    <environments default="development">
        <!-- environment表示配置Mybatis的一个具体的环境 -->
        <environment id="development">
            <!-- Mybatis的内置的事务管理器 -->
            <transactionManager type="JDBC"/>
            <!-- 配置数据源 -->
            <dataSource type="POOLED">
                <!-- 建立数据库连接的具体信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/>
                <property name="username" value="root"/>
                <property name="password" value="1234"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- Mapper注册:指定Mybatis映射文件的具体位置 -->
        <!-- mapper标签:配置一个具体的Mapper映射文件 -->
        <!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 -->
        <!--    对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 -->
        <mapper resource="mappers/EmployeeMapper.xml"/>
    </mappers>
</configuration>

使用mybatis的API进行数据库查询

public class MybatisTest {
    /**
     * 通过mybatis的API进行方法的调用
     *  JdbcTamplate  = new JdbcTamplate()可以直接new出来
     *  Mybatis比较繁琐
     */
    @Test
    public void test() throws IOException {
        //1. 读取外部配置文件(mybatis-config.xml)
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        //2. 创建sqlSessionFactory(全局的)
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //3. 根据sqlSessionFactory去创建sqlSession(每次业务创建一个用完就释放)
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4. 获取接口的代理对象,调用代理对象的方法就会查找mapper接口的方法
        EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee = mapper.queryById(1);
        System.out.println("employee = " + employee);
        //5. 提交事务(非DQL) 和释放资源
        sqlSession.commit();
        sqlSession.close();
    }
}


扫描二维码,在手机上阅读

推荐阅读: