Nội dung chính
Cấu hình MyBatis sử dụng file XML
Trong bài trước, chúng ta đã biết cách cài đặt MyBatis. Bài này, chúng ta sẽ học về cách cấu hình MyBatis bằng cách sử dụng file XML.
Để thao tác với cơ sở dữ liệu, chúng ta cần phải cấu hình chi tiết về cơ sở dữ liệu và các thông số liên quan trong file XML, dưới đây là cấu trúc điển hình của một file cấu hình MyBatis.
<configuration> <typeAliases> <typeAlias alias = "class_alias_Name" type = "absolute_clas_Name"/> </typeAliases> <environments default = "default_environment _name"> <environment id = "environment_id"> <transactionManager type = "JDBC/MANAGED"/> <dataSource type = "UNPOOLED/POOLED/JNDI"> <property name = "driver" value = "database_driver_class_name"/> <property name = "url" value = "database_url"/> <property name = "username" value = "database_user_name"/> <property name = "password" value = "database_password"/> </dataSource> </environment> </environments> <mappers> <mapper resource = "path of the configuration XML file"/> </mappers> </configuration>
Các thành phần (thẻ) trong file cấu hình XML
Danh sách các thẻ trong file cấu hình XML.
- Thẻ environments
- Thẻ transactionManager
- Thẻ dataSource
- Thẻ typeAliases
- Thẻ mappers
- Thẻ properties
- Thẻ settings
- Thẻ typeHandlers
- Thẻ objectFactory
- Thẻ plugins
- Thẻ databaseIdProvider
Dưới đây là các thành phần (thẻ) quan trong trong file cấu hình XML.
Thẻ environments
Sử dụng thẻ environments để cấu hình thông tin kết nối database mà chúng ta sử dụng trong ứng dụng. Trong MyBatis bạn có thể kết nối đến nhiều database bằng cách sử dụng nhiều thẻ environment bên trong thẻ environments. Để cấu hình môi trường kết nối database, chúng ta cần phải sử dụng 2 thẻ con có tên là transactionManager và dataSource.
Thẻ transactionManager
MyBatis hỗ trợ 2 trình quản lý transaction đó là JDBC và MANAGED
- Nếu chúng ta sử dụng trình quản lý transaction kiểu JDBC, ứng dụng sẽ đáp ứng được các hoạt động quản lý transaction như commit, roll-back, ...
- Nếu chúng ta sử dụng trình quản lý transaction kiểu MANAGED, máy chủ ứng dụng sẽ đáp ứng việc quản lý vòng đời của các connection. Nó thường được sử dụng với các ứng dụng Web.
Thẻ dataSource
Nó được sử dụng để cấu hình các thuộc tính kết nối database, như driver-name, url, user-name, và password. Thẻ dataSource có 3 kiểu sau:
- UNPOOLED - Đối với dataSource có kiểu là UNPOOLED, MyBatis chỉ đơn giản là mở và đóng một kết nối cho mỗi thao tác với database. Nó chậm hơn một chút và thường được sử dụng cho các ứng dụng đơn giản.
- POOLED - Đối với dataSource có kiểu là POOLED, MyBatis sẽ duy trì một pool các connection. Đối với mọi thao tác cơ sở dữ liệu, MyBatis sử dụng một trong những connection này và trả lại connection cho pool sau khi hoàn thành thao tác. Nó làm giảm kết nối cần phải khởi tạo và thời gian xác thực cần thiết để tạo ra một kết nối mới.
- JNDI - Đối với dataSource có kiểu là JNDI, MyBatis sẽ nhận được kết nối từ nguồn dữ liệu JNDI.
Ví dụ:
<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/details"/> <property name = "username" value = "root"/> <property name = "password" value = "password"/> </dataSource> </environment> </environments>
Thẻ typeAliases
Thay vì chỉ định tên lớp tuyệt đối ở mọi nơi, chúng ta có thể sử dụng typeAliases, một tên ngắn hơn cho một kiểu Java. Giả sử chúng ta có một lớp Student.java bên trong package có tên vn.viettuts.mybatis_examples, tên lớp tuyệt đối vn.viettuts.mybatis_examples.Student. Thay vì sử dụng tên này để chỉ định lớp Student chô mỗi lần sử dụng, bạn có thể khai báo alias tới lớp đó như ví dụ dưới đây.
<typeAliases> <typeAlias alias = "Student" type = "vn.viettuts.mybatis_examples.Student"/> </typeAliases>
Thẻ mappers
File Mapper XML là một file quan trọng, nó chứa các câu lệnh SQL. Thẻ con mapper được sử dụng để cấu hình vị trí của các file mapper xml trong file cấu hình của MyBatis (thẻ này chứa 4 thuộc tính (attribute) là resources, url, class, và name).
- Thuộc tính resource trỏ đến classpath của file XML.
- Thuộc tính url trỏ đến path đầy đủ của file XML.
- Chúng ta có thể sử dụng mapper interface thay cho file xml, khi đó thuộc tính class trỏ tới class-path của mapper interface.
- Thuộc tính name trỏ tới tên package của mapper interface.
Ví dụ, tên của file mapper xml là Student.xml và nó nằm trong package có tên là mybatis, thì bạn phải cấu hình thẻ mapper như sau:
<mappers> <mapper resource = "mybatis/Student.xml"/> </mappers>
MyBatis với MySQL database
MySQL là một trong những hệ quản trị cơ sở dữ liệu mã nguồn mở được sử dụng phổ biến nhất hiện nay. Chúng ta tạo file cấu hình có tên SqlMapConfig.xml để kết nối đến MySQL. Dưới đây là các property của dataSource
Sr.No. | Property Name | value |
---|---|---|
1 | driver | com.mysql.jdbc.Driver |
2 | url | jdbc:mysql://localhost:3306/details |
3 | username | root |
4 | password | password |
Chúng ta sử dụng trình quản lý transaction có kiểu là JDBC, nghĩa là chúng ta phải thực hiện các thao tác như commit và roll-back một cách thủ công.
Chúng ta sử dụng dataSource có kiểu là UNPOOLED có nghĩa là đối với mỗi thao tác với database sẽ có một kết nối mới được tạo ra, vì thế chúng ta nên đóng kết nối sau khi hoàn thành.
File SqlMapConfig.xml
Dưới đây là file cấu hình XML được sử dụng cho các bài hướng dẫn học 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/details"/> <property name = "username" value = "root"/> <property name = "password" value = "password"/> </dataSource> </environment> </environments> <mappers> <mapper resource = "mybatis/Student.xml"/> </mappers> </configuration>