Java Learning MyBatis (1)


Para ser honesto, dado que la epidemia ha estado en casa durante tanto tiempo, también está inactiva, jugando juegos todos los días durante más de un mes, no tiene mucho sentido, y luego creo que estoy a punto de graduarme y no aprendí mucho. . Así que sí, todavía tienes que aprender como estudiante, con el aprendizaje como el pilar principal. Hoy aprenderé MyBatis con Nan Ge durante el fin de semana: Nan Ge te enseña a aprender Java sin tonterías.


  • Como programador, para comprender sus propias notas, primero vaya al directorio de códigos:
    Inserte la descripción de la imagen aquí

Luego, suelte el código para seguir a Nan Ge para aprender los archivos creados por MyBatis. El primer video siguió a Nan Ge para aprender cómo usar MyBatis para insertar datos en la base de datos MySQL.

  • La primera es la clase Cuenta, que corresponde a la tabla de esta base de datos.
package com.southwind.entity;
import lombok.Data;

@Data
public class Account {
    private int id;
    private String username;
    private String password;
    private int age;
    public Account(int id, String username, String password, int age) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                '}';
    }
}


1. Este es el método de usar la interfaz nativa

  • Lo siguiente es crear un archivo XML para mapear la base de datos y operar en la base de datos
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--使用原生接口 手动定义SQL查询语句-->
<!--namespace 通常设置为文件所在包+文件名形式-->
<mapper namespace="com.southwind.mapper.AccountMapper">
<!--    insert标签表示执行 添加操作-->
<!--    id 是 实际调用MyBatis 方法时需要用到的参数-->
<!--    parameterType 是调用对应方法时参数的数据类型-->
    <insert id="save" parameterType="com.southwind.entity.Account">
        insert into t_account(username,password,age)
        values(#{username},#{password},#{age})
    </insert>
<!--    select标签表示执行 查询操作-->
<!--    update标签表示执行 查询操作-->
<!--    delete标签表示执行 查询操作-->
</mapper>
<!--1.MyBatis框架需要开发者自定义SQL语句,写在Mapper.xml文件中,实际开发中,会为每个实体类创建对应的Mapper.xml,定义管理该对象数据的SQL-->
<!--2.在全局配制文件 config.xml中注册AccountMapper.xml-->
  • Este archivo XML es un archivo XML que se utiliza para conectarse a la base de datos y registrarse para declarar operaciones en la base de datos.
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--    配制MyBatis 运行环境-->
    <environments default="development">
        <environment id="development">
<!--            配制JDBC的事务管理-->
            <transactionManager type="JDBC"></transactionManager>
<!--            数据源 POOLED配制JDBC数据源连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://xxx:xxx/表名?useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="数据库用户名"/>
                <property name="password" value="数据库密码"/>
            </dataSource>
        </environment>
    </environments>
<!--    注册AccountMapper.xml-->
    <mappers>
        <mapper resource="com/southwind/mapper/AccountMapper.xml"></mapper>
    </mappers>

</configuration>
  • La siguiente es la clase de prueba Prueba para operaciones de base de datos.
package com.southwind.test;


import com.southwind.entity.Account;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class Test {
    public static void main(String[] args) {
//        加载MyBatis配置文件
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        String statement = "com.southwind.mapper.AccountMapper.save";
        Account account = new Account(2,"oldbai","123456",22);
        sqlSession.insert(statement,account);
        sqlSession.commit();
    }
}
  • Por supuesto, lo más importante es importar el archivo XML que depende del paquete.
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.southwind</groupId>
    <artifactId>aimybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--添加驱动-->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.6</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
<!--读取文件-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>*.xml</include>
                    <include>*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>

</project>

Finalmente ejecuté la clase de prueba Test, utilicé Navicat para ver la base de datos, y de hecho inserté nuevos datos.

Inserte la descripción de la imagen aquí


2. Lo siguiente es usar la interfaz de proxy de Mapper, compartiendo la misma clase de Cuenta arriba

  • Agrega tres archivos nuevos
    Inserte la descripción de la imagen aquí
  • Interfaz AccountRepository:
package com.southwind.repository;

import com.southwind.entity.Account;

import java.util.List;
//使用Mapper代理接口
//定义接口
public interface AccountRepository {
    public int save(Account account);
    public int update(Account account);
    public int deleteById(int id);
    public List<Account> findAll();
    public Account findById(int id);
    //    多个参数
    public Account findByNameAndAge(String name,int age);

}

  • Archivo AccountRepositoryMapper.xml:
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--定义XML文件 Mapper自动代理-->
<mapper namespace="com.southwind.repository.AccountRepository">
    <insert id="save" parameterType="com.southwind.entity.Account">
        insert into t_account(username,password,age)
        values(#{username},#{password},#{age})
    </insert>
    <update id="update" parameterType="com.southwind.entity.Account">
        update t_account
        set username = #{username},
        password = #{password},
        age = #{age}
        where id = #{id}
    </update>
    <delete id="deleteById" parameterType="int">
        delete from t_account
        where id = #{id}
    </delete>
    <select id="findAll" resultType="com.southwind.entity.Account">
        select * from t_account
    </select>
    <select id="findById" parameterType="int" resultType="com.southwind.entity.Account">
        select * from t_account where id = #{id}
    </select>
    <!--    传入多个参数时,不用写parameterType 用下标取值-->
    <select id="findByNameAndAge" resultType="com.southwind.entity.Account">
        select * from t_account where username = #{param1}and age = #{param2}
    </select>

</mapper>
  • Cree una nueva clase de prueba Test2:
package com.southwind.test;

import com.southwind.entity.Account;
import com.southwind.repository.AccountRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.List;

public class Test_2 {
    public static void main(String[] args) {
//        加载配置文件
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
//获取实现接口的代理对象
//        传入接口的运行实类
        AccountRepository accountRepository = sqlSession.getMapper(AccountRepository.class);
//       查询所有
//        List<Account> list = accountRepository.findAll();
//        for (Account account:list){
//            System.out.println(account);
//        }
//        添加对象
//        Account account = new Account(3,"huihui","112233",20);
//        accountRepository.save(account);
//        提交事务(添加,删除,修改)
//        sqlSession.commit();
//        关闭
//        sqlSession.close();
//        通过Id查询对象
//        Account account = accountRepository.findById(2);
//        System.out.println(account);
//        sqlSession.close();
//        修改对象
//        Account account = accountRepository.findById(3);
//        account.setUsername("huihui");
//        account.setPassword("000");
//        account.setAge(18);
//        int result = accountRepository.update(account);
//        sqlSession.commit();
//        System.out.println(result);
//        sqlSession.close();
//        通过ID删除对象
//        int result = accountRepository.deleteById(3);
//        System.out.println(result);
//        sqlSession.commit();
        System.out.println(accountRepository.findByNameAndAge("zhangsan",22));
        sqlSession.close();
    }
}

  • No olvides registrar XML:
     <mapper resource="com/southwind/repository/AccountRepositoryMapper.xml"></mapper>
  • Este es el resultado de la operación:
    Inserte la descripción de la imagen aquí

Debido a que también usé JPA para hacer un proyecto de blog personal antes, pero debido a la falta de planificación y planificación adecuadas del proyecto, el problema de la página de inicio apareció más tarde. Esto es todo después. Simplemente compare MyBatis y JPA, personalmente creo Son muy fáciles de usar. Si es conveniente para usted, es muy conveniente y conveniente. Se recomienda usar JPA; si tiene cierta base para las declaraciones SQL, se recomienda usar MyBatis. Por supuesto, para un programador calificado, es mejor dominar ambos. Finalmente, hubo otra ola de Amway. Nan Ge te enseñó a aprender Java. No hice publicidad. Creo que es realmente bueno.
20 artículos originales publicados · elogiados 4 · visitas 612

Supongo que te gusta

Origin blog.csdn.net/qq_45031575/article/details/105009867
Recomendado
Clasificación