在上一章中,我們已經搭建了 myeclipse,mybatis,mysql 的開發環境,並且實現了 mybatis 的一個簡單的查詢。要注意的是,這種方式是用 SqlSession
範例來直接執行在User.xml
檔案中對映的 SQL 語句:session.selectOne("com.yiibai.mybatis.models.UserMapper.getUserByID", 1)
,但是還有比這更簡單的方法,使用合理描述引數和SQL語句返回值的介面(比如:IUser.class
),這樣現在就可以不使用類似User.xml
組態檔案,至此更簡單,程式碼更安全,不容易發生的字串文字和轉換的錯誤,下面是專案建立的詳細過程:
在 src
原始碼目錄下建立一個包:com.yiibai.mybatis.dao
,並建立介面類 IUser
及一個方法, 在方法上面,我們使用了一個SQL注釋,內容如下:
package com.yiibai.mybatis.dao;
import org.apache.ibatis.annotations.Select;
import com.yiibai.mybatis.models.User;
/**
* @author tw511.com
*/
public interface IUser {
@Select("select * from user where id= #{id}")
public User getUserByID(int id);
}
請注意,這裡面程式碼有一個方法名 getUserByID
必須與 User.xml
裡面組態的 select
的 id
對應(<select id="getUserByID">
)同名,雖使用註解對映不需要User.xml
。
首先組態 MyBatis 所需的資料連線檔案,這裡建立一個檔案: src/config/Configure.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>
<typeAliases>
<typeAlias alias="User" type="com.yiibai.mybatis.models.User" />
</typeAliases>
<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://127.0.0.1:3306/testdb" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- // power by https://www.tw511.com 注釋掉咯...
<mapper resource="com/yiibai/mybatis/models/User.xml" />-->
</mappers>
</configuration>
在包:com.yiibai.mybatis.models
下建立一個User.java
類檔案,與上一節中 User
類程式碼相同,這裡只是拷貝過來,User.java
具體的程式碼內容如下:
package com.yiibai.mybatis.models;
public class User {
private int id;
private String name;
private String dept;
private String phone;
private String website;
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
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 String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
與 User.java
對應的 XML 組態檔案:User.xml
可以少省略,不用建立,本節講解的就是如何消滅類似於User.xml
的組態檔案。
我們在 src
這個目錄下建立一個類:Main.java
,用來測試整個組態和程式執行結果,有關 Main.java
的程式碼詳細內容如下:
import java.io.Reader;
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 com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;
public class Main {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("config/Configure.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
sqlSessionFactory.getConfiguration().addMapper(IUser.class);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}
public static void main(String[] args) {
SqlSession session = sqlSessionFactory.openSession();
try {
IUser iuser = session.getMapper(IUser.class);
User user = iuser.getUserByID(1);
System.out.println("名字:"+user.getName());
System.out.println("所屬部門:"+user.getDept());
System.out.println("主頁:"+user.getWebsite());
} finally {
session.close();
}
}
}
執行上面範例程式碼,得到以下結果 -
名字:New name, 所屬部門:Tech, 主頁:https://www.tw511.com
最後補充,整個專案 mybatis-interface-02 的結構如下圖所示: