[1] Comenzando con Mybatis, agregando, eliminando, modificando y revisando

Mybatis

Necesita base:

  • JDBC
  • Mysql
  • Conceptos básicos de Java
  • Maven
  • Junit

1. Introducción

1.1 Qué es Mybatis

  • MyBatis es un excelente marco de trabajo de capa de persistencia que admite SQL personalizado, procedimientos almacenados y mapeo avanzado.
  • MyBatis elimina casi todo el código JDBC y el trabajo de establecer parámetros y obtener conjuntos de resultados.
  • MyBatis puede configurar y mapear tipos primitivos, interfaces y POJOs Java (Plain Old Java Objects) como registros en la base de datos a través de XML simple o anotaciones.
  • MyBatis era originalmente un proyecto de código abierto iBatis de Apache . En 2010, este proyecto se migró de la base del software apache a [código de google] (https://baike.baidu.com/item/google code / 2346604), y pasó a llamarse MyBatis .
  • Migrado a Github en noviembre de 2013 .

1.2, como obtener Mybatis

  • Github:

1.3, resistencia

Persistencia de datos

  • La persistencia es el proceso de transformar los datos del programa en un estado persistente y un estado transitorio.
  • Memoria: se pierde cuando se apaga
  • Base de datos (jdbc), persistencia de archivos io.
  • En la vida: almacenamiento en frío, enlatado, fotos.

¿Por qué necesitamos perseverancia?

  • Hay algunos objetos que no se le pueden soltar.

  • La memoria es demasiado cara

1.4, la capa de persistencia

Capa de Dao, capa de servicio, capa de controlador

  • El bloque de código para completar el trabajo de persistencia
  • Los límites eran muy claros

1.5 ¿Por qué necesitas Mybatis?

  • Conveniencia

  • El código jdbc tradicional es demasiado complicado. Para simplificar, existe un marco, automatización

  • Ayude al programa a guardar los datos en la base de datos

  • No necesita mybatis. Es más fácil empezar.

  • ventaja:

    • Simple y fácil de aprender: en sí mismo es pequeño y simple. Sin dependencias de terceros, la instalación más simple es solo dos archivos jar + configuración de varios archivos de mapeo sql. Es fácil de aprender y fácil de usar. A través de la documentación y el código fuente, puede comprender completamente sus ideas de diseño e implementación.
    • Flexible: Mybatis no impone ninguna influencia sobre el diseño existente de la aplicación o base de datos. sql está escrito en xml, lo que es conveniente para una gestión y optimización unificadas. Todos los requisitos para operar la base de datos se pueden cumplir a través de la declaración sql.
    • Desacoplamiento de SQL y código de programa: al proporcionar una capa DAO, la lógica empresarial y la lógica de acceso a datos se separan, lo que hace que el diseño del sistema sea más claro, más fácil de mantener y más fácil de probar unitariamente. La separación de sql y código mejora la mantenibilidad.
    • Proporciona etiquetas de mapeo, admite mapeo entre objetos y campos de formato de base de datos.
    • Proporcionar etiquetas de mapeo relacional de objetos y apoyar el establecimiento y mantenimiento de relaciones de objeto.
    • Proporcione etiquetas xml, soporte para escribir SQL dinámico.

2. El primer programa Mybatis

Idea: construir un entorno -> importar Mybatis -> escribir código -> probar

3 、 CRUDO

1 、 espacio de nombres

El nombre del paquete en el espacio de nombres debe ser coherente con el nombre del paquete de la interfaz Dao / mapeador.

2 、 seleccionar

Selección, declaración de consulta:

  • id: el nombre del método del espacio de nombres correspondiente
  • resultType: el valor de retorno de la ejecución de la declaración sql
  • parameterType: el tipo de parámetro de entrada del método abstracto

Proceso de implementación: los siguientes pasos son los mismos para insertar, modificar y eliminar

  1. Escribir métodos abstractos de interfaz
List<User> getUserInfo();
  1. Escriba la declaración SQL correspondiente en mapper.xml
<mapper namespace="com.kuber.dao.UserMapper">
    <select id="getUserInfo" resultType="com.kuber.pojo.User">
        select * from users
    </select>
</mapper>
  1. prueba
@Test
    public void getUserInfo(){
    
    
        /*获取SqlSession*/
        SqlSession sqlSession;
        try {
    
    
            /*获取SqlSession*/
            sqlSession = MybatisUtils.getSqlSession();

            /*执行sql*/
            /*相当于 UserMapper mapper = new UserMapperImpl();*/
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.getUserInfo();
            for (User user : users) {
    
    
                System.out.println(user);
            }
            sqlSession.close();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }
    }

[Error en la transferencia de la imagen del enlace externo. El sitio de origen puede tener un mecanismo de enlace anti-sanguijuela. Se recomienda guardar la imagen y subirla directamente (img-rfdhL4xD-1604566530913) (img \ execution result1.png)]

3 、 insertar

  1. Escribir métodos de interfaz
int addUser(User user);
  1. Escriba la declaración SQL correspondiente en mapper.xml
	<insert id="addUser" parameterType="com.kuber.pojo.User">
        insert into users values(#{uid},#{username},#{password})
    </insert>
  1. prueba
@Test
    public void addUser(){
    
    
        /*增删改必须要提交事务*/
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = new User(null,"tonyma","111");
            int num = mapper.addUser(user);
            if(num > 0){
    
    
                System.out.println("插入成功");
            }else {
    
    
                System.out.println("插入失败");
            }
            /*提交事务*/
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }

    }

4 、 actualización

  1. Escribir métodos de interfaz
    int updateUser(User user);
  1. Escriba la declaración SQL correspondiente en mapper.xml
<update id="updateUser" parameterType="com.kuber.pojo.User">
	update users set username = #{username},password = #{password} where uid = #{uid}
</update>
  1. prueba
    @Test
    public void updateUser(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int num = mapper.updateUser(new User(7,"jackma","123456"));
            if (num > 0){
    
    
                System.out.println("修改成功");
            }else {
    
    
                System.out.println("修改失败");
            }
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }


    }

