MyBatis---MyBatis简介

  • MyBatis是什么?
  • MyBatis是一个持久化层框架,他与Hibernate的作用类似,当时与Hibernate大大不同.
  • 在开发中直接与数据库交互的操作就是持久化层,但是传统的sql语句,耦合度太高代码重复度过大,虽然Hibernate可以做到全自动封装JDBC的操作,但是Hibernate的sql语句都是为自动生成的,这就导致无法进行sql语句的维护,虽然Hibernate提供有HQL操作,但是相对于MyBatis来说更加的复杂
  • 所以MyBatis属于一个半自动持久化层框架,MyBatis将sql语句交给开发人员编写,而其他的预编译,参数赋值,封装结果等等操作,都自动完成.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MyBatis下载

• 下载地址:• https://github.com/mybatis/mybatis-3

在这里插入图片描述

在这里插入图片描述

HelloWorld

在这里插入图片描述

  1. 使用MySQL数据库创建一个employee数据表

在这里插入图片描述

  • 创建一个Employee.java程序类

public class Employee {
    private Integer id;
    private String ename;
    private Integer age;
    private String job;
}

在这里插入图片描述

  • 创建MyBatis全局配置文件:mybatis-config.xml
  • 这里面需要配置数据库连接信息
  • ${driver}:连接数据库驱动程序
  • ${url}:连接路径
  • ${user}:连接用户名
  • #{password}:用户密码
<?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="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisdb"/>
                <property name="username" value="root"/>
                <property name="password" value="mysqladmin"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="config/BlogMapper.xml"/>
    </mappers>
</configuration>
  • 定义BlogMapper.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="mao.shu.mybatis.entity">
    <select id="employee" resultType="mao.shu.mybatis.entity.Employee">
        select id,ename,age,job from employee where id = #{id}
    </select>
</mapper>
  • 定义测试类

public class EmployeeTest {

    @Test
    public void test() throws IOException {
        String resource = "config/mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession session = sqlSessionFactory.openSession();
        //第一个字符串参数为 sql映射文件中 namespace+select的ID值
        //第二个为数据表中的要查询数据的主键字段
        Employee emp = session.selectOne("mao.shu.mybatis.entity.employee",1);
        System.out.println(emp);
    }
}

在这里插入图片描述

接口式编程

  • 虽然直接使用SqlSession类的方法可以取得对应的数据,但是使用该方法需要暴露数据的配置文件中的namespace和id值作为字符串参数传入,这增加了书写错误的概率.

  • 更好的方式为:MyBatis的新版本的方式,创建一个Java类的接口,在接口中定义操作数据库的方法,而不需要定义接口的子类,由MyBatis创建代理类对象完成接口的实现.我们在查询数据的时候,只需要传入Java类接口的类型即可

  • 示例:创建Employee类的操作接口—EmployeeMapper

package mao.shu.mybatis.dao;

import mao.shu.mybatis.entity.Employee;

public interface EmployeeMapper {
    /**
     * 定义查询的方法
     * @param id
     * @return
     */
    public Employee getEmp(Integer id);
}

  • 修改sql映射文件,将<mapper>标签中的namespace属性改为接口的全类名
  • 将每个<select>标签的id值改为定义的查询方法名称
<mapper namespace="mao.shu.mybatis.dao.EmployeeMapper">
    <select id="getEmp" resultType="mao.shu.mybatis.entity.Employee">
        select id,ename,age,job from employee where id = #{id}
    </select>
</mapper>
  • 测试方法:

    @Test
    public voie testInterface(){
        EmployeeMapper employeeMapper = this.session.getMapper(EmployeeMapper.class);
        Employee employee = employeeMapper.getEmp(1);
        System.out.println(employee);
    }

在这里插入图片描述

小结

  • 接口式编程
  • 以前的做法是每一个DAO接口对应一个DAOIMPL实现类
  • 而使用mybatis之后编写的接口不是需要编写实现类,而是由MyBatis来生成一个代理对象

在这里插入图片描述

MyBatis的重要配置文件

  1. 全局配置文件:
    • 全局配置文件中包含数据库连接池信息,事物管理器’
    • sql映射文件:保存了每一个sql语句的映射信息.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值