[Mybatis入门] 如何使用Mybatis替换JDBC连接操作

目录

🍉什么是Mybatis

🍉创建连接

🍉操作SQL


🍉什么是Mybatis

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

简化JDBC, 完成实体类和表的映射关系

🍉创建连接

如题, 此次只是使用Mybatis替换JDBC创建连接, 那么具体怎么做?

--------在Mybatis中使用SqlSession对象调用openSession()方法来创建连接

使用Mybatis创建连接的步骤:

1. 创建Mybatis核心配置文件,进行配置(添加约束, 环境配置)

2. 创建一个SqlSessionFactoryBuilder对象 

3. 使用Resources.getResourcesAsStream(配置文件地址)   返回一个输入流

4. SqlSessionFactoryBuilder对象 调用build(输入流)    返回一个SqlSessionFactory

5. SqlSessionFactory对象调用openSession()方法     返回SqlSession连接对象

mybatis-comfig.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!--导入MyBatis核心配置文件的约束 DTD约束-->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
<!-- 默认使用的数据源-->
    <environments default="mybatis-mysql">
<!--        当前数据源id-->
        <environment id="mybatis-mysql">
<!--            使用什么方式进行事务管理-->
            <transactionManager type="JDBC"></transactionManager>
<!--            是否使用连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/bj394_jdbc?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>


<!-- 关联保存sql语句的配置文件-->
    <mappers>
        <mapper resource="EmployeeMapper.xml"></mapper>
    </mappers>
</configuration>

MybatisDemo

package com.abc.mybatis;

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;

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //使用Resources的静态方法getResourceAsStream获取resources中的文件
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        //sqlSessionFactoryBuilder调用build(输入流) 返回SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
        //通过sqlSessionFactory调用openSession方法 返回SqlSession连接对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);//true代表自动开启事务,一条sql一个事务
    }
}

🍉操作SQL

Mybatis将sql从代码中分离到xml文件, 解除sql与程序代码的耦合,更灵活

EmployeeMapper

<?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 为一个身份,java代码通过这个身份找到对应的sql语句-->
<mapper namespace="EmployeeMapper">
    <!-- id是之后找到这条执行语句的关键, resultType表示将查询结果映射成哪一个类-->
    <select id="selectAll" resultType="com.abc.entity.Employee">
        SELECT * FROM employee;
    </select>

    <select id="selectById" resultType="com.abc.entity.Employee">
        SELECT * FROM employee WHERE eid = #{eid};  <!-- 占位符 -->
    </select>

    <insert id="InsertDatas">
        INSERT INTO employee VALUES(NULL,#{name},#{job},#{salary}); <!-- 实际上是通过传入对象调用get占位符中字段 赋值-->
    </insert>

    <update id="UpdateById">
        UPDATE employee SET name =#{name} WHERE eid =#{eid};
    </update>

    <delete id="DeleteData">
        DELETE FROM employee WHERE name = #{name};
    </delete>
</mapper>

MyBatisQueryDemo: 

package com.abc.mybatis;

import com.abc.entity.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.util.List;

public class MybatisQueryDemo {
    public static void main(String[] args) throws IOException {
        SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession(true);
        //前提要有 表和类的对应
        List<Employee> employees = sqlSession.selectList("EmployeeMapper.selectAll");<!--这里是通过配置文件中的mapper nameSpace 和sql语句id 找到对应执行的sql-->
        employees.forEach(e-> System.out.println(e));
    }
}

其他的增删改查方法同理

值得注意的一点是, Mybatis同样可以完成类似JDBC中预编译的功能, 避免SQL注入的问题:

在xml中将需要提前占位的字段写为 #{字段名} , 在传入参数的时候, 将数值传入

1. 单个占位符, 直接将数值传入

2. 多个占位符, 将对象传入, 实际上是通过传入对象调用get占位符中字段进行赋值

MybatisUpdateDemo:

package com.abc.mybatis;

import com.abc.entity.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

public class MybatisUpdateDemo {
    public static void main(String[] args) throws IOException {
        SqlSession sqlSession = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession(true);
        int i = sqlSession.update("EmployeeMapper.UpdateById", new Employee(4, "田七", "", 0));
        System.out.println("受影响的行数:"+i);
    }
}

在sql语句中 只将name和eid提前占位, 因此在传入参数的时候, 只找这两个字段进行赋值, 和创建的Employee对象的其他属性无关

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值