Maison > Java > javaDidacticiel > le corps du texte

Qu'est-ce que Mybatis ? Introduction au contenu lié à Mybatis

不言
Libérer: 2018-10-12 14:44:05
avant
2981 Les gens l'ont consulté

Cet article vous explique qu'est-ce que Mybatis ? L'introduction du contenu lié à Mybatis a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère que cela vous sera utile.

Introduction à MyBatis

MyBatis était à l'origine un projet open source iBatis d'Apache. En 2010, ce projet est passé de la fondation logicielle Apache au code Google et. renommé MyBatis . Migré vers Github en novembre 2013.

MyBatis est un excellent framework de couche de persistance qui prend en charge le SQL personnalisé, les procédures stockées et le mappage avancé. MyBatis évite presque tout le code JDBC, le réglage manuel des paramètres et la récupération des jeux de résultats. MyBatis peut utiliser du XML simple ou des annotations pour la configuration et des cartes natives pour mapper les interfaces et les POJO Java (Plain Old Java Objects, objets Java ordinaires) dans les enregistrements de la base de données.

Site officiel de référence MyBatis

http://www.mybatis.org/mybatis-3/zh/index.html

Adresse de téléchargement MyBatis

https://github.com/mybatis/mybatis-3

Avantages de MyBatis

  • Excellent cadre de couche de persistance open source

  • Séparation des instructions SQL et du code

  • Programmation orientée configuration

  • Bonne prise en charge du mappage de données complexe

  • SQL dynamique

Étapes de développement de MyBatis

1. Ajoutez le package jar requis

. 🎜 >

1) Package principal mybatis-3.3.0 (si vous avez besoin d'une opération de journalisation, vous pouvez importer des packages dépendants)

2) Pilote de base de données (mysql-connector-java-5.1.22 -bin)

