Répertoire d'articles
Présentation de MyBatis
- MyBatis était à l'origine un projet open source iBatis d'Apache
- En 2010, le projet a été migré de la fondation logicielle Apache vers Google Code, et a été renommé MyBatis
- Migré vers GitHub en novembre 2013
- MyBatis est un framework de persistance qui prend en charge les requêtes SQL personnalisées, les procédures stockées et le mappage avancé
- Par rapport au développement JDBC traditionnel, MyBatis élimine presque tous les réglages manuels des codes et des paramètres
- MyBatis est un framework ORM
- MyBatis peut utiliser du XML ou des annotations pour la configuration et le mappage, c'est Classes d'entité et instructions SQL Une relation de mappage est établie entre, et Hibernate est enClasses d'entité et tables de base de donnéesÉtabli une relation de mappage entre.
Hibernate et MyBatis sont à la fois des frameworks de persistance et des frameworks ORM. Tous simplifient les opérations de persistance.
Tous les programmes finalement générés par MyBatis sont générés manuellement par les programmeurs.
- Code source GitHub:
https://github.com/mybatis/mybatis-3 - Manuel chinois MyBatis:
http://www.mybatis.org/mybatis-3/zh/index.html
Fichier de configuration XML de base MyBatis
Le fichier de configuration XML (configuration XML) contient les paramètres de base du système MyBatis, y compris la source de données (DataSource) pour obtenir les instances de connexion à la base de données et le gestionnaire de transactions (TransactionManager) qui détermine la portée et la méthode de contrôle de la transaction.
<?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>
<settings>
全局参数的设置
打印SQL语句
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
多个数据源环境配置
<environments default="development">
<environment id="development">
事务和数据源
</environment>
</environments>
</configuration>
<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?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
Choisir Géré signifie qu'il est géré par le conteneur.
Après avoir utilisé Spring, vous pouvez utiliser les types suivants
non poolé: pas de pool de connexion à la base de données, chaque fois qu'un nouveau lien est créé
poolé: pool de connexion à la base de données, utilisez le lien
jndi du pool de liens de base de données :
-
UNPOLED: La mise en œuvre de cette source de données consiste simplement à ouvrir et fermer la connexion chaque fois qu'elle est demandée. Il est un peu lent, ce qui est un bon choix pour les applications simples, car il ne nécessite pas une connexion disponible en temps opportun.
-
POOLED: il s'agit de l'implémentation du pool de connexions à la source de données de l'objet de connexion JDBC, qui est utilisé pour éviter la connexion initiale et le temps d'authentification nécessaires lors de la création d'une nouvelle instance de connexion. Il s'agit d'une méthode populaire utilisée par les applications Web actuelles pour répondre rapidement aux demandes
-
JNDI: cette source de données est implémentée pour utiliser des conteneurs tels que Spring ou des serveurs d'applications. Le conteneur peut configurer la source de données de manière centralisée ou externe, puis placer une référence au contexte JNDI.
<?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">
<!-- SQL映射文件的配置 -->
<!-- nameSpace=映射空间。唯一标识的字符串-->
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="selectAllUsers"
resultType="com.mybatis.entity.User">
select * from user
</select>
</mapper>
La hiérarchie de classes principale de MyBatis
SqlSessionFactory: peut créer un exécuteur de classe d'usine Seiion
: génération d'instruction dynamique et maintenance du cache
public class MyBatisUtil {
private static SqlSessionFactory factory;
//第一次加载时自动执行
static {
try {
//参数:主配置文件的文件名。默认路径resources文件目录
InputStream is = Resources.getResourceAsStream("mybatis.xml");
factory = new SqlSessionFactoryBuilder().build(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession openSqlSession() {
return factory.openSession();
}
}
Le premier programme MyBatis
Manuel
Structure du projet
-
Créer un projet Java
-
Importez le package jar requis par MyBatis
L'un est que MyBatis doit être emballé. L'un est le package de pilotes MySql.
-
Créer des classes d'entité et une interface de mappage (DAO)
user.java
package com.mybatis.entity;
public class User {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";
}
}
UserMapper.java
package com.mybatis.mapper;
import java.util.List;
import com.mybatis.entity.User;
//类型是interface ,
//这是映射器接口,定义对持久化对象的增删改查方法
//一个映射器接口对应一个映射文件
public interface UserMapper {
List<User> findAllUsers();
}
-
Créez le fichier de configuration principal mybatis.xml pour MyBatis
Créez un nouveau dossier source dans le projet et nommez-le resources pour stocker le fichier de configuration principal de MyBatis, et créez un nouveau fichier XML dans les ressources et nommez-le mybatis.xml
MaBatis.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>
<!--全局参数的设置,例如日志的实现类 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--多个数据源环境配置,default:下面定义的标签的id-->
<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/database_mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- SQL映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
-
Créer un fichier XML de mappage SQL pour MyBatis
Créez le fichier XML de mappage SQL de MyBatis, et le fichier de mappage doit être dans le même package que l'interface de mappage qui vient d'être créée, et le nom de l'interface de mappage est le même, de sorte que le nom du fichier de mappage est UserMapper.xml
Remarque: pour associer le fichier de mappage au fichier de configuration principal
UserMapper.xml
<?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.mybatis.mapper.UserMapper">
<!-- select用来映射查询语句
id=对应的映射器接口的方法名
resultType同映射接口中该方法的返回值类型一致,或跟返回值中元素类型一致
因为没有声明文件位置,所以参数需要输入全部包名-->
<select id="findAllUsers" resultType="com.mybatis.entity.User">
select * from mybatis_01_01_user
</select>
<select id=""></select>
</mapper>
- Associez le fichier de mappage SQL au fichier de configuration principal
Ajouter du code dans le fichier MyBatis.xml
<!-- SQL映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
</mappers>
- Ecrire du code à tester
Test.java
package com.mybatis.ui;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;
public class Test {
public static void main(String[] args) {
System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
//创建SqlSession对象
SqlSession session = MyBatisUtil.openSqlSession();
//映射器接口权限定名+方法名(映射文件的nameSpace的数值+某一条SQL语句映射的id属性的值)
//方式1,调用SqlSession的方法
System.out.println("-=---------------------");
List<User> users = session.selectList("com.mybatis.mapper.UserMapper.findAllUsers");
System.out.println(users);
session.close();
}
}
Test.java
package com.mybatis.ui;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;
public class Test {
public static void main(String[] args) {
//方式2:更推荐
//参数=映射器接口的类型,
//返回值=该接口实现类型对象
SqlSession session = MyBatisUtil.openSqlSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.findAllUsers();
System.out.println(users);
System.out.println("----------------------------");
session.close();
}
}
Flux de travail SqlSession
Le fonctionnement de la transaction est mis ici
L'instruction SQL peut être localisée via l'identifiant unique