MyBatis相比JDBC的好处有哪些?

正文开始前先简单介绍一下两种方法,可自行跳转查看对应部分

一、JDBC

JDBC简介:

JDBC:java database connectivity,简称jdbc。是一种标准Java应用编程接口,用来连接Java和数据库。

传统JDBC执行步骤:

导入驱动jar包

Class.forName("com.mysql.jdbc.Driver"); //注册相关数据库驱动

Connection conn = DriverManager.getConnerction(url,username,pass); //创建数据库连接
/*
url:连接数据库的地址 例如:"jdbc:mysql://127.0.0.1:3306/test"  
其中127.0.0.1是回送地址,指本地机,也可以用localhost;3306是端口号;test是数据库的名字。
username:登录数据库所用的用户名。
pass:登录数据库所用的密码。
*/

String sql = "sql语句";
//select * from one;
//insert one value(?,?);

//创建statement声明
statement sm = conn.createStatement();
//ps声明可以绑定sql中?的值
PreparedStatement ps= conn.prepareStatement(sql);
ps.setint(1,1); // 第一个?的值为1
ps.setString(2,"Hello"); //第二个?的值为字符Hello

//以增加、更新、删除为例,i为受影响的行数
int i = sm.executeUpdate(sql);  //ps.executeUpdate(sql)
ResultSet rs = sm.execute(sql); //select语句用ResultSet来接收结果

while(rs.nesxt()){
    System.out.print(rs.getInt("id")); //获取结果集中为id的列的值并打印
}


//释放资源
rs.close();
sm.close();
conn.close();

 二、MyBatis

MyBatis简介:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 (百度百科)

简单来说封装了JDBC,使JDBC使用更简便。

MyBatis步骤:

导入jar包

配置文件MyBatisConfig.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核心根标签-->
<configuration>
    <!--引入数据库配置properties-->
    <properties resource="jdbc.properties"/>

    <!--environments 配置数据库环境,环境可以有多个,用default属性指定使用的是哪个-->
    <environments default="mysql2">
        <!--environment配置数据库环境,id属性唯一标识-->
        <environment id="mysql">
            <!--transactionManager事务管理  type属性 采用jdbc默认的事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--dataSource 数据源信息 type属性 连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test2"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
        <environment id="mysql2">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <!--${driver},$引用配置文件里面的对应的字段-->
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--mappers引入映射配置文件,里面存放SQL语句-->
    <mappers>
        <!--mapper 引入指定的映射配置文件 resource属性指定映射配置文件的路径-->
        <mapper resource="StudentMapper.xml"/>
    </mappers>
</configuration>

数据库配置文件jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=123456
//里面的配置和JDBC一样

StudentMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--DTD约束-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
    mapper:核心根标签
    namespace属性:名称空间  和对应的接口文件名一致
-->
<mapper namespace="StudentMapper">
    <!--select等等sql标签
    id:唯一标识
    resultType:指定结果映射对象类型 这里举例一个名为student的实体类
    parameterType:指定参数映射对象类型
    #{id} 里面的id可以动态获取传进来的参数里对应的id字段
    -->
    <select id="selectAll" resultType="student">
        SELECT * FROM student
    </select>
    <select id="selectById" resultType="student" parameterType="int">
        select * from student where id = #{id}
    </select>
    <insert id="insert" parameterType="student">
        insert into student value (#{id},#{name},#{pass})
    </insert>
    <update id="updateById" parameterType="student">
        update student set name = #{name} , pass = #{pass} where id = #{id}
    </update>
    <delete id="deleteById" parameterType="int">
        delete from student where id = #{id}
    </delete>
</mapper>

 StudentMapper接口

public interface StudentMapper {
    List<Student> selectAll();
    Student seleceById(Integer id);
    Integer insert(Student stu);
    Integer update(Student stu);
    Integer delete(Integer id);
}

 StudentService接口(业务层)

public interface StudentService {
    List<Student> selectAll();
    Student seleceById(Integer id);
    Integer insert(Student stu);
    Integer update(Student stu);
    Integer delete(Integer id);
}

StudentServiceImpl

public class StudentServiceImpl implements StudentService {
    //创建持久层对象
    private StudentMapper mapper = new StudentMapperImpl();
    @Override
    public List<Student> selectAll() {
        return mapper.selectAll();
    }

    @Override
    public Student seleceById(Integer id) {
        return mapper.seleceById(id);
    }

    @Override
    public Integer insert(Student stu) {
        return mapper.insert(stu);
    }

    @Override
    public Integer update(Student stu) {
        return mapper.update(stu);
    }

    @Override
    public Integer delete(Integer id) {
        return mapper.delete(id);
    }
}

JavaTest文件(演示一种方法)

@Test
public void selectAll() throws IOException {
    //加载核心配置文件
    InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    //获取SqlSession工厂对象
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
    //通过SqlSession工厂对象获取SQLSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();
    //执行sql语句
    List<Student> stus = sqlSession.selectList("StudentMapper.selectAll");
    for (Student student : stus) {
        System.out.println(student);
    }
    sqlSession.close();
    is.close();
}

三、对比

消除了JDBC大量冗余的代码,不需要手动开关连接;MyBatis的sql语句在xml文件里面编写,改变sql语句不再需要重新编译:

从上文中我们可以看到JDBC每次都需要打开关闭数据库,编写SQL语句。

而使用MyBatis我们的SQL语句只需要保存在一个xml文件中,还可以使用注解方式,直接写在Mapper文件里,后期改变的时候只需要改变一个地方,xml文件或者Mapper里的语句,而JDBC需要在每一个需要使用SQL的文件中。

在后面使用Spring框架后,我们可以更加轻松的使用MyBatis进行数据库的操作,省去is流读取MyBatis配置文件。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值