create table `tal_employee` (
    `id` int (11),
    `last_name` varchar (360),
    `email` varchar (300),
    `gender` char (9)
);
Copier après la connexion
2. Créez une base de données et ajoutez des données de test
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('1','韩信','hanxin@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('2','LiBaihH','libai@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('3','孙尚香','sunshangxiang@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('4','安琪拉','anqila@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('5','Hello','Hello@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('6','Miya','Miya@gemail.com','男');
Copier après la connexion
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    //此处省略get set toString。。。
}
Copier après la connexion
3. >
4. Créer un fichier de configuration de mappage de classe d'entité
<?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="EmployeeMapper">
    <!-- 定义一个查询方法  resultType 返回值类型-->
    <select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select * from tal_employee
    </select>
</mapper>
Copier après la connexion
5. Créer un fichier de configuration principal 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>
    <!-- 配置环境  default默认使用环境名字-->
    <environments default="development">
        <!-- 配置一个环境 -->
        <environment id="development">
            <!-- 使用事务JDBC事务管理器 -->
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载映射 -->
    <mappers>
        <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml" />
    </mappers>
</configuration>
Copier après la connexion

Récupérez l'objet SqlSessionFactory

private SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException{
        //读取mybatis主配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        /**
         * 实例化SqlSessionFactory
         * 如果没有指定默认环境,可以在这里指定使用的环境ID,比如我先在有个DEV环境
         * sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"DEV");
         * 我这里已经使用了默认环境所以我就不用这种方式创建了
         */
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
Copier après la connexion

Accédez à la base de données

Récupérez l'objet SqlSession, qui agit sur une conversation avec la base de données. agit sur une conversation avec la base de données
SqlSession session = sqlSessionFactory.openSession();
Copier après la connexion

Obtenir tous les enregistrements des employés

EmployeeMapper est l'espace de noms de notre fichier de mappage de classe d'entité, findAll est l'ID de notre balise de sélection
List<Employee> employees = session.selectList("EmployeeMapper.findAll");
        for (Employee employee : employees) {
            System.out.println(employee);
        }
Copier après la connexion

Résultats d'accès :
Employee [id=1, lastName=null, email=hanxin@gemail.com, gender=男]
Employee [id=2, lastName=null, email=libai@gemail.com, gender=男]
Employee [id=3, lastName=null, email=sunshangxiang@gemail.com, gender=女]
Employee [id=4, lastName=null, email=anqila@gemail.com, gender=女]
Employee [id=5, lastName=null, email=Hello@gemail.com, gender=男]
Employee [id=6, lastName=null, email=Miya@gemail.com, gender=男]
Copier après la connexion

Il est normal que nous accédions à la base de données ici. Pourquoi lastName est-il vide ?

Résoudre le problème selon lequel les champs de table ne correspondent pas aux noms d'attributs de classe

Raison : cela devrait être dû au fait que l'attribut de notre classe d'entité appelé lastName ne correspond pas au nom de la colonne de la base de données last_name, donc on l'obtient La valeur est vide

Solution 1 : Alias ​​​​la balise select dans le fichier de mappage de classe d'entité
<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>
Copier après la connexion

Solution 2 : Configurer camel dénomination des cas dans le fichier de configuration principal de mybatis. La configuration doit être classée en premier, sinon l'erreur XML sera signalée
<settings>
    <!-- 开启驼峰式命名规则 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
Copier après la connexion

Utilisez l'option 2. L'attribut lastName dans notre classe correspondra au champ de la base de données last_name

Utilisez le journal pour afficher les instructions SQL, etc.

Nous devons d'abord ajouter le package de dépendances mybatis

Ajouter log4j.properties
#设置输出级别和输出位置
log4j.rootLogger=debug,Console
#设置控制台相关的参数
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
#设置MyBatis的输出内容
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG
Copier après la connexion

afin que nous puissions utiliser log4j pour afficher nos instructions SQL et nos paramètres entrants. . Attendez

Fichier de configuration MyBatis

  • À travers le cas simple MyBatis précédent, vous devez comprendre la structure de base du framework MyBatis, qui est la même comme Hibernate, MyBatis contient un fichier de configuration de base et un fichier de mappage.
  • Fichier de configuration de base (mybatis-config.xml) : contient la configuration de base de Mybatis, y compris les informations sur le pool de connexions, les transactions, le chargement des fichiers de mappage, les paramètres et d'autres configurations.
  • Fichier de mappage (EmployeeMapper.xml) : implémente principalement le mappage des objets d'entité à la base de données, les associations, les instructions SQL, etc.

Fichier de configuration de base
标签说明

配置环境

一些外部属性,这些属性可以被替换

Mybatis中极为重要的调整设置,会改变Mybatis的默认行为。

为Java类型设置一个别名,它只和xml配置有关。

映射器,加载MyBatis的映射文件。

插件,Mybatis允许用户在映射的某一点进行拦截。
< /tr>< td><🎜>
BaliseDescription
<🎜>Environnement de configuration
Certains attributs externes, ces attributs peuvent être remplacés
<🎜> Les paramètres de réglage extrêmement importants dans Mybatis modifieront le comportement par défaut de Mybatis.
<🎜>Définissez un alias pour le type Java, qui est uniquement lié à la configuration XML.
<🎜>Mapper, charge le fichier de mappage MyBatis.
<🎜>Plug-in, Mybatis permet aux utilisateurs d'intercepter à un certain point de la cartographie.

环境配置

  1. Mybatis可以通过

    配置多种环境,比如开发环境、测试环境和生产环境等。

  2. 不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。

事务管理

在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。

  1. JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

  2. MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>
Copier après la connexion

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

数据源

使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型

  1. UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。

  2. POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。

  3. JNDI:使用JNDI在外部配置数据源。

properties标签

properties为外部属性,比如数据库连接信息可以配置到一个单独的properties文件中,然后在xml中进行引入。

添加一个db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
Copier après la connexion

在mybatis主配置文件中引用

<properties resource="db.properties" />
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${driver}" />
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
        </dataSource>
    </environment>
</environments>
Copier après la connexion

映射器

通常MyBatis中将映射关系(非必须)和SQL语句写入到映射文件中,在配置文件中需要手动进行加载映射文件。加载映射文件使用进行加载。Mybatis中有4种加载方式。

1.使用resource,加载classpath路径进行加载。

<mappers>
    <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml"/>
</mappers>
Copier après la connexion

2.使用url路径进行加载。

<mappers>
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
Copier après la connexion

3.使用calss进行加载,注解方式。

<!– 加载class类-->
<mappers>
    <mapper class="使用注解的全类名"/>
</mappers>
Copier après la connexion

4.使用package进行加载,注解方式。

<!– 加载某个包下的所有class文件-->
<mappers>
    <package name="com.simple.mybatis.entitys"/>
</mappers>
Copier après la connexion

别名的使用

之前,我们在sql映射xml文件中的引用实体类时,resultType需要写上实体类的全类名(包名+类名),如下:

<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>
Copier après la connexion

在mybatis主配置文件中加入

<typeAliases>
    <typeAlias type=“com.simple.mybatis.entitys.Employee" alias="Employee"/>
</typeAliases>
Copier après la connexion

这样在resultType中就可以直接使用Employee类型了。这个别名是不区分大小写的。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal