MyBatis入門示例——MyBatis學習筆記之一

      MyBatis是另一款優秀的ORM框架,前身爲iBATIS。凡事預則立,不預則廢。鑑於之後的項目可能會用到它,所以決定提早學習。本着分享和督促本身學習的目的,筆者將陸續把學習筆記貼出,但願對朋友們有所幫助。如前述博文所述,筆者將使用ant來管理工程。對ant不熟悉的朋友,請參考筆者的兩篇預備篇博文:《ant的下載與安裝——mybatis學習筆記之預備篇(一)》《ant入門示例——mybatis學習筆記之預備篇(二)》html

      本學習筆記以模擬學生選課管理爲背景,以MySQL5.5做爲數據庫。建立數據庫、用戶、表以及用戶受權的SQL腳本(courseman.sql)以下(在本文下方可下載附件,含本示例所有代碼。): java

/*數據庫編碼UTF8,如下命令是爲了在腳本和
命令行中支持中文*/
set names gbk;
/*建立courseman數據庫*/
drop database if exists courseman;
create database courseman;
/*切換到courseman數據庫*/
use courseman;
/*建立學生表*/
CREATE TABLE student(
id int NOT NULL AUTO_INCREMENT primarykey,
name varchar(10) NOT NULL,/*姓名*/
gender char(1) NOT NULL,/*性別*/
major varchar(20) NOT NULL,/*專業*/
grade char(4) NOT NULL/*年級*/
);
/*授予courseman用戶訪問courseman數據庫的所有權限。
爲方便起見,用戶名與數據庫同名。該用戶若不存在則被
建立,密碼爲abc123*/
grant all privileges on courseman.* to courseman@'%'
identified by 'abc123';
flush privileges;
/*添加第一條記錄*/
insert into student(name, gender, major, grade)
values('李林','男','計算機科學與技術','2011');

      在命令行下以root用戶登陸(mysql –uroot -p),用source命令運行此腳本(假如此腳本在D盤下,即d:\courseman.sql,則運行命令:source d:/courseman.sql。注意,這裏是「/」,而不是「\」)。 mysql

      本示例的任務是根據學生的ID讀取學生信息。 sql

      筆者在本身機器上的E:\DemoPrograms目錄下新建目錄MyBatis01,用來存放本示例的工程。按照ant工程常見的組織形式,生成文件build.xml存放在此目錄下,另外創建兩個目錄:src(存放源代碼和配置文件)lib(存放jar包),而classes目錄讓ant幫咱們建立。將本次要用到的jar包複製到lib目錄下(分別爲mybatis的mybatis-3.0.6.jar和MySQL的JDBC驅動包mysql-connector-java-5.1.20-bin.jar)。 數據庫

      在src目錄下新建resources目錄,用來保存相關的配置文件。以後,咱們將要求ant把此目錄複製到classes目錄下。因爲classes目錄會被ant添加到類路徑中,所以MyBatis能夠訪問到這些配置文件。其中核心配置文件configuration.xml(固然也能夠取其餘名字)的內容以下:  apache

<?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>
<!--代表重用預編譯的SQL語句-->
<settings>
<setting name="defaultExecutorType" value="REUSE"/>
</settings>
<!--類型別名定義。從此可只用Student來代替它冗長的
全限定名-->
<typeAliases>
<typeAlias alias="Student" type="com.abc.domain.Student"/>
</typeAliases>
<!--environments可包含多個environment元素。
每一個environment配置與數據庫交互的細節,這裏
只須要配置一個。default屬性是指在建立SqlSessionFactory
時,若沒有明確指定要用哪一個environment,則使用此
屬性指定的-->
<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/courseman"/>
<property name="username" value="courseman"/>
<property name="password" value="abc123"/>
</dataSource>
</environment>
</environments>
<!--指定要用到的mapper文件。如下的resource屬性告訴
MyBatis要在類路徑下的resources目錄下找StudentMapper.xml文件。咱們將把mapper文件存放在src目錄下的resources目錄中,並讓ant把resources目錄拷貝到classes中,而classes目錄會被ant添加到類路徑中。-->
<mappers>
<mapper resource="resources/StudentMapper.xml"/>
</mappers>
</configuration>

 (注:我在configuartion.xml和下面的StudentMapper.xml中添加中文註釋後報「Invalid byte 1 of 1-byte UTF-8 sequence.」錯誤,不知爲什麼。有知道的朋友望告知。所以須要本示例代碼的朋友不要複製這兩個文件的代碼,在本文下方下載附件便可。附件可直接運行。) session

      此配置文件很簡單,這也體現了筆者一貫的原則:從最簡單的開始。其實有部分知識不太理解也屬正常,慢慢用多了天然就理解了,熟悉了,這符合通常的學習規律。相信包括筆者在內的學習者,都是這種狀況。 mybatis

     接着編寫學生類,這是一個普通的java bean。代碼以下: app

