APIs relacionadas de MyBatis

1. APIs relacionadas de MyBatis

1.1 Recursos

  • org.apache.ibatis.io.Resources: Clase de herramienta para cargar recursos.

metodo central

valor devuelto nombre del método ilustrar
Flujo de entrada getResourceAsStream(String nombre de archivo) Devuelve el flujo de bytes del recurso especificado a través del cargador de clases

1.2 Constructor SqlSessionFactoryBuilder

Patrón de diseño del constructor:

  • org.apache.ibatis.session.SqlSessionFactoryBuilder: clase de función para obtener objetos de fábrica SqlSessionFactory

metodo central

valor devuelto nombre del método ilustrar
SqlSessionFactory compilar (InputStream es) Obtenga el objeto de fábrica SqlSession especificando el flujo de entrada de bytes de recursos
  • Cree un objeto SqlSessionFactory cargando el flujo de entrada del archivo central de mybatis
String resource = "org/mybatis/builder/mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

Entre ellos, la clase de herramientas Recursos, esta clase se encuentra en el paquete org.apache.ibatis.io.
La clase Resources lo ayuda a cargar archivos de recursos desde el classpath, el sistema de archivos o una URL web.

1.3 Objeto de fábrica SqlSessionFactory

Patrón de diseño de fábrica:

  • org.apache.ibatis.session.SqlSessionFactory: obtenga la interfaz de fábrica del objeto del constructor SqlSession.

API central

valor devuelto nombre del método ilustrar
Sesión Sql sesión abierta() Obtenga el objeto del generador SqlSession e inicie la transacción de confirmación manual
Sesión Sql openSession(autoCommit booleano) Obtenga el objeto del generador SqlSession, si el parámetro es verdadero, luego habilite la transacción de confirmación automática

1.4 Objeto de sesión SqlSession

  • org.apache.ibatis.session.SqlSession: interfaz de objetos del constructor.

  • Se utiliza para ejecutar SQL, administrar transacciones y agentes de interfaz.

  • API central

inserte la descripción de la imagen aquí

La instancia de SqlSession es una clase muy poderosa en MyBatis.
Aquí verá todos los métodos para ejecutar declaraciones, comprometer o revertir transacciones y obtener instancias de mapeador.

2. Implementar Dao en modo proxy de interfaz

2.1 Introducción a los métodos de desarrollo de agentes

El desarrollo de la capa DAO se realiza utilizando el método de desarrollo de agentes de Mybatis.Este método es la corriente principal de nuestra entrada posterior en la empresa.

El método de desarrollo de la interfaz Mapper solo requiere que los programadores escriban la interfaz Mapper (equivalente a la interfaz Dao), y el marco Mybatis crea el objeto proxy dinámico de la interfaz de acuerdo con la definición de la interfaz. El cuerpo del método del objeto proxy es el mismo que el método de clase de implementación de la interfaz Dao anterior.

El desarrollo de la interfaz del mapeador debe seguir las siguientes especificaciones:

1) El espacio de nombres en el archivo Mapper.xml es el mismo que el nombre completo de la interfaz del mapeador

2) El nombre del método de la interfaz Mapper es el mismo que el id de cada declaración definida en Mapper.xml

3) El tipo de parámetro de entrada del método de interfaz Mapper es el mismo que el tipo de parámetro de cada sql definido en mapper.xml

4) El tipo de valor de retorno del método de interfaz Mapper es el mismo que el tipo de resultado de cada sql definido en mapper.xml

Resumir:

La forma de desarrollo de la interfaz: los programadores solo necesitan definir la interfaz para operar la base de datos, entonces, ¿cómo crear objetos específicos?

1. El programador es responsable de definir la interfaz

2. Al operar la base de datos, mybatis framework genera un objeto proxy a través de un proxy dinámico basado en la interfaz, y es responsable de la operación básica de la base de datos.

3. Archivo de configuración de mapas de MyBatis

3.1 Introducción a los archivos de configuración de mapeo

  • El archivo de configuración de mapeo contiene la relación de mapeo entre datos y objetos y la instrucción SQL que se ejecutará.