5 、 eliminar

  1. Escribir métodos de interfaz
    int deleteUser(int id);
  1. Escriba la declaración SQL correspondiente en mapper.xml
    <delete id="deleteUser" parameterType="int">
        delete from users where uid = #{id}
    </delete>
  1. prueba
    @Test
    public void deleteUser(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            int num = mapper.deleteUser(9);
            if (num > 0){
    
    
                System.out.println("删除成功");
            }else{
    
    
                System.out.println("删除失败");
            }
            sqlSession.commit();
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }


    }
  • ¡Las adiciones, eliminaciones y modificaciones deben confirmar la transacción!

6. Puntos propensos a errores

  • No coincida con las etiquetas incorrectas

  • mapeador de enlace de recursos, necesita usar la ruta

  • Los archivos de configuración del programa deben cumplir con las especificaciones

  • los recursos de maven no se exportan

    Agregue el siguiente bloque de código en el archivo pom.xml

        <!--在build中配置resours,来防止我们资源导出失败的问题-->
        <build>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
    

7. Mapa universal

Suponiendo que nuestras clases de entidad, o tablas, campos o parámetros en la base de datos son demasiados, podemos usar Map

    <insert id="addUser2" parameterType="map">
        insert into users(uid,username,password) values(#{uid},#{uname},#{upwd})
    </insert>
@Test
public void addUser2(){
    
    
    SqlSession sqlSession;
    try {
    
    
        sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("uid",8);
        map.put("uname","jacktony");
        map.put("upwd","22333");
        int counter = mapper.addUser2(map);
        if (counter > 0){
    
    
            System.out.println("插入成功!");
        }else {
    
    
            System.out.println("插入失败!");
        }
        sqlSession.commit();
    }finally {
    
    
        MybatisUtils.closeSqlSession();
    }
}

8. Pensando

¿Cómo escribir una consulta difusa?

  1. Cuando se ejecuta el código Java, pase el comodín %%
  2. Utilice comodines en el empalme de SQL (tenga en cuenta para evitar la inyección de SQL)
    <select id="getLikeUserInfo" parameterType="string" resultType="com.kuber.pojo.User">
        select  * from users where username like #{value}
    </select>
    @Test
    public void getLikeUserInfo(){
    
    
        SqlSession sqlSession;
        try {
    
    
            sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> users = mapper.getLikeUserInfo("%han%");
            for (User user : users) {
    
    
                System.out.println(user);
            }
        }finally {
    
    
            MybatisUtils.closeSqlSession();
        }

    }

Supongo que te gusta

Origin blog.csdn.net/weixin_43215322/article/details/109515732
Recomendado
Clasificación