Heim  >  Artikel  >  Java  >  Was ist Mybatis? Einführung in Mybatis-bezogene Inhalte

Was ist Mybatis? Einführung in Mybatis-bezogene Inhalte

不言
不言nach vorne
2018-10-12 14:44:062977Durchsuche

In diesem Artikel erfahren Sie, was Mybatis ist. Die Einführung von Mybatis-bezogenen Inhalten hat einen gewissen Referenzwert. Freunde in Not können darauf verweisen.

Einführung in MyBatis

MyBatis war ursprünglich ein Open-Source-Projekt iBatis von Apache. Im Jahr 2010 wurde dieses Projekt von Apache Software Foundation auf Google Code verschoben umbenannt in MyBatis. Im November 2013 auf Github migriert.

MyBatis ist ein hervorragendes Persistenzschicht-Framework, das benutzerdefiniertes SQL, gespeicherte Prozeduren und erweiterte Zuordnung unterstützt. MyBatis vermeidet fast den gesamten JDBC-Code und das manuelle Festlegen von Parametern sowie das Abrufen von Ergebnismengen. MyBatis kann einfaches XML oder Annotationen für die Konfiguration und native Maps verwenden, um Schnittstellen und Java-POJOs (Plain Old Java Objects, gewöhnliche Java-Objekte) in Datensätzen in der Datenbank abzubilden.

Offizielle MyBatis-Referenz-Website

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

MyBatis-Downloadadresse

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

Vorteile von MyBatis

  • Open Source ausgezeichnetes Persistenzschicht-Framework

  • Trennung von SQL-Anweisungen und Code

  • Konfigurationsorientierte Programmierung

  • Gute Unterstützung für komplexe Datenzuordnung

  • Dynamisches SQL

MyBatis-Entwicklungsschritte

1. Fügen Sie das erforderliche JAR-Paket hinzu

1) mybatis-3.3.0-Kernpaket (wenn Sie einen Protokollvorgang benötigen, können Sie abhängige Pakete importieren)

2) Datenbanktreiber (mysql-connector-java-5.1.22 -bin)

Datenbank erstellen und Testdaten hinzufügen

create table `tal_employee` (
    `id` int (11),
    `last_name` varchar (360),
    `email` varchar (300),
    `gender` char (9)
);
rrree
3. Entitätsklasse erstellen
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','男');
4. Entitätsklassenzuordnungskonfigurationsdatei erstellen
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    //此处省略get set toString。。。
}
5. Mybatis-Hauptkonfigurationsdatei erstellen
<?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>

SqlSessionFactory-Objekt abrufen

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

Auf die Datenbank zugreifen

Das SqlSession-Objekt abrufen, auf eine Konversation mit der Datenbank reagieren. Auf eine Konversation mit der Datenbank reagieren

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);
    }

Alle Mitarbeiterdatensätze abrufen

EmployeeMapper ist der Namespace unserer Entity-Class-Mapping-Datei, findAll ist die ID unseres Select-Tags

SqlSession session = sqlSessionFactory.openSession();

Zugriffsergebnis:

List<Employee> employees = session.selectList("EmployeeMapper.findAll");
        for (Employee employee : employees) {
            System.out.println(employee);
        }

Es ist normal, dass wir auf die zugreifen Datenbank hier, warum ist lastName leer?

Lösen Sie das Problem, dass Tabellenfelder nicht den Klassenattributnamen entsprechen

Grund: Es sollte daran liegen, dass das Attribut unserer Entitätsklasse namens lastName nicht dem entspricht Name der Datenbankspalte Nachname, daher wird der Wert erhalten. Der Wert ist leer

Lösung 1: Alias ​​​​des Select-Tags in der Entitätsklassenzuordnungsdatei

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=男]

Lösung 2: Konfigurieren Sie die Benennung von Kamelbuchstaben In der Hauptkonfigurationsdatei von mybatis müssen Sie die Konfiguration an erster Stelle platzieren, andernfalls wird ein XML-Fehler gemeldet.

<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>

Verwenden Sie Option 2. Das Attribut lastName in unserer Klasse stimmt mit dem Datenbankfeld last_name überein

Verwenden Sie Protokolle, um SQL-Anweisungen usw. anzuzeigen.

Zuerst müssen wir das mybatis-Abhängigkeitspaket hinzufügen

log4j.properties hinzufügen

<settings>
    <!-- 开启驼峰式命名规则 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

Also dass wir log4j verwenden können, um unsere SQL-Anweisungen und eingehenden Parameter anzuzeigen. . Warten

MyBatis-Konfigurationsdatei

  • Durch den vorherigen einfachen MyBatis-Fall sollten Sie die Grundstruktur des MyBatis-Frameworks verstehen, die dieselbe ist Als Hibernate enthält MyBatis eine Kernkonfigurationsdatei und eine Zuordnungsdatei.

  • Kernkonfigurationsdatei (mybatis-config.xml): Enthält die Kernkonfiguration von Mybatis, einschließlich Verbindungspoolinformationen, Transaktionen, Ladezuordnungsdateien, Parametereinstellungen und anderen Konfigurationen.

  • Zuordnungsdatei (EmployeeMapper.xml): implementiert hauptsächlich die Zuordnung von Entitätsobjekten zur Datenbank, Zuordnungen, SQL-Anweisungen usw.

Kernkonfigurationsdatei

Tag Beschreibung
标签 说明

配置环境

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

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

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

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

插件,Mybatis允许用户在映射的某一点进行拦截。
Konfigurationsumgebung
Einige externe Attribute, diese Attribute können ersetzt werden
Die äußerst wichtigen Anpassungseinstellungen in Mybatis werden das Standardverhalten von Mybatis ändern.
Legen Sie einen Alias ​​für den Java-Typ fest, der sich nur auf die XML-Konfiguration bezieht.
Mapper, lädt die MyBatis-Mapping-Datei.
Plug-in, Mybatis ermöglicht es Benutzern, an einem bestimmten Punkt im Mapping abzufangen.

环境配置

  1. Mybatis可以通过

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

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

事务管理

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

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

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

<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>

如果你正在使用 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

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

映射器

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

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

<mappers>
    <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml"/>
</mappers>

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

<mappers>
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>

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

<!– 加载class类-->
<mappers>
    <mapper class="使用注解的全类名"/>
</mappers>

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

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

别名的使用

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

<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>

在mybatis主配置文件中加入

<typeAliases>
    <typeAlias type=“com.simple.mybatis.entitys.Employee" alias="Employee"/>
</typeAliases>

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

Das obige ist der detaillierte Inhalt vonWas ist Mybatis? Einführung in Mybatis-bezogene Inhalte. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen