认识Mybatis并实现增删查改

目录

一.Mybatis特性

二.常见持久层技术的比较

三.搭建Mybaits环境

四.使用Mybatis

 五.通过Mybatis实现增删改

 六.实现数据库的查询操作


一.Mybatis特性

  1. 定制化SQL:MyBatis允许开发人员编写、优化和管理自定义的SQL语句,可以满足复杂查询和存储过程等高级操作的需求。

  2. 避免JDBC代码:MyBatis抽象了JDBC底层的繁琐操作,开发人员无需手动设置参数和获取结果集,通过配置文件或注解即可完成数据库操作。

  3. 灵活的映射配置:MyBatis通过简单的XML配置文件或者注解来实现对象与数据库记录之间的映射关系,将接口和Java的POJO对象映射到数据库表中的记录。

  4. 高度可定制:MyBatis提供了丰富的配置选项和插件机制,可以按照项目需求进行灵活的定制和扩展。开发人员可以根据具体情况选择合适的配置方式。

二.常见持久层技术的比较

JDBC:

  • 优点:JDBC是Java连接数据库的标准接口,具有广泛的适应性和灵活性。可以直接编写SQL语句,对数据库操作更为直观。
  • 缺点:需要在代码中编写和管理SQL语句,导致代码与SQL耦合度高,难以维护和修改。开发效率较低,代码冗长。

Hibernate和JPA:

  • 优点:操作简便,开发效率高。通过对象关系映射(ORM)实现数据库操作,屏蔽了底层SQL细节,减少了手动编写SQL的工作量。
  • 缺点:对于复杂的SQL查询,可能需要绕过框架,使用特定的查询语言。自动生成的SQL语句可能不容易进行特殊优化。在处理大量字段的POJO进行部分映射时会比较困难。反射操作较多可能导致数据库性能下降。

MyBatis:

  • 优点:轻量级且性能出色,具有很高的执行效率。SQL和Java代码相分离,功能边界清晰,Java代码专注于业务逻辑,SQL语句专注于数据操作。可以灵活地编写和优化SQL语句。
  • 缺点:相对于Hibernate,开发效率稍逊一些,需要手动编写和管理SQL语句。

三.搭建Mybaits环境

使用工具Maven idea Mysql

1.配置

在maven的pom.xml中需要配置三个模块,mysql-connect-java、mabatis、junit

配置如下:


    
      mysql
      mysql-connector-java
      8.0.33
    
      

    
      org.mybatis
      mybatis
      3.5.7
    

      
      
          junit
          junit
          RELEASE
          test
      

2.构建连接数据库的xml

认识Mybatis并实现增删查改_第1张图片

 在resources中(如果没有resource则创建一个)创建名称为mybatis-config.xml的配置文件

配置内容如下






    

        

            

            
                


                

                
                
            
        
    

    

        
    



四.使用Mybatis

1.创建实体类

 在完成了搭建环境后,在Java下的com下创建目录pojo,创建一个需要与数据库映射对应的类,比如创建一个用户类

认识Mybatis并实现增删查改_第2张图片

 创建好后设置好构造函数、getter、toString,如下

package com.alphamilk.mybatis.pojo;

public class User {
//    设置名字
    private String name;
//    设置年龄
    private int age;
//    设置邮箱地址
    private String email;
//    设置身份id
    private int  id;

    public User(String name, int age, String email, int id) {
        this.name = name;
        this.age = age;
        this.email = email;
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getEmail() {
        return email;
    }

    public int getId() {
        return id;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", email='" + email + '\'' +
                ", id=" + id +
                '}';
    }
}

 2.在数据库中创建同样创建一样的表

Sql语言如下:

create table table_user
(
	name varchar(10) null,
	age int null,
	email varchar(20) null,
	id int null
);

认识Mybatis并实现增删查改_第3张图片

 3.创建业务接口类

首先在com下创建一个mapper包,里面再创建一个接口 创建映射接口(User对应的就是UserMapper)

认识Mybatis并实现增删查改_第4张图片

 4.创建接口实现映射

创建接口后,为了实现接口的功能,又需要实现java与sql的分离,则需要用xml配置实现,在resource包下创建一个mappers包,写一个对应的xml






    





    
        insert into table_user value ('何生',20,'[email protected]',001)
    

5.实现接口映射后,就需要将映射的xml导入到mybatis-config.xml中

    
        
        
    

5.最后创建测试类,测试Mybatis是否能够正常运行

创建MybatisTest类

认识Mybatis并实现增删查改_第5张图片

