Primeiros passos com Mybatis 01

1. Introdução de Mybatis

Mybatis é uma estrutura de camada de persistência que suporta consultas SQL comuns, procedimentos armazenados e mapeamento avançado. É uma estrutura de camada de persistência ORM semiautomática com alta flexibilidade SQL, suporta mapeamento avançado (um para um, um para muitos), SQL dinâmico, carregamento lento e recursos de cache, mas sua independência de banco de dados é baixa.

JDBC-> dbutils-> MyBatis-> Hibernate

O Hibernate é um framework totalmente automatizado

2. Mybatis Quick Start

Primeiro: adicione o pacote jar

mysql , mybatis , lombok

Nota: lombok: (deve-se instalar o plug-in lombok da ideia, que pode gerar estruturas get, set, parametrizadas e não parametrizadas de classes de entidade)

<!--        mysql依赖-->
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
<!--        mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
<!--        lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>

Segundo: Crie um banco de dados e uma tabela

Facilita a configuração de mybatis-config.xml

Terceiro: adicione o arquivo de configuração Mybatis mybatis-config.xml

<?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>
    <environments default="development">
        <environment id="development">
         <!--  JDBC:代表使用的事务管理类型,默认打开事务,操作之后需要手动提交-->
            <transactionManager type="JDBC"/>   
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--  ppp代表连接数据库的表-->
                <property name="url" value="jdbc:mysql://localhost:3306/ppp"/>
                <!--  username代表数据库的用户名-->
                <property name="username" value="root"/>
                <!--  password代表数据库的密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

Quarto: Defina a classe de entidade correspondente à tabela

//以下注解是Lombok中的注解
@Data  (包括get、set、toString)
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String username;
    private String password;
}

Quinto: Definir a operação CURD (adicionar, excluir, modificar e verificar) para operar a tabela do usuário

arquivo de mapeamento sql UserMapper.xml

Nota:

resultType: o tipo de dados retornado após a execução da instrução de consulta. O tipo int pode ser omitido e outros tipos não podem ser omitidos.

parameterType: indica o tipo do parâmetro passado, o atributo não pode ser adicionado

namespace: namespace, dê um nome exclusivo ao contêiner que atualmente armazena mybatis, que deve corresponder ao caminho completo da interface

select: indica o rótulo da consulta: a instrução sql para a consulta pode ser colocada no rótulo

id: o único sinal, o nome deve ser igual ao nome da interface;

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--   namespace必须和接口的全路径匹配-->
<mapper namespace="com.zz.dao.UserDao">
    <!--    id名字必须要跟接口名字一样-->
<!-- select 代表添加的sql   -->
    <select id="selectAll" resultType="com.zz.entity.User">
    select * from user
    </select>
