mybatis快速入门(基于Mapper接口编程)

1、准备数据模型,建库建表

CREATE DATABASE `mybatis-example`;

USE `mybatis-example`;

CREATE TABLE `t_emp`(
  emp_id INT AUTO_INCREMENT,
  emp_name CHAR(100),
  emp_salary DOUBLE(10,5),
  PRIMARY KEY(emp_id)
);

INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66);
INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);

2、pom.xml(添加依赖:mysql,mybatis)

    
        
            org.mybatis
            mybatis
        

        
        
            mysql
            mysql-connector-java
        

        
        
            org.junit.jupiter
            junit-jupiter-api
        

        
            org.projectlombok
            lombok
        
    

3、Employee.java(pojo)

package com.atguigu.mybatis.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee {
    private Integer empId;
    private String empName;
    private Double empSalary;
}

4、EmpMapper.java

package com.atguigu.mybatis.mapper;
import com.atguigu.mybatis.pojo.Employee;
import java.util.List;
public interface EmpMapper {

    List getEmployeeList();

    Employee getEmployeeById(Integer empId);
}

5、mybatis-config.xml(mybatis的总配置文件)





    
    
        
        
            
            
            
            
                
                
                
                
                
            
        
    

    
        
        
        
        
        
    

6、EmpMapper.xml






    
    
    

7、MybatisTest.java

package com.atguigu.mybatis;
import com.atguigu.mybatis.mapper.EmpMapper;
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.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
public class MybatisTest {

    SqlSessionFactory sqlSessionFactory;
    SqlSession sqlSession;
    EmpMapper empMapper;

    @BeforeEach
    public void setup() throws IOException {
        // 获取资源流,读取"mybatis-config.xml"文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 使用资源流创建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 使用SqlSessionFactory打开一个Session
        sqlSession = sqlSessionFactory.openSession();
        // 使用Session获取EmpMapper的Mapper对象
        empMapper = sqlSession.getMapper(EmpMapper.class);
    }


    // 在每个测试用例之后执行的清理方法
    @AfterEach
    public void teardown() {
        sqlSession.close();  // 关闭SqlSession
    }


    @Test
    public void getEmployeeListTest() {
        empMapper.getEmployeeList().forEach(System.out::println);
    }
    //Employee(empId=1, empName=tom, empSalary=200.33)
    //Employee(empId=2, empName=jerry, empSalary=666.66)
    //Employee(empId=3, empName=andy, empSalary=777.77)

    @Test
    public void getEmployeeByIdTest() throws IOException {
        System.out.println(empMapper.getEmployeeById(1));
        //Employee(empId=1, empName=tom, empSalary=200.33)
    }
}

mybatis快速入门(基于Mapper接口编程)_第1张图片

 8、#{value}

      在MyBatis中,#{value}是一种预编译的参数占位符,用于在SQL语句中插入参数值。它能够防止SQL注入攻击,提高SQL语句的安全性。当使用#{value}作为参数占位符时,MyBatis会将参数值直接插入到SQL语句中,并在执行时进行数据类型转换和字符转义处理。这种预编译的参数占位符可以有效地提高SQL语句的性能和安全性。

     在MyBatis中,#{value}是一种预编译的参数占位符,用于在SQL语句中插入参数值。它能够防止SQL注入攻击,提高SQL语句的安全性。

     当使用#{value}作为参数占位符时,MyBatis会将参数值直接替换到SQL语句中,并在执行时进行数据类型转换和字符转义处理。这样可以确保SQL语句的正确性和安全性,避免了手动拼接SQL语句的麻烦和潜在的安全风险。

     需要注意的是,#{value}只适用于参数值是安全的情况下,如果参数值来自不可信的来源,应该使用其他安全措施来防止SQL注入攻击。

在MyBatis中,#{value}主要有以下作用:

  1. 参数占位符:#{value}用作SQL语句中的参数占位符,表示一个参数值的位置。在执行SQL语句时,MyBatis会将该占位符替换为实际的参数值。
  2. 防止SQL注入:使用#{value}可以有效地防止SQL注入攻击。MyBatis会对参数值进行预编译处理,确保参数值在SQL语句中的正确性和安全性。这样可以避免恶意用户通过拼接SQL语句来执行恶意操作。
  3. 自动类型转换:MyBatis会根据参数值的类型自动进行类型转换。无论参数值是Java的基本类型、包装类型还是其他自定义类型,MyBatis都能够正确处理并将其转换为SQL语句中对应的数据类型。
  4. 简化参数处理:使用#{value}可以简化参数的处理过程。开发者只需要关注SQL语句的编写,而不需要手动拼接参数值或处理参数值的转义问题。MyBatis会自动处理这些细节,提高了开发效率和代码的可读性。

综上所述,#{value}在MyBatis中起到了参数占位符、防止SQL注入、自动类型转换和简化参数处理的作用,提高了SQL语句的安全性和开发效率。

在MyBatis中,预编译占位符有三种,分别是:

  1. #{value}:这是最常用的预编译占位符,用于插入参数值,可以防止SQL注入攻击。
  2. ${value}:这是非预编译占位符,直接将参数值插入到SQL语句中,需要注意避免SQL注入攻击。
  3. #{}:这是参数占位符,用于插入参数值,但不会进行预编译处理,因此不能防止SQL注入攻击。

需要注意的是,在MyBatis中,使用#{value}是最安全和推荐的方式,因为它可以有效地防止SQL注入攻击,提高SQL语句的安全性。

你可能感兴趣的:(MyBatis,mybatis,configuration,environments,environment,dataSource,property,mappers)