MyBatis框架入门实现全查,添加,删除,修改,模糊查询

一、Mybatis框架简介:

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、 存储过程以及高级映射。

MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使

用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary

Java Object,普通的 Java 对象)映射成数据库中的记录。

也就是说MyBatis 是一个半自动 ORM 框架,其本质是对 JDBC 的封装。使用 MyBatis

重点需要程序员编写 SQL 命令,不需要写一行 JDBC 代码。

1.1Mybatis优缺点

优点:

1、简单易学,容易上手(相比于 Hibernate)基于SQL编程。
2、消除了JDBC大量冗余的代码,不需要手动开关连接。
3、很好的与各种数据库兼容(因为 MyBatis 使用JDBC来连接数据库,所以只要JDBC 支持的数据库 MyBatis 都支持,而JDB提 供了可扩展性,所以只要这个数据库有针对Java的jar包就可以就可以与 MyBatis 兼容),开发人员不需要考虑数据库的差异性。
4、提供了很多第三方插件(分页插件 / 逆向工程)。

5、能够与Spring很好的集成。
6、如果使用映射文件的话,可以让代码和配置文件完全分离。只要方法的定义没有改变,那么只需要修改配置文件就可以达到修改的目的。


缺点:

SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
 

1..2 Mybatis的工作原理

  Mybatis的工作原理如上图,需要首先创建一个Mybatis的全局配置文件mybatis-config.xml(名称不固定,可以随便起),其次是多个mapper.xml配置文件用来书写sql语句,为了能够使用这些配置文件,我们需要通过SqlSessionFactory创建一个SqlSession对象(这个对象是Mybatis的核心对象,CRUD都是通过该对象进行调用),后通过executor底层执行器执行sql语句,得到结果集返回。

二、mybatis书写步骤:

2.1.创建测试的数据库

2.1.1自行添加数据,这是我的数据 

3.创建一个Java项目并导入mybatis框架的jar包

4.创建跟表对应的实体类。

在src中创建bean包,然后创建Emp实体类。

 5.创建针对表操作的接口类。

6.创建对应的sql映射配置文件com.su.dao.EmpDaoMapper.xml

 在dao接口的同目录下创建跟接口名字一样的配置文件。

 7.在src目录中创建mybatis框架的核心配置文件。

8.在测试类中进行测试 

 三、MyBatis框架入门实现全查,添加,删除,修改,模糊查询

具体步骤如上介绍

实现代码如下:

3.1.实体类bean包中的Emp(emp:对应数据库的名字)

package com.su.bean;

public class Emp {
    private Integer eid;
    private String ename;
    private String dept;
    private String jop;
    private Integer sal;
    private String phone;
    private String address;

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public String getJop() {
        return jop;
    }

    public void setJop(String jop) {
        this.jop = jop;
    }

    public Integer getSal() {
        return sal;
    }

