Framework : Un produit semi-fini, un ensemble de composants, d'une application qui est un logiciel mature, continuellement mis à jour.
(1) Application : la conception réutilisable de tout ou partie du système, exprimée sous la forme d'un ensemble de composants abstraits et la méthode d'interaction entre les instances de composants ;
(2) Objectif : Squelette d'application personnalisé par les développeurs d'applications
Différents frameworks résolvent différents problèmes.Le framework encapsule de nombreux détails, permettant aux développeurs d'implémenter des fonctions de manière minimaliste et d'améliorer considérablement l'efficacité du développement.
Architecture à trois niveaux :
Couche de présentation : afficher les données
Couche métier : gère les exigences métier
Couche de persistance : interagir avec la base de données
JDBC技术:Connection,prepareStatement,ResultSet,JDBCTemplate
JDBC n'est pas un framework, c'est une spécification, et JDBCTemplate est une classe d'outils.
Problèmes JDBC :
Le vrai souci est l'instruction sql, et jdbc doit préparer beaucoup de contenu, qui est répétitif et peut être simplifié.
aperçu mybatis :
(1) Un excellent framework de couche de persistance basé sur Java, qui encapsule jdbc en interne , de sorte que les développeurs n'ont qu'à prêter attention à l'instruction sql elle-même, et n'ont pas besoin de dépenser de l'énergie pour charger des pilotes, créer des connexions, créer des instructions et d'autres éléments compliqués. processus.
(2) Configurez les différentes instructions à exécuter via xml ou des annotations, et mappez l'objet java et les paramètres dynamiques sql dans l'instruction pour générer l'instruction sql finale exécutée.Enfin, le framework mybatis exécute le sql et mappe le résultat à java objet et retour
(3) L'idée ORM est utilisée pour résoudre le problème de mappage d'entités et de bases de données, encapsule jdbc et protège les détails d'accès sous-jacents de jdbc api
ORM : mappage relationnel d'objets Mappage relationnel d'objets, qui mappe les tables de base de données sur les classes d'entités et les attributs des classes d'entités, afin que nous puissions exploiter la base de données en exploitant les classes d'entités
Persistance des données :
*La persistance est le processus de conversion des données du programme en état persistant et en état transitoire
* Mémoire : perdue lors de la mise hors tension
Couche de persistance : le bloc de code qui complète le travail de persistance
Le premier programme Mybatis :
Construire l'environnement--->Importer MyBatis--->Ecrire du code--->Tester
Construisez la base de données :
Nouveau projet:
1. Créer un nouveau projet maven
2. Supprimer la source
3. Importer des dépendances
pom.xml :
<?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.kuang</groupId>
<artifactId>Mybatis-study</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>mybatis-01</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
4. Créer des sous-projets
5. Écrivez le fichier de configuration du noyau mybatis
<?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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?userSSL=true&
userUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="lfd011003"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/kuang/dao/UserMapper.xml"/>
</mappers>
</configuration>
Écrivez la classe d'outils :
package com.kuang.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//sqlSessionFactory --> sqlSession
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。
// 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
classe d'entité
package com.kuang.pojo;
public class User {
private int id;
private String name;
private String pwd;
public User() {
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
Interface Dao
package com.kuang.dao;
import com.kuang.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
classe d'implémentation d'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">
<mapper namespace="com.kuang.dao.UserDao">
<select id="getUserList" resultType="com.kuang.pojo.User">
select * from mybatis.user
</select>
</mapper>
Classe d'essai :
package com.kuang.dao;
import com.kuang.pojo.User;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> userList = mapper.getUserList();
for (User user : userList) {
System.out.println(user);
}
}
}