Notas de estudo 9 do SSM (Introdução a Mybatis)

1. Introdução a Mybatis

1.1 Operação jdbc original (dados de consulta)

Insira a descrição da imagem aqui

1.2 Operação jdbc original (inserir dados)

Insira a descrição da imagem aqui

1.3 Análise da operação jdbc original

Os problemas do desenvolvimento jdbc original são os seguintes:

① A criação e liberação frequentes de conexões de banco de dados causam desperdício de recursos do sistema e afetam o desempenho do sistema

② A instrução sql está embutida no código, o que torna o código difícil de manter.A aplicação real de sql pode mudar muito, e a mudança de sql requer a mudança do código java.

③Ao consultar, você precisa encapsular manualmente os dados do conjunto de resultados na entidade. Ao inserir, você precisa definir manualmente os dados da entidade para a posição de espaço reservado da instrução sql

Soluções para os problemas acima:

① Use o pool de conexão do banco de dados para inicializar os recursos de conexão

② Extraia a instrução sql para o arquivo de configuração xml

③ Uso de tecnologias subjacentes, como reflexão e introspecção, para mapear automaticamente entidades e tabelas com atributos e campos

1.4 O que é Mybatis

Mybatis é uma excelente estrutura de camada de persistência baseada em Java, que encapsula jdbc, de modo que os desenvolvedores só precisam prestar atenção à própria instrução sql, em vez de gastar energia nos complicados processos de carregar drivers, criar conexões e criar instruções.

Mybatis configura várias instruções a serem executadas por meio de xml ou anotação e gera a instrução sql final executada por meio do mapeamento de objetos java e dos parâmetros dinâmicos de sql na instrução.

Finalmente, o framework mybatis executa sql e mapeia o resultado para um objeto java e retorna. A ideia ORM é usada para resolver o problema de mapeamento de entidade e banco de dados, encapsular jdbc, proteger os detalhes do acesso subjacente da API jdbc, para que possamos concluir a operação de persistência do banco de dados sem lidar com a API jdbc.

2. Início rápido de Mybatis

2.1 Etapas de desenvolvimento do MyBatis

Endereço do site oficial MyBatis: http://www.mybatis.org/mybatis-3/

Insira a descrição da imagem aqui

Etapas de desenvolvimento do MyBatis:

①Adicione as coordenadas de MyBatis

② Criar tabela de dados do usuário

③ Escreva a classe de entidade do usuário

④ Grave o arquivo de mapeamento UserMapper.xml

⑤ Grave o arquivo principal SqlMapConfig.xml

⑥ Escrever aula de teste

2.2 Configuração do ambiente

1) Importar as coordenadas de MyBatis e outras coordenadas relacionadas

<!--mybatis坐标-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!--mysql驱动坐标-->
<dependency>    
    <groupId>mysql</groupId>   
    <artifactId>mysql-connector-java</artifactId>    
    <version>5.1.6</version>    
    <scope>runtime</scope>
</dependency>
<!--单元测试坐标-->
<dependency>    
    <groupId>junit</groupId>    
    <artifactId>junit</artifactId>    
    <version>4.12</version>    
    <scope>test</scope>
</dependency>
<!--日志坐标-->
<dependency>    
    <groupId>log4j</groupId>    
    <artifactId>log4j</artifactId>    
    <version>1.2.12</version>
</dependency>
  1. Criar tabela de dados do usuário

Insira a descrição da imagem aqui

  1. Gravar entidade do usuário
public class User {
    
        
	private int id;    
	private String username;    
	private String password;
    //省略get个set方法
}

4) Grave o arquivo de mapeamento do UserMapper

<?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">
<mapper namespace="userMapper">    
	<select id="findAll" resultType="com.itheima.domain.User">        
		select * from User    
	</select>
</mapper>
  1. Escreva o arquivo principal do MyBatis
<!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">            
			<transactionManager type="JDBC"/>            
			<dataSource type="POOLED">                
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql:///test"/>                
				<property name="username" value="root"/>
				<property name="password" value="root"/>            
			</dataSource>        
		</environment>    
	</environments>    
	
	<mappers> 
		<mapper resource="com/itheima/mapper/UserMapper.xml"/> 
	</mappers>
