MyBatis是一個「半自動化」的ORM框架,ORM即Object/Relation Mapping,對象關係映射,是面向對象編程語言跟關係型數據庫的橋樑,將編程語言對Java實體類的操做映射到數據庫中。java
下面以向數據庫中添加一條圖書信息爲例,說明MyBatis的入門操做mysql
MyEclipse中新建個web項目,而且添加maven支持(這個跟MyBatis不要緊,只是方便添加依賴jar包)web
在pom.xml中添加以下依賴:sql
<dependencies> <dependency> <groupId>mysql</groupId> <!-- mysql數據庫驅動 --> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <!-- MyBatis框架 --> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>log4j</groupId> <!-- 這是日誌框架 --> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies>
建數據庫books,建表book:數據庫
DROP DATABASE IF EXISTS `books`; CREATE DATABASE `books` ; USE `books`; DROP TABLE IF EXISTS `book`; CREATE TABLE `book` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(128), `press` VARCHAR(12), `author` VARCHAR(24), `isbn` VARCHAR(13), `douban` FLOAT ); INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Effective Java 中文版','機械工業出版社','(美)布洛克(Bloch J.)著;楊春花,俞黎敏譯','9787111255833','9.1'); INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Java併發編程實踐','電子工業出版社','((美)Brian Goetz等著;韓鍇,方妙譯','9787121043161','8.8'); INSERT INTO `book` (`name`,`press`,`author`,`isbn`,`douban`) VALUES('Java網絡編程 第4版','中國電力出版社','(美)哈諾德著','9787512361881','7.4');
寫book實體類:apache
package net.sonng.mbt.entity; public class Book { private int id; private String name; private String press; private String author; private String isbn; private float douban; //。。。。。 }
在src/main/resources下建個包net.sonng.mbt.mapper,新建文件BookMapper.xml,並配置以下:
這個配置文件就是sql語句的集合,測試類的session.insert()方法就是調用這裏面的sql插入數據的編程
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTDMapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="net.sonng.mbt.mapper.BookMapper"> <!-- namespace是命名空間,應看成爲字符串看待,至關於這個xml文檔的名稱,命名通常是包名+sql映射文件名 --> <insert id="save" parameterType="net.sonng.mbt.entity.Book" useGeneratedKeys="true" > INSERT INTO book(`name`,`press`,`author`,`isbn`,`douban`) VALUES(#{name},#{press},#{author},#{isbn},#{douban}) </insert> <!-- insert元素代表這是個插入語句,另外還有select、update、delete等等 --> <!-- id屬性加上命名空間,就是這條sql的惟一標識符,測試類session.insert()語句經過這個惟一標識符調用這條sql --> <!-- parameterType屬性,是sql語句的參數類型 --> <!-- useGeneratedKeys屬性表示使用數據庫的自動增加策略,固然數據庫通常都是支持的,這裏沒這個屬性也沒問題 --> <!-- #{User類的屬性名}:這個表示傳進來一個User對象,獲取其對應的屬性值做爲sql語句參數值 --> </mapper>
在src/resources/main下面新建mybatis-config.xml,並配置以下:api
<?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> <settings> <setting name="logImpl" value="LOG4J" /> </settings> <environments default="mysql"> <!-- 下面能夠配置多個environment,即多個多個數據庫,但只能選擇一個數據庫,就是這裏的default屬性指定的environment的id --> <environment id="mysql"> <transactionManager type="JDBC" /> <!-- MyBatis自帶的事務管理 --> <dataSource type="POOLED" > <!-- 使用MyBatis自帶的鏈接池管理 --> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/books?useSSL=false&useUnicode=true&charsetEncoding=utf8" /> <property name="username" value="kumi" /> <property name="password" value="1234" /> </dataSource> </environment> </environments> <mappers> <!-- 下面指定sql映射文件,能夠指定多個 --> <mapper resource="net/sonng/mbt/mapper/BookMapper.xml" /> <!-- 指定BookMapper.xml --> </mappers> </configuration>
在src/resources/main下面新建log4j.properties,配置以下:網絡
log4j.rootLogger=ERROR, stdout log4j.logger.net.sonng.mbt.mapper.BookMapper=DEBUG log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
最後寫測試類:在src/test/java下的net.sonng.mbt.test包下面寫測試類BookTest.javasession
package net.sonng.mbt.test; import java.io.IOException; import java.io.InputStream; import net.sonng.mbt.entity.Book; 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 BookTest { public static void main(String[] args) throws IOException{ InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); SqlSession session=sqlSessionFactory.openSession(); //用mybatis-config.xml和SqlSessionFactoryBuilder獲取SqlSessionFactory,再得到session Book book=new Book(); book.setName("深刻理解Java 7 核心技術與最佳實踐"); book.setPress("機械工業出版社"); book.setAuthor("成富著"); book.setDouban(6.9f); book.setIsbn("9787111380399"); session.insert("net.sonng.mbt.mapper.BookMapper.save",book); //調用BookMapper.xml中的sql語句插入book對象 session.commit(); //提交事務 session.close(); //關閉session } }
測試類按Java application運行後,檢查數據庫,該條信息已經插入,控制檯輸出以下:
DEBUG [main] - ==> Preparing: INSERT INTO book(
name
,press
,author
,isbn
,douban
) VALUES(?,?,?,?,?)
DEBUG [main] - ==> Parameters: 深刻理解Java 7 核心技術與最佳實踐(String), 機械工業出版社(String), 成富著(String), 9787111380399(String), 6.9(Float)
DEBUG [main] - <== Updates: 1
jar包:mybatis、mysql的驅動包
配置sql映射文件,就是包含多條sql語句
配置mybatis的配置文件:mybatis-config.xml,配置數據庫的鏈接信息
SqlSession:經過該類的對象,跟數據庫交流
SqlSessionFactory:這是數據庫編譯後的內存鏡像,一般一個應用對應一個SqlSessionFactory對象
SqlSessionFactoryBuilder:該對象加載mybatis-config.xml產生SqlSessionFactory對象
別人寫的:Mybatis從入門到精通