Uso básico del marco MyBatis

Tabla de contenido

1. Pasar parámetros a la declaración SQL.

2. Entrada de datos

3. Salida de datos

4. Alias


1. Pasar parámetros a la declaración SQL.

1. Uso básico del marco MyBatis

Los paquetes jar utilizados son los siguientes:

<!--    测试包-->
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>RELEASE</version>
      <scope>test</scope>
    </dependency>
<!--  MyBatis核心-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.7</version>
    </dependency>
<!--  数据库连接-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>

Para usar MyBatis, debe implementar una clase de entidad correspondiente a una tabla correspondiente a una interfaz comercial correspondiente a un mapeo de asignador.

El mapeo del asignador es equivalente a la clase de implementación de la interfaz empresarial. Es solo que el código Java y el código SQL se distinguen a través del archivo de configuración mapper.xml.

Nota: Los métodos definidos en la interfaz empresarial no se pueden sobrecargar, porque cuando se configura a través de xml, la instrucción SQL para la configuración del método solo mira el nombre del método.

como sigue:

public interface EmployeeMapper {
    //通过id查找员工
     Employee queryById(Integer id);
  
    //通过id name 查找员工
     Employee queryById(Integer id,String name);

}

Debido a que se utiliza el mismo nombre de método, se producirán problemas cuando xml encapsule declaraciones SQL basadas en el nombre del método.

2. Utilice ${ key } y #{ key } para pasar parámetros

Código de caso:

<!-- 通过#{key}传入参数   -->
    <select id="queryById" resultType="com.alphamilk.pojo.Employee">
        select * from mysqltest.employee where id = #{id}
    </select>
<!--通过${key} 传入参数-->
    <select id="queryByName" resultType="com.alphamilk.pojo.Employee">
        select * from mysqltest.employee where name = ${name}
    </select>

la diferencia:

La esencia de #{key} es realizar el procesamiento de marcadores de posición y reemplazar el valor de id en el código. 【Uso recomendado】

La esencia de ${key} es empalmar cadenas, que se encapsulan en una declaración SQL completa en el código del caso.

Nota: Cuando se utiliza el valor de #{key} en su lugar, no se pueden pasar el nombre de la columna y el nombre del contenedor.

3. Implementar la función de prueba MyBatis

Para completar la función de prueba, debe implementar los siguientes pasos:

1. Crear la clase de recurso es de ibatis

2. Cree un objeto SqlSessionFactoryBuilder y realice Build (is) para obtener el objeto SqlSessionFactory

3. Obtenga SqlSession a través del método openSession del objeto SqlSessionFactory

4. Obtenga el objeto Mapper

5.Realizar la operación

6. Confirmar transacciones y cerrar flujos relacionados.

Código de caso:

public class MybatisTest {

    @Test
    public void Test() throws IOException {
        //步骤1,读取资源
        InputStream is = Resources.getResourceAsStream("mybatisConfig.xml");
        //步骤2,创建sqlSessionFactory
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //步骤3,创建SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //步骤4,获取Mapper对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

        //执行对应操作
        Employee employee = employeeMapper.queryById(1);
        System.out.println(employee);
        //管理事务提交与关闭操作
        sqlSession.close();

    }
}

2. Entrada de datos

Conceptos de entrada de datos:

La entrada de datos aquí se refiere específicamente a la forma en que se pasan los datos cuando el método de la capa superior (como el método de Servicio) llama a la interfaz Mapper.

  • Tipo simple: un tipo de datos que contiene un solo valor
    • Tipos de datos básicos: int, byte, short, double,…
    • Tipos de empaquetado de tipos de datos básicos: entero, carácter, doble,…
    • Tipo de cadena: Cadena
  • Tipo complejo: un tipo de datos que contiene múltiples valores
    • Tipos de clase de entidad: Empleado, Departamento,…
    • Tipos de colección: Lista, Conjunto, Mapa,…
    • Tipo de matriz: int[], String[],…
    • Tipo compuesto: Lista<Empleado>, la clase de entidad contiene una colección...

1. Un único tipo de datos simple

Dado que solo hay un parámetro simple, la clave en #{key} o ${key} se puede completar con cualquier valor. Por supuesto, se recomienda usar el nombre del parámetro original.

2. Tipo de objeto de entidad

Cuando los datos entrantes son un tipo de objeto de entidad, solo necesita corresponder a sus atributos uno por uno.

Caso:

3. Múltiples tipos de datos simples

Cuando hay varios parámetros en un método comercial, tenga en cuenta que la clave en #{key} o ${key} no se puede escribir aleatoriamente y no se puede ingresar directamente a través de parámetros formales. Hay dos soluciones al problema de ingresar múltiples tipos de datos simples.

  3.1 Usar parámetros de anotación para resolver

Necesita usar la anotación @Param

Caso:

  3.2 Usar el método secuencial para resolver

Los parámetros también se pueden hacer coincidir en el orden de arg0, arg1...

Código de caso:

4.tipo de mapa

Simplemente pase la clave = mapa

El método abstracto correspondiente a la interfaz.

int updateEmployeeByMap(Map<String, Object> paramMap);

Declaración SQL correspondiente

<update id="updateEmployeeByMap">

  update t_emp set emp_salary=#{empSalaryKey} where emp_id=#{empIdKey}

</update>

escenas a utilizar

Hay muchos parámetros dispersos que deben pasarse, pero no se pueden utilizar los tipos de clase de entidad correspondientes. Usar anotaciones @Param para pasarlas una por una es demasiado engorroso. Entonces todos están encapsulados en Map.


3. Salida de datos

Concepto de salida de datos:

La salida de datos generalmente se presenta de dos formas:

  • El número de filas afectadas devueltas por las operaciones de adición, eliminación y modificación: simplemente use el tipo int o long para recibirlo directamente
  • Consultar resultados de operaciones de consulta.

 ¡Lo que debemos hacer es especificar el tipo de datos de salida de la consulta!

 ¡Y en el escenario de inserción, los datos de la clave principal se pueden volver a mostrar!

1. Un solo tipo simple

<!--此处的namespace修改为对应的接口全类名-->
<mapper namespace="com.alphamilk.EmployeeMapper">
<!--    resultType 对应 类型的全限定符-->
    <select id="querySalaryById" resultType="java.lang.Integer">
        select salary from mysqltest.employee where id = #{id}
    </select>

    <select id="queryNameById" resultType="java.lang.String">
        select  name from mysqltest.employee where id=#{id}
    </select>
</mapper>

 Entre los tipos simples generales, Java tiene abreviaturas correspondientes. Puede usar String int para reemplazar java.lang.String, etc.

2. Devolver objeto de clase de entidad

Devuelve el calificador completo de la clase más el nombre de la clase.

<!--此处的namespace修改为对应的接口全类名-->
<mapper namespace="com.alphamilk.EmployeeMapper">
<!--    resultType 对应 类型的全限定符-->
   <select id="" resultType="com.alphamilk.pojo.Employee">
       
   </select>
</mapper>

3. Tipo de mapa de retorno

<!-- Map<String,Object> selectEmpNameAndMaxSalary(); -->
<!-- 返回工资最高的员工的姓名和他的工资 -->
<select id="selectEmpNameAndMaxSalary" resultType="map">
  SELECT
    emp_name 员工姓名,
    emp_salary 员工工资,
    (SELECT AVG(emp_salary) FROM t_emp) 部门平均工资
  FROM t_emp WHERE emp_salary=(
    SELECT MAX(emp_salary) FROM t_emp
  )
</select>

4. Tipo de lista de devolución

<!-- List<Employee> selectAll(); -->
<select id="selectAll" resultType="com.atguigu.mybatis.entity.Employee">
  select emp_id empId,emp_name empName,emp_salary empSalary
  from t_emp
</select>

5. Devolver el valor de la clave principal

<!-- int insertEmployee(Employee employee); -->
<!-- useGeneratedKeys属性字面意思就是“使用生成的主键” -->
<!-- keyProperty属性可以指定主键在实体类对象中对应的属性名,Mybatis会将拿到的主键值存入这个属性 -->
<insert id="insertEmployee" useGeneratedKeys="true" keyProperty="empId">
  insert into t_emp(emp_name,emp_salary)
  values(#{empName},#{empSalary})
</insert>

4. Alias

Dado que el contenido que se debe completar al generar el valor de retorno incluye el calificador completo de la clase, esta operación es problemática, por lo que Java viene con 72 alias predeterminados. Por ejemplo, java.lang.String se puede escribir directamente como String, etc. Pero para los tipos de objetos de entidad generales, no existe

1.xml establecer alias

Configurar en MyBatis-config.xml

alias único

Código de caso:

   <typeAliases>
<!--        单个xml配置-->
        <typeAlias type="com.alphamilk.pojo.Employee" alias="Employee"/>
    </typeAliases>
    

alias de envoltura

Cuando se utiliza el alias en un paquete, los alias de todas las clases del paquete corresponden a sus nombres de clase.

   <typeAliases>
<!--        包起别名-->
        <package name="com.alphamilk.pojo.Employee"/> 
    </typeAliases>

2. Anotar alias

Si cree que la configuración en xml es muy problemática y antiestética, puede usar anotaciones para crear alias en la clase de entidad.


Supongo que te gusta

Origin blog.csdn.net/dogxixi/article/details/132832373
Recomendado
Clasificación