</configuration>

2.3 Escrevendo código de teste

//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new            
                           SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();

2.4 Resumo de conhecimento

Etapas de desenvolvimento do MyBatis:

①Adicione as coordenadas de MyBatis

② Criar tabela de dados do usuário

③ Escreva a classe de entidade do usuário

④ Grave o arquivo de mapeamento UserMapper.xml

⑤ Grave o arquivo principal SqlMapConfig.xml

⑥ Escrever aula de teste

3. Visão geral do arquivo de mapeamento do MyBatis

Insira a descrição da imagem aqui

4. Adicionar, excluir, modificar e verificar as operações de MyBatis

4.1 Inserir dados de operação do MyBatis

1) Grave o arquivo de mapeamento do UserMapper

<mapper namespace="userMapper">    
	<insert id="add" parameterType="com.itheima.domain.User">        
		insert into user values(#{id},#{username},#{password})    
	</insert>
</mapper>

2) Escreva o código para inserir a entidade Usuário

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new 
                        SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("userMapper.add", user);
System.out.println(insert);
//提交事务
sqlSession.commit();
sqlSession.close();

3) Preste atenção ao problema da operação de inserção

• A instrução de inserção usa a etiqueta de inserção

• Use o atributo parameterType no arquivo de mapeamento para especificar o tipo de dados a serem inseridos

• A instrução Sql usa # {nome do atributo da entidade} para se referir ao valor do atributo na entidade

• A API usada pela operação de inserção é sqlSession.insert ("namespace.id", objeto de entidade);

• A operação de inserção envolve mudanças nos dados do banco de dados, então você deve usar a transação de confirmação exibida pelo objeto sqlSession, ou seja, sqlSession.commit ()

4.2 Modificar a operação de dados do MyBatis

1) Grave o arquivo de mapeamento do UserMapper

<mapper namespace="userMapper">
    <update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
</mapper>

2) Escreva o código para modificar o usuário da entidade

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();

3) Atenção à operação de modificação

• Modifique a declaração usando a tag de atualização

• A API usada para a operação de modificação é sqlSession.update ("namespace.id", objeto de entidade);

4.3 Excluir operação de dados de MyBatis

1) Grave o arquivo de mapeamento do UserMapper

<mapper namespace="userMapper">
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>
</mapper>

2) Escreva o código para excluir os dados

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();

3) Atenção à operação de exclusão

• A instrução delete usa a tag delete

• A instrução Sql usa # {string arbitrária} para se referir a um único parâmetro passado

• A API usada para a operação de exclusão é sqlSession.delete ("Namespace.id", Object);

4.4 Resumo de Conhecimento

增删改查映射配置与API:
查询数据: List<User> userList = sqlSession.selectList("userMapper.findAll");
    <select id="findAll" resultType="com.itheima.domain.User">
        select * from User
    </select>
添加数据: sqlSession.insert("userMapper.add", user);
    <insert id="add" parameterType="com.itheima.domain.User">
        insert into user values(#{
    
    id},#{
    
    username},#{
    
    password})
    </insert>
修改数据: sqlSession.update("userMapper.update", user);
    <update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{
    
    username},password=#{
    
    password} where id=#{
    
    id}
    </update>
删除数据:sqlSession.delete("userMapper.delete",3);
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{
    
    id}
    </delete>

5. Visão geral do arquivo de configuração do MyBatis Core

5.1 Relação hierárquica do arquivo de configuração do núcleo MyBatis

Insira a descrição da imagem aqui

5.2 Análise de configuração comum MyBatis

1) etiqueta de ambientes

Configuração do ambiente de banco de dados, suporte para configuração de vários ambientes

Insira a descrição da imagem aqui

Entre eles, existem dois tipos de gerenciadores de transações:

• JDBC: esta configuração usa diretamente as configurações de confirmação e reversão do JDBC, que depende da conexão obtida da fonte de dados para gerenciar o escopo da transação.

