09 myBatis-01-基本使用


介绍项目中如何使用myBais完成数据库的访问

0、项目文件结构

1、pom.xml配置

引入myBatis包

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

    4.0.0

    org.rui
    01QuickStart
    1.0-SNAPSHOT
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    7
                    7
                
            
        
    

    
        
        
            org.springframework
            spring-context
            5.3.0
        

        
        
            org.springframework
            spring-aop
            5.3.0
        

        
        
            org.springframework
            spring-aspects
            5.3.0
        

        
        
        
            org.springframework
            spring-jdbc
            5.3.0
        

        
        
        
            mysql
            mysql-connector-java
            8.0.11
        

        
        
        
            org.mybatis
            mybatis
            3.5.6
        

        
        
        
            junit
            junit
            4.13
            test
        

        
        
        
            log4j
            log4j
            1.2.17
        

    


2、Mybatis主配置文件

在main/Resources跟目录下创建mybatis-config.xml文件,内容如下:

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


    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

3、单个表对应的内容

3.1、模型类

根据表接口定义模型类,属性名和字段名保持统一

package db.Domain;

import org.springframework.stereotype.Component;

import java.sql.Date;

@Component(value = "employee")
public class Employee {
    private String emplId;
    private String name;
    private String gender;
    private Date hireDate;
    private int salary;

    public String getEmplId() {
        return emplId;
    }
    public void setEmplId(String emplId) {
        this.emplId = emplId;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Date getHireDate() {
        return hireDate;
    }
    public void setHireDate(Date hireDate) {
        this.hireDate = hireDate;
    }
    public int getSalary() {
        return salary;
    }
    public void setSalary(int salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "emplId='" + emplId + '\'' +
                ", name='" + name + '\'' +
                ", gender=" + gender +
                ", hireDate=" + hireDate +
                ", salary=" + salary +
                '}';
    }
}

3.2、数据接口类

根据业务需求定义所需要的相关数据操作方法

package db.Dao;

import db.Domain.Employee;
import org.apache.ibatis.annotations.Param;

import java.util.List;

//数据访问接口
public interface EmployeeDao {

    //查询单个对象,单个参数时@Param可以省略
    public Employee queryByEmplId(@Param("emplId") String empId);

    //查询多个对象,多个参数时需要通过@Param声明
    public List queryListBySalary(@Param("start") int start,@Param("end") int end);

    //新增数据
    public int insert(Employee emp);

    //更新数据
    public int update(Employee emp);

    //删除数据
    public void delete(@Param("emplId") String empId);
}

3.3、Mapper文件

文件保存在main/Resources/db/Mapper/目录内

右击:Resource选择创建目录,输入“db/Mapper”即可。

根据接口类内部的方法定义Mapper内的相关操作映射

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



namespace="db.Dao.EmployeeDao">
    
    
    
    
    
    
        insert into employee(emplId,`name`,gender,hireDate,salary) values(#{emplId},#{name},#{gender},#{hireDate},#{salary})
    
    
    
        update employee set `name`=#{name},gender=#{gender},salary=#{salary} where emplId=#{emplId}
    
    
        delete from employee where emplId=#{emplId}
    

3.4、主配置文件引用Mapper文件

通过resource属性指向表的Mapper文件

见2内红色标注代码:

3.5、测试代码

import db.Dao.EmployeeDao;
import db.Domain.Employee;
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;
import java.sql.Date;
import java.util.List;

public class myTest {
    @Test
    public void TestMyBaisc() throws IOException {
        //1 读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //2 构建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //3 构建SqlSession,并执行mapper内操作
        try (SqlSession session = sqlSessionFactory.openSession()) {
            //获取接口代理实现
            EmployeeDao dao = session.getMapper(EmployeeDao.class);
            //单数据查询
            {
                System.out.println("==单数据查询");
                Employee empl = dao.queryByEmplId("001");
                System.out.println(empl.toString());
            }
            //数据删除
            {
                dao.delete("004");
                session.commit();
            }
            //数据新增
            {
                System.out.println("==数据新增");
                Employee empl = new Employee();
                empl.setEmplId("004");
                empl.setName("李晓明");
                empl.setGender("男");
                empl.setHireDate(new Date(2020,10,10));
                empl.setSalary(2000);
                int result = dao.insert(empl);
                session.commit();
                System.out.println("行数:"+result);
            }
            //多数据查询
            {
                System.out.println("==多数据查询 - 新增后");
                List list = dao.queryListBySalary(20,5000);
                for (Employee item : list) {
                    System.out.println(item.toString());
                }
            }
            //数据修改
            {
                System.out.println("==数据修改");
                Employee empl = new Employee();
                empl.setEmplId("003");
                empl.setName("刘超");
                empl.setGender("男");
                empl.setHireDate(new Date(2020,10,10));
                empl.setSalary(2000);
                int result = dao.update(empl);
                session.commit();
                System.out.println("行数:"+result);
            }
            //多数据查询
            {
                System.out.println("==多数据查询 - 修改后");
                List list = dao.queryListBySalary(20,5000);
                for (Employee item : list) {
                    System.out.println(item.toString());
                }
            }
        }
        System.out.println("测试完成1");
    }
}

  

SSM