MyBatis是一個“半自動化”的ORM框架,ORM即Object/Relation Mapping,對象關係映射,是面向對象編程語言跟關係型資料庫的橋梁,將編程語言對Java實體類的操作映射到資料庫中。 下麵以向資料庫中添加一條圖書信息為例,說明MyBatis的入門操作 MyEclipse中新建個 ...
MyBatis是一個“半自動化”的ORM框架,ORM即Object/Relation Mapping,對象關係映射,是面向對象編程語言跟關係型資料庫的橋梁,將編程語言對Java實體類的操作映射到資料庫中。
下麵以向資料庫中添加一條圖書信息為例,說明MyBatis的入門操作
MyEclipse中新建個web項目,並且添加maven支持(這個跟MyBatis沒關係,只是方便添加依賴jar包)
在pom.xml中添加如下依賴:
<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實體類:
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,並配置如下:
<?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.java
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從入門到精通