    public void setSal(Integer sal) {
        this.sal = sal;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "emp{" +
                "eid=" + eid +
                ", ename='" + ename + '\'' +
                ", dept='" + dept + '\'' +
                ", jop='" + jop + '\'' +
                ", sal=" + sal +
                ", phone='" + phone + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

3.2.dao包中的EmpDao接口(全查,添加,删除,修改,模糊查询)

package com.su.dao;

import com.su.bean.Emp;

import java.util.List;

public interface EmpDao {
//   全查
    List<Emp>selectAll();
//   单查(根据员工id查)
    Emp selectByeid(int eid);
//   添加
    int add(Emp emp);
//   修改
    int update(Emp emp);
//   删除
    int delete(int eid);
//   模糊查询
    List<Emp>seach(String keyword);
}

3.3.在接口的包中创建对应的mapper映射配置文件及(全查,添加,删除,修改,模糊查询的sql语句)

<?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="com.su.dao.EmpDao">
    <!-- 全查   -->
    <select id="selectAll" resultType="com.su.bean.Emp">
        select * from emp;
    </select>
    <!-- 添加   -->
    <insert id="add" parameterType="com.su.bean.Emp">
     insert into emp(ename,dept,jop,sal,phone,address) values (#{ename},#{dept},#{jop},#{sal},#{phone},#{address});
    </insert>
    <!-- 删除   -->
    <delete id="delete" parameterType="int">
       delete from emp where eid=#{eid};
    </delete>
    <!-- 单查   -->
    <select id="selectByeid" parameterType="int" resultType="com.su.bean.Emp">
        select * from emp where eid=#{eid};
    </select>
    <!-- 修改   -->
    <update id="update" parameterType="com.su.bean.Emp">
        update emp set ename=#{ename},dept=#{dept},jop=#{jop},sal=#{sal},phone=#{phone},address=#{address} where eid=#{eid};
    </update>
    <!--模糊查询 -->
    <select id="seach" parameterType="String" resultType="com.su.bean.Emp">
        select  * from emp where ename like concat('%',#{keyword},'%')
    </select>
</mapper>

3.4.在src目录中创建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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment >
        <environment id="oracle">
            <transactionManager type=""></transactionManager>
            <dataSource type=""></dataSource>
        </environment>
    </environments>
    <!--加载mapper配置文件-->
    <mappers>
        <mapper class="com.su.dao.EmpDao" />
    </mappers>
</configuration>

3.5.测试类test代码

package com.su.test;

import com.su.bean.Emp;
import com.su.dao.EmpDao;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

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

public class EmpTest {
    InputStream stream =null;
    SqlSessionFactoryBuilder builder =null;
    SqlSessionFactory factory =null;
    SqlSession sqlSession =null;
    EmpDao empDao =null;
    @Before
    public void  init() throws IOException {
        //1.加载核心配置文件的字节输入流
        stream = Resources.getResourceAsStream("mybatis03.xml");
        //2.创建SqlSessionFactory的构建对象--框架使用的是构建者模式
        builder = new SqlSessionFactoryBuilder();
        //3.通过构建对象加载配置文件的输入流获取SqlSessionFactory
        factory = builder.build(stream);
        //4.通过工厂对象获取SqlSession对象----执行JDBC操作的
        sqlSession = factory.openSession();
        //5.通过SqlSession对象获取接口对应的代理对象
        empDao = sqlSession.getMapper(EmpDao.class);
    }
    //    全查
    @Test
    public void testSelectAll(){
        List<Emp> empList = empDao.selectAll();
        //7.遍历集合
        for (Emp emp : empList) {
            System.out.println(emp);
        }
    }
    //    添加
    @Test
    public void testAdd() {
        Emp emp = new Emp();
        emp.setEname("mybatis03");
        emp.setDept("123");
        emp.setJop("1234567");
        emp.setSal(122);
        emp.setPhone("123456789");
        emp.setAddress("河南");
        int n = empDao.add(emp);
        if (n > 0) {
            System.out.println("添加成功!");
        }
    }
    //    删除
    @Test
    public void testDelete(){
        int n=empDao.delete(1);
        if (n>0){
            System.out.println("删除成功!");
        }
    }

    //    单查
    @Test
    public void testSelectByUid(){
        Emp emp = empDao.selectByeid(2);
        System.out.println(emp);

    }
    //    修改
    @Test
    public void testUpdate() {
        //1.数据库回显
        Emp oldemp = empDao.selectByeid(3);
        System.out.println("修改前" + oldemp);
        //2.根据需要修改字段值
        oldemp.setEname("李四");
        oldemp.setAddress("河南");
        //3.执行数据库更新
        empDao.update(oldemp);
        //4.再次查询
        Emp newemp =empDao.selectByeid(3);
        System.out.println("修改后" + newemp);
    }
    //    模糊查询
    @Test
    public void testSeach(){
      List<Emp> empList=empDao.seach("张");
      for(Emp emp:empList){
          System.out.println(emp);
      }
    }

    //@After:后置通知
    @After
    public void distroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        stream.close();
    }

}

3.6.运行展示

全查的运行效果

添加的运行效果 

 

 单查的运行效果 

 修改的运行效果 

 模糊查询的运行效果 

  删除的运行效果 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值