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"
- 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