 内容如下:

package com.alphamilk.mybatis;

import com.alphamilk.mybatis.mapper.UserMapper;
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.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatisTest {
    @Test
    public void  Test() throws IOException {
//       创建核心输入流
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//        创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//      获取SqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//        获取Session会话对象,会话对象用以提供
        SqlSession sqlSession = sqlSessionFactory.openSession();
//        创建动态代理对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        通过代理对象调用方法insertUser
        int result =  mapper.insertUser();
//        执行完后需要记得提交事务,才会保留内容到数据库
        sqlSession.commit();
//      执行完后关闭会话对象
        System.out.println(result);
        sqlSession.close();

    }
}

注意用的Resource是包org.aphache.ibatis.io

认识Mybatis并实现增删查改_第6张图片

 执行后可以在数据库中查看表

认识Mybatis并实现增删查改_第7张图片

可以看到正常插入进去了


 五.通过Mybatis实现增删改

增删查改,除了查,其他操作跟上述一样。

这里展示其源码

由于Test测试类中有太复杂的操作,所以在com目录下创建了一个util工具类,类中实现一个方法就是给我们返回SqlSession操作数据库对象。

代码如下

package com.alphamilk.mybatis.util;

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.InputStream;

public class MybatisUtil {

    public static SqlSession getSession(){
        SqlSession sqlSession =null;
        try {
//            配置核心配置输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//           获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//            获取sqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//            获取sqlSession对象
            sqlSession = sqlSessionFactory.openSession();
            return sqlSession;
        }catch (Exception e){
            e.printStackTrace();
        }
        return sqlSession;
    }
}

由于需要实现删该的方法,所以在接口中需要实现方法增加

package com.alphamilk.mybatis.mapper;

public interface UserMapper {
//    实现用户插入
    public int insertUser();

//   实现用户信息修改
    public int UpdateUser();

//    实现用户信息消除
    public int DeleteUser();

}

对应的映射也需要增加






    


    
        insert into table_user value ('何生',20,'[email protected]',001)
    


    
        update table_user set name ='黄小龙'where id=1
    


    
        delete from table_user where name='黄小龙'
    

最后测试类实现

package com.alphamilk.mybatis;

import com.alphamilk.mybatis.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MybatisTest {
    @Test
    public void Test(){
        SqlSession sqlSession = null;
        sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        执行insert方法
//        mapper.insertUser();
//        执行修改方法
        mapper.UpdateUser();
//        执行删除方法
//        mapper.DeleteUser();
    }
}

实现数据修改效果

认识Mybatis并实现增删查改_第8张图片

 实现数据删除效果

认识Mybatis并实现增删查改_第9张图片


 六.实现数据库的查询操作

由于数据库查询的操作需要返回的是数据的结果

在设置xml时候,需要而外设置参数resultType 或者 resultMap

  •  resultType:设置结果类型,即查询的数据要转换的java类型
  •  resultMap,处理一对一或者一对多的映射关系


    

测试类内容

package com.alphamilk.mybatis;

import com.alphamilk.mybatis.mapper.UserMapper;
import com.alphamilk.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MybatisTest {
    @Test
    public void Test(){
        SqlSession sqlSession = null;
        sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        执行insert方法
//        mapper.insertUser();
//        执行修改方法
//        mapper.UpdateUser();
//        执行删除方法
//        mapper.DeleteUser();
//        执行通过id查询
        User user =  mapper.getUserById();
        System.out.println(user);
        sqlSession.commit();
        sqlSession.close();

    }
}

认识Mybatis并实现增删查改_第10张图片

 如果有多个结果则返回时候需要用集合接收

当前xml配置






    


    
        insert into table_user value ('何生',20,'[email protected]',001)
    


    
        update table_user set name ='黄小龙'where id=1
    


    
        delete from table_user where name='黄小龙'
    



    
    

    

 测试类内容

package com.alphamilk.mybatis;

import com.alphamilk.mybatis.mapper.UserMapper;
import com.alphamilk.mybatis.pojo.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.Iterator;
import java.util.List;

public class MybatisTest {
    @Test
    public void Test(){
        SqlSession sqlSession = null;
        sqlSession = com.alphamilk.mybatis.util.MybatisUtil.getSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//        执行insert方法
//        mapper.insertUser();
//        执行修改方法
//        mapper.UpdateUser();
//        执行删除方法
//        mapper.DeleteUser();
//        执行通过id查询
//        User user =  mapper.getUserById();
//        System.out.println(user);
//        查询所有用户的信息
        List list = mapper.getUserAll();
        Iterator iterator = list.listIterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        sqlSession.commit();
        sqlSession.close();

    }
}

认识Mybatis并实现增删查改_第11张图片

认识Mybatis并实现增删查改_第12张图片


深度了解Mybatis的核心配置

Mybatis的核心配置_Alphamilk的博客-CSDN博客

你可能感兴趣的:(SSM框架,学习,mybatis)