3.2 Función de consulta

<Select> 查询功能标签
  • ID de atributo: identificador único, utilizado con el espacio de nombres.

  • ParameterType: especifica el tipo de objeto de la asignación de parámetros.

  • resultType: especifica el tipo de objeto del mapa de resultados.

  • Parámetros de adquisición de SQL: #{nombre de la propiedad} #indica el $ de la inyección de sql significa el empalme de sql donde id=1 1=1

  • ejemplo

<!--  java.lang.Integer-->
<select id="findById" parameterType="java.lang.String" resultType="cn.zxy.pojo.User">        
select * from user where id=#{id}
</select>

3.3 Nuevas funciones

<insert>:新增功能标签。
  • ID de atributo: identificador único, utilizado con el espacio de nombres.

    • ParameterType: especifica el tipo de objeto de la asignación de parámetros.
  • Parámetros de obtención de SQL: #{nombre de la propiedad}

  • ejemplo

Pasos:

El primer paso es escribir la interfaz dao

public void save(User user);

El segundo paso, escribir el archivo de mapeo

<insert id="save" parameterType="com.by.pojo.User">
    insert into user values(#{id},#{username},#{sex},#{address},#{birthday})
</insert>

El tercer paso, código de prueba

@Test
public void saveTest() throws IOException {
    
    
    //读取配置文件
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取建造者对象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(is);
    SqlSession session = sessionFactory.openSession();
    UserDao mapper = session.getMapper(UserDao.class);
    User user=new User();
   // user.setId(1);
    user.setUsername("张三");
    user.setSex("男");
    user.setAddress("河南开封");
    user.setBirthday("2010-09-12");
    mapper.save(user);
    //提交数据
     session.commit();
    //释放资源
    is.close();
    session.close();}

3.4 Función de modificación

<update>:修改功能标签。
  • ID de atributo: identificador único, utilizado con el espacio de nombres.

    • ParameterType: especifica el tipo de objeto de la asignación de parámetros.
  • Parámetros de obtención de SQL: #{nombre de la propiedad}

  • ejemplo

1. Escribir interfaz dao

public void update(User user);

2. Escriba el archivo de mapeo

<update id="update" parameterType="cn.zxy.pojo.User">
    update user set username=#{username},sex=#{sex} where id=#{id}
</update>

3. Prueba de funcionamiento

@Test
public void update() throws IOException {
    
    
    //读取配置文件
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取建造者对象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(is);
    SqlSession session = sessionFactory.openSession();
    UserDao mapper = session.getMapper(UserDao.class);User user=new User();
    user.setId(1);
    user.setUsername("张三");
    user.setSex("女");
    mapper.update(user);
      //提交数据
     session.commit();
    //释放资源
    is.close();
    session.close();}

3.5 Función de eliminación

<delete>:查询功能标签。
  • ID de atributo: identificador único, utilizado con el espacio de nombres.

    • ParameterType: especifica el tipo de objeto de la asignación de parámetros.
  • Parámetros de obtención de SQL: #{nombre de la propiedad}

1. Escribir interfaz dao

public void delete(int id);
  • ejemplo
<delete id="delete" parameterType="java.lang.Integer">
    delete from user where id=#{id}
</delete>

3. Prueba de funcionamiento

@Test
public void delTest() throws IOException {
    
    
    InputStream is = Resources.getResourceAsStream("mybatis-config.xml");//获取建造者对象
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(is);
    SqlSession session = sessionFactory.openSession();
    UserDao mapper = session.getMapper(UserDao.class);
    mapper.delete(1);
     //提交数据
     session.commit();
    //释放资源
    is.close();
    session.close();
}
  • Resumen: puede encontrar que la operación crud, a excepción del nombre de la etiqueta y la instrucción sql, otros parámetros de atributos son básicamente los mismos.

3.6 Herramientas de extracción

public class MybatisUtils {
    
    
    //定义静态的session工厂对象
    static SqlSessionFactory sqlSessionFactory;
    static {
    
    
        //读取配置文件
        try {
    
    
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            sqlSessionFactory = builder.build(is);
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }}
    //提交
    public static SqlSession getSqlSession(boolean autocommit){
    
    
        return sqlSessionFactory.openSession(autocommit);
    }
    //关闭
    public static void closeSqlSession(SqlSession sqlSession){
    
    
        sqlSession.close();
    }
}

Operación de prueba:

@Test
public void findTest() throws IOException {
    
    
    //调用utils里面的getsqlSession 包含提交操作
    SqlSession session = MybatisUtils.getSqlSession(true);
    UserDao mapper = session.getMapper(UserDao.class);
    List<User> all = mapper.findAll();
    for (User user : all) {
    
    
        System.out.println(user);
    }
    //释放资源
    MybatisUtils.closeSqlSession(session);
}

3.7 Caso de implementación de anotación

@insertar agregar operación

1. Escribir la interfaz del mapeador

@Insert("insert into T_user values(#{id},#{username},#{sex},#{address},#{birthday})")
public void save(User user);

2. Escribir clases de prueba

@Test
public void insertTest(){
    
    SqlSession sqlSession = MybatisUtils.getSqlSession(true);
    IUsermapper mapper = sqlSession.getMapper(IUsermapper.class);
    User user=new User();
    user.setUsername("胡二小");
    user.setSex("女");
    user.setAddress("郑州");
    user.setBirthday("2001-09-12");
    mapper.save(user);
    //释放资源
    MybatisUtils.closeSqlSession(sqlSession);}

Operación de modificación @update

@Update("update T_user set username=#{username},sex=#{sex} where id=#{id}")
public void update(User user);

@Delete operación de eliminación

@Delete("delete from T_user where id=#{id}")
public void delete(int id);

3.8 Extensión del problema: agregue el valor de retorno de la identificación del usuario

Después de agregar un nuevo usuario, el valor de identificación del usuario recién agregado actual debe devolverse al mismo tiempo, porque la identificación se realiza mediante el crecimiento automático de la base de datos, por lo que es relativamente

Es porque queremos devolver el valor de auto_increment después de agregar.

 <insert id="saveUser" parameterType="user">
 
        <!--配置保存时获取插入的id-->
        <!-- selectKey:是指要执行相关的sql
            order: selectKey中sql执行的顺序,after 代表之后,before代表之前
            keyProperty:指的是实体类中的属性
            keyColumn: 指定的是数据库表中的主键字段名
    -->
        <selectKey order="AFTER" keyProperty="id" keyColumn="id" resultType="int">
            select last_insert_id()
        </selectKey>
​
insert into T_user(id,username,sex,address,birthday) values(#{id},#{username},#{sex},#{address},#{birthday})
    </insert>

Pasos de escritura:

1. Agregue un método a dao

public void saveUser(User user);

2. Escribe el mapeo

3. Escribir pruebas

@Test
public void saveTest() throws IOException {
    
    
    SqlSession sqlSession = MybatisUtils.getSqlSession(true);
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    User user=new User();
   // user.setId(1);
    user.setUsername("小李子");
    user.setSex("男");
    user.setAddress("郑州");
    user.setBirthday(Date.valueOf("2011-09-12"));
    //mapper.save(user);
    mapper.saveUser(user);
    //打印id的值
    System.out.println("userId="+user.getId());
   MybatisUtils.closeSqlSession(sqlSession);
}

Explicación general: devuelva la clave principal de los datos insertados al objeto de usuario.

  • Explicación específica:

  • SELECCIONE LAST_INSERT_ID (): obtenga el valor de la clave principal del registro que acaba de insertar, solo aplicable a la clave principal autoincremental

  • keyProperty: establezca la consulta en el valor de la clave principal para la propiedad del objeto especificado por parámetroType

  • keyColumn especifica el nombre del campo de clave principal en la tabla

  • resultType: especifique el tipo de resultado de SELECTLAST_INSERT_ID()

Supongo que te gusta

Origin blog.csdn.net/qq_52963857/article/details/131797193
Recomendado
Clasificación