package com.abc.domain;
public class Student {
private int id;
private String name;   //姓名
private String gender; //性別
private String major;  //專業
private String grade;  //年級
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}

       按照包的層次結構,在src目錄下創建子目錄層次com\abc\domain,而後把Student.java存放於此。 框架

      MyBatis須要咱們提供一個接口,在接口中聲明訪問數據庫的方法。所以,編寫接口StudentMapper.java以下: 

package com.abc.mapper;
import com.abc.domain.Student;
public interface StudentMapper {
//根據學生ID查詢學生實體
public Student getById(int id);
}

       相似地,將此文件放置在src目錄下的com\abc\mapper目錄下。

      如今編寫上面提到的mapper文件StudentMapper.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">
<!--namespace該是StudentMapper的完整限定名-->
<mapper namespace="com.abc.mapper.StudentMapper">
<!--定義java bean的屬性與數據庫表的列之間的映射。type="Student"用到了configuration.xml中定義的別名-->
<resultMap id="studentResultMap" type="Student">
<!--id映射-->
<id property="id" column="id"/>
<!--普通屬性映射-->
<result property="name" column="name"/>
<result property="gender" column="gender"/>
<result property="major" column="major"/>
<result property="grade" column="grade"/>
</resultMap>
<!--與StudentMapper接口中的getById方法對應,包括
方法名和參數類型。SQL語句中以「#{}」的形式引用參數-->
<select id="getById" parameterType="int" resultMap="studentResultMap">
SELECT *
FROM student  WHERE id = #{id}
</select>
</mapper>

       MyBatis將根據此文件幫咱們實現StudentMapper接口。下面編寫TestMyBatis.java,實現咱們的功能。代碼以下:

package com.test;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.abc.mapper.StudentMapper;
import com.abc.domain.Student;
public class TestMyBatis
{
public static void main(String[] args)
{
//與configuration.xml中的mapper配置相似,告訴MyBatis
//應讀取的核心配置文件
String resource = "resources/configuration.xml";
Reader reader = null;
try{
reader = Resources.getResourceAsReader(resource);
}catch(IOException e)
{
e.printStackTrace();
}
//建立SqlSessionFactory實例。沒有指定要用到的
//environment,則使用默認的environment
SqlSessionFactory sqlSessionFactory
= new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
StudentMapper mapper =
sqlSession.getMapper(StudentMapper.class);
Student student = mapper.getById(1);
if(student != null)
{
System.out.println("姓名: "+student.getName()
+"\n專業: "+student.getMajor());
}
else
{
System.out.println("沒有找到。");
}
}
finally
{
sqlSession.close();
}
}
}

        在命令窗口進入E:\DemoPrograms\MyBatis01目錄,運行命令:ant run。則運行結果以下:

195443361.png

         猛戳這裏全面系統地學習MyBatis 3

         MyBatis技術交流羣:188972810,或掃描二維碼:

wKioL1SaztmBchKiAADsv4YAWBY259.jpg


【MyBatis學習筆記】系列之預備篇一:ant的下載與安裝

【MyBatis學習筆記】系列之預備篇二:ant入門示例

【MyBatis學習筆記】系列之一:MyBatis入門示例

【MyBatis學習筆記】系列之二:MyBatis增刪改示例

【MyBatis學習筆記】系列之三:MyBatis的association示例

【MyBatis學習筆記】系列之四:MyBatis association的兩種形式

【MyBatis學習筆記】系列之五:MyBatis與Spring集成示例

【MyBatis學習筆記】系列之六:MyBatis與Spring集成示例續

【MyBatis學習筆記】系列之七:MyBatis一對多雙向關聯

【MyBatis學習筆記】系列之八:MyBatis MapperScannerConfigurer配置

【MyBatis學習筆記】系列之九:MyBatis collection的兩種形式

【MyBatis學習筆記】系列之十:MyBatis日誌之Log4j示例

【MyBatis學習筆記】系列之十一:MyBatis多參數傳遞之註解方式示例

【MyBatis學習筆記】系列之十二:MyBatis多參數傳遞之默認命名方式示例

【MyBatis學習筆記】系列之十三:MyBatis多參數傳遞之Map方式示例

【MyBatis學習筆記】系列之十四:MyBatis中的N+1問題

【MyBatis學習筆記】系列之十五:MyBatis多參數傳遞之混合方式

【MyBatis學習筆記】系列之十六:Spring聲明式事務管理示例

【MyBatis學習筆記】系列之十七:MyBatis多對多保存示例

【MyBatis學習筆記】系列之十八:MyBatis多對多關聯查詢示例

【MyBatis學習筆記】系列之十九:如何在MyBatis-3.2.7中使用Log4j2 rc2

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(一)

MyBatis中如何經過繼承SqlSessionDaoSupport來編寫DAO(二)

相關文章
相關標籤/搜索