Base de datos operativa Mybatis-Notas de estudio de entrada de Spring 11

El contenido del curso proviene del tiempo geek jugando Spring Family Bucket, el enlace es el siguiente
https://time.geekbang.org/course/intro/100023501

Sexto día 1/4

Opere la base de datos a través de Mybatis

Mybatis

Mybatis también es un excelente framework de capas de persistencia. El predecesor es iBatis. La
mayor diferencia entre Mybatis y JPA es que SQL necesita ser escrito (generación asistida por herramientas)

Situación aplicable

La operación de toda la base de datos es relativamente simple de usar JPA
porque no necesita preocuparse por SQL y cosas relacionadas con el mapeo.

Si el DBA tiene requisitos de control para SQL y mapeo, por ejemplo, cada SQL debe ser auditado, se agregan algunas sugerencias
o el SQL es más complicado y existen asociaciones complejas como uniones,
debe elegir Mybatis

Las grandes fábricas generalmente eligen Mybatis

Utilice Mybatis en primavera

Adaptador de resorte Mybatis 以及 Mybatis-spring-boot-starter

Configuración en el archivo application.properties

  • mybatis.mapper-locations = classpath *: mapper / ** / *. xml
  • mybatis.type-aliases-package = nombre del paquete de tipo alias
  • mybatis.type-handlers-package = Nombre del paquete de escaneo TypeHandler
  • mybatis.configuration.map-underscore-to-camel-case = true

@MapperScan Configurar la ubicación de escaneo
@Mapper Definir la interfaz
Definición de mapeo-XML y anotaciones (dos formas de definir mapeo, soporte mixto)

Código y ejecución de resultados

CoffeeMapper

package geektime.spring.data.mybatisdemo.mapper;

import geektime.spring.data.mybatisdemo.model.Coffee;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface CoffeeMapper {
    
    
    @Insert("insert into t_coffee (name, price, create_time, update_time)"
            + "values (#{name}, #{price}, now(), now())")
    @Options(useGeneratedKeys = true)
    int save(Coffee coffee);

    @Select("select * from t_coffee where id = #{id}")
    @Results({
    
    
            @Result(id = true, column = "id", property = "id"),
            @Result(column = "create_time", property = "createTime"),
            // map-underscore-to-camel-case = true 可以实现一样的效果
            // @Result(column = "update_time", property = "updateTime"),
    })
    Coffee findById(@Param("id") Long id);
}

MybatisDemoApplication

package geektime.spring.data.mybatisdemo;

import geektime.spring.data.mybatisdemo.mapper.CoffeeMapper;
import geektime.spring.data.mybatisdemo.model.Coffee;
import lombok.extern.slf4j.Slf4j;
import org.joda.money.CurrencyUnit;
import org.joda.money.Money;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@Slf4j
@MapperScan("geektime.spring.data.mybatisdemo.mapper")
public class MybatisDemoApplication implements ApplicationRunner {
    
    
	@Autowired
	private CoffeeMapper coffeeMapper;

	public static void main(String[] args) {
    
    
		SpringApplication.run(MybatisDemoApplication.class, args);
	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
    
    
		Coffee c = Coffee.builder().name("espresso")
				.price(Money.of(CurrencyUnit.of("CNY"), 20.0)).build();
		int count = coffeeMapper.save(c);
		log.info("Save {} Coffee: {}", count, c);

		c = Coffee.builder().name("latte")
				.price(Money.of(CurrencyUnit.of("CNY"), 25.0)).build();
		count = coffeeMapper.save(c);
		log.info("Save {} Coffee: {}", count, c);

		c = coffeeMapper.findById(c.getId());
		log.info("Find Coffee: {}", c);
	}
}

Ejecutar salida:
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_43596589/article/details/112568903
Recomendado
Clasificación