Heim >Java >javaLernprogramm >Was ist Mybatis? Einführung in Mybatis-bezogene Inhalte
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) 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
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','男');
public class Employee { private Integer id; private String lastName; private String email; private String gender; //此处省略get set toString。。。 }
<?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.
Tag | Beschreibung | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
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. |
Mybatis可以通过
配置多种环境,比如开发环境、测试环境和生产环境等。
不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。
在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。
JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。
MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型
UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。
JNDI:使用JNDI在外部配置数据源。
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!