<!-- insert 代表添加的sql   insertUser必须和映射dao接口的方法名一致 -->
    <insert id="insertUser">
        insert into user(username,password) values (#{param1},#{param2})
    </insert>
<!-- update 代表修改的sql   -->
    <update id="updateUser">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
<!-- delete 代表删除的sql   -->
    <delete id="deleteUser">
        delete from user where id=#{id}
    </delete>
</mapper>

Sexto: Registre o arquivo userMapper.xml no arquivo conf.xml

Nota:

  • A tag dos mapeadores deve ser colocada em <configuration> </configuration>
  • resource = "mapper path" Por exemplo: resource = "mapper \ UserMapper.xml"
 <mappers>
        <mapper resource="mapper\UserMapper.xml"/>
</mappers>

Sétimo: Escreva o código de teste:

Nota: O gerenciamento de transações JDBC abre transações por padrão. Após adicionar, excluir e modificar as operações, você precisa confirmar a transação. Por exemplo: session.commit ();

Acréscimos, exclusões, correções comuns

Por exemplo: haha.selectById

haha: namespace = "haha", o nome do namespace mapper.xml

selectById: id = "selectById"

  1. Investigar

Nota: selectOne significa apenas uma consulta

selectList () indica que a consulta é um tipo de coleção de lista.

 

  public static void main(String[] args) throws Exception {
//        查询
//加载 mybatis 的配置文件(它也加载关联的映射文件)
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//构建 sqlSession 的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中 sql 的 sqlSession
        SqlSession session = sessionFactory.openSession();
//        执行sql   haha:命名空间的名字
        User user = session.selectOne("haha.selectById", 2);
        System.out.println(user);
    }

2. Adicionar

inserir significa adicionar método

 

 

  //    添加
    @Test
    public void insert() throws Exception {
//        1.读取mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//        2.读取sqlSessionFaction
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        3.获取sqlSession对象
        SqlSession session = sessionFactory.openSession();
//        4.执行sql
        int insert = session.insert("haha.insertUser", new User("峥峥", "111"));
//        增删改需要提交事务
        session.commit();
        System.out.println(insert);

    }

3. Modificar

atualização significa o método de modificação

 

    //修改
    @Test
    public void update() throws Exception {
//添加mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//      获取sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        读取sqlSession对象
        SqlSession session = sessionFactory.openSession();
        int update = session.update("haha.updateUser", new User(3, "李四", "333"));
//执行sql
        session.commit();
        System.out.println(update);

    }

4. Excluir

deletar significa deletar método

 

//    删除
    @Test
    public void delete() throws Exception{
//      1.  添加mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//    2 获取·sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        3 读取sqlSession对象 执行sql语句
        SqlSession session = sessionFactory.openSession();
//        4.执行sql
        int delete = session.delete("haha.deleteUser", 2);
//        5 提交事务
        session.commit();
        System.out.println(delete);

    }

Operação em desenvolvimento real:

Nota: No desenvolvimento real, a interface deve ser usada em conjunto com o arquivo de mapeamento

1. A interface criada userDao

 

public interface UserDao {
    /**
     * 查询所有的用户信息
     * @return返回所有的用户信息
     */
    List<User> selectAll();
/**
 * 添加用户信息
 */
    int insertUser(String username,String password);
    /**
     * 修改用户信息
     */
    int updateUser(User user);

    /**
     * 删除用户信息
     */
    int deleteUser(int id);
}

2. Crie o arquivo mapeado

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--   namespace必须和接口的全路径匹配-->
<mapper namespace="com.zz.dao.UserDao">
    <!--    id名字必须要跟接口名字一样-->
    <select id="selectAll" resultType="com.zz.entity.User">
    select * from user
    </select>
    <insert id="insertUser">
        insert into user(username,password) values (#{param1},#{param2})
    </insert>
    <select id="selectByuserAndpwd" resultType="com.zz.entity.User">
        select * from user where username=#{username} and password=#{password}
    </select>
    <update id="updateUser">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
    <delete id="deleteUser">
        delete from user where id=#{id}
    </delete>
</mapper>

3. Adicionar, excluir e modificar operações no desenvolvimento real

  • Execute a instrução de seleção definida
  /**
     * 查询全部
     * @throws Exception
     */
    @Test
    public void select()throws Exception{
//        先读取mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//        获取sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        读取sqlSession对象
        SqlSession session = sessionFactory.openSession();
//      得到对应接口的实现类
        UserDao mapper = session.getMapper(UserDao.class);
        List<User> users = mapper.selectAll();
//        提交事务
        session.commit();
        System.out.println(users);
    }
  • Execute a instrução de inserção definida

 

 //    添加用户
    public static void main(String[] args) throws Exception{
//        1.先获取mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//    2.获取sqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        3 读取sqlSession对象 执行sql语句
        SqlSession session = sessionFactory.openSession();
//        4.执行sql
        UserDao userDao = session.getMapper(UserDao.class);//获得对应接口的实现类
        int i = userDao.insertUser("峥11", "11111");
        session.commit();
        System.out.println(i);
    }
  • Execute a instrução de atualização definida
   /**
     * 修改
     * @throws Exception
     */
    @Test
    public void update() throws Exception{
//        先读取mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//        获取sqlsessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//        读取sqlSessiom对象
        SqlSession session = sessionFactory.openSession();
//        得到对应的实现类
        UserDao userDao = session.getMapper(UserDao.class);
        int i = userDao.updateUser(new User(4, "哈哈哈", "222"));
//        提交事务
        session.commit();
        System.out.println(i);
    }
  • Execute a instrução de exclusão definida
/**
     * 删除
     * @throws Exception
     */
    @Test
    public void delete() throws Exception{
//        读取mybatis-config.xml
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
//        获取sqlSessionFaction
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//       获取到sqlSession对象
        SqlSession session = sessionFactory.openSession();
//        获取到接口对应的实现类
        UserDao mapper = session.getMapper(UserDao.class);
        int i = mapper.deleteUser(5);
        session.commit();
        System.out.println(i);
    }

Precauções

Pode ocorrer incompatibilidade no mapeamento mapper.xml para a camada dao

O primeiro:

Adicionar @param a UserDao significa usar o nome do parâmetro como o nome do parâmetro do arquivo de mapeamento

UserMapper.xml: mapeamento mapper.xml

 

O segundo tipo:

UserMapper.xml: mapeamento mapper.xml

Camadas dao média UserDao

 

 

 

 

Acho que você gosta

Origin blog.csdn.net/weixin_45861581/article/details/115018014
Recomendado
Clasificación