使用mybatis 操作資料庫的例項程式
一、理解什麼是mybatis
MyBatis 是支援普通 SQL 查詢,儲存過程和高階對映的優秀持久層框架。 MyBatis 消除了幾乎所有的 JDBC 程式碼和引數的手工設定以及對結果集的檢索。 MyBatis 可以使用簡單的XML 或註解用於配置和原始對映,將介面和 Java 的 POJO( Plain Old Java Objects,普通的Java 物件)對映成資料庫中的記錄.
1)MyBATIS 目前提供了三種語言實現的版本,包括:Java、.NET以及Ruby。(我主要學習java,就講java的使用)
2)它提供的持久層框架包括SQL Maps和Data Access Objects(DAO)。
3)mybatis與hibernate的對比?
mybatis提供一種“半自動化”的ORM實現。
這裡的“半自動化”,是相對Hibernate等提供了全面的資料庫封裝機制的“全自動化”ORM實現而言,“全自動”ORM實現了POJO和資料庫表之間的對映,以及 SQL 的自動生成和執行。
而mybatis的著力點,則在於POJO與SQL之間的對映關係(還不是很理解這裡)。
二、簡單例子(快速入門)
1)建立java web專案
這裡我建立的是java web專案。其實建立簡單的java 專案也是可以的,不一定非要用web專案。專案建立起來後,
2)匯入jar包
這裡需要匯入兩個jar包:匯入mybatis-3.3.0.jar 和 ojdbc.jar。注意:匯入之後需要build path ,將匯入的包變為奶瓶狀,如上圖所示。
3)建立資料庫
因為平時使用的資料庫多為Oracle,這裡也採用了Oracle資料庫。建立了一個表:tb_person(裡面還有id,name ,password),採用mybatis管理資料庫實現對 tb_person 表的操作。
4)使用到的類和檔案
程式中使用到的類:User.java ,Test.java 。使用到的XML檔案為 User.xml , configuration.xml 。
5)程式原始碼
User.java
package mybatis;
public class User {
private int id;
private String name;
private String password;
public User(){}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + this.id + ", name=" + this.name + ", password=" + this.password + "]";
}
}
Test.java
package mybatis;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
String resource = "configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = ssf.openSession();
try{
User user = session.selectOne("User.selectUser", 2);
System.out.println(user.getName());
System.out.println(user);
System.out.println("--------------分隔線---------------");
//怎麼樣保證取出來的只是想要查詢的部分呢
List<User> users = session.selectList("User.selectUsers");
for(int i=0; i<users.size(); i++) {
System.out.println(users.get(i));
}
System.out.println("--------------分隔線---------------");
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
}
}
configuration.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="mybatis.User"></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="*****" />
<property name="password" value="*****" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/User.xml"/>
</mappers>
</configuration>
User.xml
這裡寫的是sql語句
<?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="User">
<select id="selectUser" parameterType="int" resultType="User">
SELECT * FROM tb_person WHERE id = #{id}
</select>
<select id="selectUsers" resultType="User">
SELECT * FROM tb_person
</select>
</mapper>
三、注意事項
1. mybatis 查詢返回為NULL
注意一個問題:實體類的欄位名稱應該和資料庫裡面的欄位名稱保持一致,否則查詢出的結果返回全部為null。
2. session.selectOne() 返回的是單條查詢語句
3. session.selectList(“User.selectUsers”) 返回的是一個List ,可以實現返回一個集合
4.configuration.xml 檔案應該放在src的根目錄下,否則會出現錯誤
初次學習mybatis ,難免會有錯誤的地方,希望能夠和各位路過的大神們多多交流!!!