[Spring Boot 24] Ingeniería inversa MyBatis (Introducción al Ejemplo + Criterios)

Mybatis necesita escribir declaraciones sql. Mybatis ofrece oficialmente un proyecto de maleta, que puede generar automáticamente el código necesario para la ejecución de mybatis (como bean, dao, mapeador) para una sola tabla para mejorar la eficiencia del trabajo, especialmente cuando se requiere una gran cantidad de tablas para consultas de una sola tabla. Alta eficiencia, el evangelio de construir rápidamente el marco del proyecto.

1. Introducción a Example + Criteria

La clase Example especifica cómo construir una cláusula where dinámica. Cada columna que no sea BLOB de la tabla se puede incluir en la cláusula where.

La clase Example se puede utilizar para generar una cláusula where casi ilimitada.

La clase Example contiene una clase estática interna Criteria que contiene una lista de condiciones combinadas con anded en la cláusula where. La clase Example contiene una propiedad List. Todas las cláusulas de la clase interna Criteria se combinarán con ored. La clase Criteria con diferentes propiedades le permite generar tipos ilimitados de cláusulas where.

Para crear un objeto Criteria, puede usar createCriteria () o o () en la clase Example. Si el objeto Criteria se crea con createCriteria (), automáticamente agregará un objeto Criteria a la propiedad List, lo que facilita la escritura de un objeto donde el niño Si no necesita o una combinación de varias otras cláusulas, utilice el método o (criterios de criterios) para crear un objeto de criterios y el objeto de criterios en el método se agregará a la lista de objetos de criterios.

2. Cree el proyecto SpringBoot y agregue POM

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.0</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.guor</groupId>
	<artifactId>MyBatisGenerator</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>MyBatisGenerator</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.4</version>
		</dependency>
	    <dependency>
			<groupId>org.mybatis.generator</groupId>
			<artifactId>mybatis-generator-maven-plugin</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc8</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.20</version>
 		</dependency>
		<dependency>
			<groupId>cn.easyproject</groupId>
			<artifactId>orai18n</artifactId>
			<version>12.1.0.2.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

Tres, archivo de configuración

1 、 application.properties

spring.datasource.driverClassName=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
spring.datasource.username=mine
spring.datasource.password=mine

2. Plantilla de ingeniería inversa, el núcleo de este blog

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="Mybatis3">
        <!-- 避免生成重复代码的插件 -->
     <!--   <plugin type="com.vi.tmall.util.OverlsMergeablePlugin"/>-->
        <!-- 是否不生成注释 -->
        <commentGenerator>
            <property name="suppressDate" value="true" />
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!--数据库链接地址账号密码-->
        <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:orcl"
        userId="mine" password="mine"/>
        <!-- 这个元素的配置用来指定JDBC类型和Java类型如何转换。 -->
        <javaTypeResolver>
            <!-- 是否强制将DECIMAL和NUMERIC类型的字段转换为Java类型的java.math.BigDecimal -->
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- targetPackage:生成实体类存放的包名,
        targetProject:指定目标项目路径,可以是绝对路径或相对路径(如 targetProject="src/main/java")-->
        <javaModelGenerator targetPackage="com.guor.entity" targetProject="src/main/java">
            <!--enableSubPackages 如果true,MBG会根据catalog和schema来生成子包。如果false就会直接用targetPackage属性。默认为false-->
            <property name="enableSubPackages" value="true"/>
            <!-- trimStrings:是否对数据库查询结果进行trim操作,如果设置为true就会生成类似这样public void setUsername(String username)-->
            <property name="trimString" value="true" />
        </javaModelGenerator>
        <!--生成xml映射文件存放位置-->
        <sqlMapGenerator targetPackage="com.guor.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成mapper类存放位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.guor.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <table tableName="student" />
        <!--生成对应表及类名,enableXXX:XXX代表多种SQL方法,该属性用来指定是否生成对应的XXX语句-->
        <!-- <table tableName="student" domainObjectName="Category" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="true" selectByExampleQueryId="false">
            <property name="my.isgen.usekeys" value="true"/>
            useActualColumnNames:如果设置为true,那么MBG会使用从数据库元数据获取的列名作为生成的实体对象的属性。 如果为false(默认值),MGB将会尝试将返回的名称转换为驼峰形式
            <property name="useActualColumnNames" value="true"/>
            <generatedKey column="id" sqlStatement="JDBC"/>

        </table> -->
    </context>
</generatorConfiguration>

Cuarto, cargue la plantilla generator.xml

package com.guor;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

public class MybatisGenerator {
	public static void main(String[] args) throws Exception {
		File file = new File("src/generator.xml");
        System.out.println("开始逆向!!!");
        List<String> warnings = new ArrayList<String>();
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(file);
        DefaultShellCallback callback = new DefaultShellCallback(true);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
        System.out.println("生成代码成功");
    }
}

Ejecute el método principal para generar código.

Cinco, crea un controlador, prueba

1, controlador

package com.guor.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.guor.entity.Student;
import com.guor.entity.StudentExample;
import com.guor.entity.StudentExample.Criteria;
import com.guor.mapper.StudentMapper;

@Controller
@RequestMapping("/generator")
public class StudentController {
	@Autowired
	private StudentMapper mapper;
	
	@RequestMapping(path = "/getStudents", method=RequestMethod.GET)
    public Student getStudents(){
		Student student = mapper.selectByPrimaryKey((short)1);
		System.out.println(student);
		return student;
	}
	
	@RequestMapping(path = "/getStudentsByExample", method=RequestMethod.GET)
    public void getStudentsByExample(){
		StudentExample example = new StudentExample();
		Criteria criteria = example.createCriteria();
		criteria.andAgeBetween((short)18, (short)28);
		criteria.andNameLike("%k%");
		
		Criteria criteria2 = example.createCriteria();
		criteria2.andNameLike("%j%");
		
		example.or(criteria2);//相当于where (age>18 and age<28 and name like '%k%') or name like '%j%';
		
		List<Student> list = mapper.selectByExample(example);
		System.out.println(list);
	}
}

2. Consulta sencilla 

3. Consulta con o

6. ¿Se utiliza mucho la ingeniería inversa en el desarrollo real?

 

Anterior: [Resumen del marco Java más completo en la pila completa] SSH, SSM, Springboot

Siguiente: Notas de estudio de SpringBoot súper detalladas

Supongo que te gusta

Origin blog.csdn.net/guorui_java/article/details/110311091
Recomendado
Clasificación