MyBatis系列之--Java 項目(非SpringBoot)集成MyBatis
工作中常常寫一些服務,基本上會與MySQL關聯上,如何快速的從MySQL中獲取數據?大家可能都會選用SpringBoot來集成MyBatis,這樣做的原因一個是簡單,另外一個是封裝的好,基本上開箱即用。
遺憾的是,這裏想介紹的跟SpringBoot 沒有關係,這裏用一個與SpringBoot無關的Java Maven 項目,來與MyBatis結合做數據查詢。
對MyBatis簡單介紹
MyBatis是一個輕量級的持久層框架,能很好的解析自定義SQL,高效的完成數據的添加、刪除、查詢等操作。
MyBatis幾乎免除了所有的JDBC代碼,以及設置參數和獲取結果的工作。可以通過XML或註解的方式來配置和映射原始類型、接口和POJO爲數據庫中的記錄。
核心接口SqlSessionFactory
MyBatis主要和數據庫進行交互,少不了創建數據庫連接,其中SqlSessionFactory是主要的核心。
上面這張圖是對官網簡介的一個總結,通過這個簡單的描述可以回答下面兩個問題:
-
如何創建SqlSessionFactory?
SqlSessionFactory(簡稱SSF) 通過 SqlSessionFactoryBuilder (簡稱SSFB)創建。
SSFB創建SSF的過程中,需要一些數據庫JDBC的信息,這些信息可以通過XML文件或Java的Configuration對象來獲取。
-
如何使用SqlSessionFactory?
SSF 創建好之後,基本上就保證它應用級別的作用域,不對其進行重複的創建和銷燬操作。
最簡單的是通過單例模式或靜態單例模式來達到應用級別的作用域。
實戰
1. Maven創建Java項目
本地需要安裝Maven,然後才能執行下面的代碼。
mvn archetype:generate -DgroupId=com.botao -DartifactId=pure-mybatis -DarchetypeArtifactId=maven-archetype-quickstart
2. 添加依賴
pom.xml 文件中添加下面的依賴
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
</dependencies>
3. 配置JDBC屬性
resources目錄下創建 application.properties
文件,並輸入下面的配置信息。
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/university?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
4. 配置MyBatis需要的配置文件
resources目錄下創建mybatis-config.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>
<properties resource="application.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/PersonMapper.xml"/>
</mappers>
</configuration>
注意:
1. 開頭部分聲明是xml文件
2. <properties resource="application.properties"/>
聲明本文中的屬性從 application.properties
中獲取
3. <mapper resource="mapper/PersonMapper.xml"/>
聲明與數據庫表的映射接口文件位置
5. 準備數據
CREATE DATABASE `university` ;
CREATE TABLE `person` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 ;
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (1, 'poter1', 10);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (2, 'poter2', 20);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (3, 'poter3', 30);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (4, 'poter4', 40);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (5, 'poter5', 50);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (6, 'poter6', 60);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (7, 'poter7', 70);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (8, 'poter8', 80);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (9, 'poter9', 90);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (10, 'poter10', 100);
INSERT INTO `university`.`person`(`id`, `name`, `age`) VALUES (11, 'poter11', 110);
6. 創建數據庫表對應的POJO
package com.botao.pojo;
public class Person {
private int id;
private String name;
private int age;
public Person() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "PersonMapper{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
6. 創建Mapper接口
package com.botao.mapper;
import com.botao.pojo.Person;
public interface PersonMapper {
Person selectPersonById(Integer id);
}
7. 創建XML的Mapper文件
在resources/mapper目錄下創建PersonMapper.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">
<mapper namespace="com.botao.mapper.PersonMapper">
<select id="selectPersonById" resultType="com.botao.pojo.Person">
select * from Person where id = #{id}
</select>
</mapper>
好了,到目前位置,我們的工程就完成了,可以創建一個main方法,或用Junit來測試下。
這裏寫一個Main方法做下測試:
package com.botao;
import com.botao.mapper.PersonMapper;
import com.botao.pojo.Person;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class App {
public static void main(String[] args) throws IOException {
System.out.println("use mybatis connect to database ... ");
// 根據 mybatis-config.xml 配置的信息得到 sqlSessionFactory
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 然後根據 sqlSessionFactory 得到 session
SqlSession session = sqlSessionFactory.openSession();
PersonMapper mapper = session.getMapper(PersonMapper.class);
Person person = mapper.selectPersonById(1);
System.out.println(person);
}
}
測試結果:
C:\app\java\jdk1.8.0_131\bin\java.exe ...
use mybatis connect to database ...
PersonMapper{id=1, name='poter1', age=10}
Process finished with exit code 0
OK!這就是所有內容了,如果對上面的說明有任何疑問,歡迎留言與我交流。