• GERENCIADO: esta configuração não faz quase nada. Ele nunca confirma ou reverte uma conexão, mas permite que o contêiner gerencie todo o ciclo de vida da transação (como o contexto de um servidor de aplicativos JEE). Por padrão, ele fechará a conexão, mas alguns contêineres não querem isso, então você precisa definir a propriedade closeConnection como false para evitar seu comportamento de fechamento padrão.

Entre eles, existem três tipos de fontes de dados:

• UNPOOLED: A implementação desta fonte de dados apenas abre e fecha a conexão cada vez que é solicitada.

• POOLED: A realização desta fonte de dados usa o conceito de "pool" para organizar os objetos de conexão JDBC.

• JNDI: Esta fonte de dados é implementada para ser usada em contêineres como EJB ou servidores de aplicativos.O contêiner pode configurar a fonte de dados central ou externamente, e então colocar uma referência ao contexto JNDI.

2) tag mapeador

A função desta tag é carregar o mapeamento, e existem várias maneiras de carregá-lo:

• Use referências de recursos relativas ao classpath, por exemplo:

• Use localizadores de recursos totalmente qualificados (URL), por exemplo:

• Use a interface do mapeador para implementar o nome de classe totalmente qualificado da classe, por exemplo:

• Registre todas as implementações da interface do mapeador no pacote como mapeadores, por exemplo:

3) Guia Propriedades

No desenvolvimento real, é comum extrair as informações de configuração da origem de dados separadamente em um arquivo de propriedades, que pode carregar arquivo de propriedades de configuração adicional

Insira a descrição da imagem aqui

4) tag typeAliases

O alias de tipo é para definir um nome abreviado para o tipo Java. A configuração do nome do tipo original é a seguinte

Insira a descrição da imagem aqui

Configure typeAliases, defina aliases para com.itheima.domain.User como usuário

Insira a descrição da imagem aqui

Acima, somos aliases personalizados, o framework mybatis já configurou alguns tipos de aliases comumente usados ​​para nós

Insira a descrição da imagem aqui

5.3 Resumo de conhecimento

Configuração comum do arquivo de configuração principal:

tag de propriedades: esta tag pode carregar arquivos de propriedades externas

<properties resource="jdbc.properties"></properties>

tag typeAliases: definir aliases de tipo

<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>

guia mappers: carregar configuração de mapeamento

<mapper resource="com/itheima/mapper/UserMapping.xml"></mapper>

etiqueta de ambientes: etiqueta de configuração do ambiente de fonte de dados

Insira a descrição da imagem aqui

6. API correspondente do MyBatis

6.1 SqlSession Factory Builder SqlSessionFactoryBuilder

常用 API : SqlSessionFactory build (InputStream inputStream)

Construir um objeto SqlSessionFactory carregando o fluxo de entrada do arquivo principal de mybatis

String resource = "org/mybatis/builder/mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

Dentre elas, a classe da ferramenta Resources, esta classe está no pacote org.apache.ibatis.io. A classe Resources ajuda a carregar arquivos de recursos do classpath, sistema de arquivos ou um URL da web.

6.2 Objeto SqlSessionFactory SqlSessionFactory

SqlSessionFactory tem vários métodos para criar instâncias de SqlSession. Existem dois comumente usados:

Insira a descrição da imagem aqui

6.3 Objeto de Sessão SqlSession

A instância SqlSession é uma classe muito poderosa em MyBatis. Aqui você verá todos os métodos para executar instruções, confirmar ou reverter transações e obter instâncias do mapeador.

Os principais métodos de execução de instruções são:

<T> T selectOne(String statement, Object parameter) 
<E> List<E> selectList(String statement, Object parameter) 
int insert(String statement, Object parameter) 
int update(String statement, Object parameter) 
int delete(String statement, Object parameter)

Os principais métodos de transações operacionais são:

void commit()  
void rollback() 

Acho que você gosta

Origin blog.csdn.net/weixin_45394002/article/details/113521864
Recomendado
Clasificación