依賴包html
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.42</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
數據庫建立語句java
CREATE DATABASE mybatis; USE mybatis; CREATE TABLE T_USER( ID INT(11) PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) DEFAULT NULL, SEX CHAR(2) DEFAULT NULL; AGE INT(11) DEFAULT NULL )
mybatis-config.xmlmysql
<?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"> <!-- XML 配置文件包含對 MyBatis 系統的核心設置 --> <configuration> <!-- 指定 MyBatis 所用日誌的具體實現 --> <settings> <setting name="logImpl" value="LOG4J"/> </settings> <environments default="mysql"> <!-- 環境配置,即鏈接的數據庫。 --> <environment id="mysql"> <!-- 指定事務管理類型,type="JDBC"指直接簡單使用了JDBC的提交和回滾設置 --> <transactionManager type="JDBC"/> <!-- dataSource指數據源配置,POOLED是JDBC鏈接對象的數據源鏈接池的實現。 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.47.151:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!-- mappers告訴了MyBatis去哪裏找持久化類的映射文件 --> <mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers> </configuration>
UserMapper.xmlsql
<?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指用戶自定義的命名空間。 --> <mapper namespace="mapper.UserMapper"> <!-- id="save"是惟一的標示符 parameterType屬性指明插入時使用的參數類型 useGeneratedKeys="true"表示使用數據庫的自動增加策略 --> <insert id="save" parameterType="com.rookie.bigdata.domain.User" useGeneratedKeys="true"> INSERT INTO T_USER(name,sex,age) VALUES(#{name},#{sex},#{age}) </insert> </mapper>
Mybatis.java數據庫
public static void main(String[] args) throws IOException { // 讀取mybatis-config.xml文件 InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); // 初始化mybatis,建立SqlSessionFactory類的實例 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder() .build(inputStream); // 建立Session實例 SqlSession session = sqlSessionFactory.openSession(); // 建立User對象 User user = new User("張三", "男", 26); // 插入數據 session.insert("mapper.UserMapper.save", user); // 提交事務 session.commit(); // 關閉Session session.close(); }
User.java安全
public class User implements Serializable { // 用戶標識 private Integer id; // 用戶姓名 private String name; // 用戶性別 private String sex; // 用戶年齡 private Integer age; }
至此保存數據成功
mybatis的執行流程:
1)調用SqlSessionFactoryBuilder對象的Build(inputStream)方法
2)SqlSessionFactoryBuilder會根據輸入流inputStream等信息建立XMLConfigBuilder對象
3)SqlSessionFactoryBuilder調用XMLConfigBuilder對象的parse()方法
4)SqlSessionFactoryBuilder對象解析XML配置文件返回Configuration對象
5)SqlSessionFactoryBuilder根據Configuration對象建立一個DefaultSessionFactory對象
6)SqlSessionFactoryBuilder返回DefaultSessionFactory對象給客戶端,供客戶端使用session
SqlSessionFactoryBuilder:SqlSessionFactoryBuilder 有五個 build() 方法,每一種都容許你從不一樣的資源中建立一個 SqlSessionFactory 實例
SqlSessionFactory:SqlSessionFactory是MyBatis的關鍵對象,它是個單個數據庫映射關係通過編譯後的內存鏡像.SqlSessionFactory對象的實例能夠經過SqlSessionFactoryBuilder對象類得到,而SqlSessionFactoryBuilder則能夠從XML配置文件或一個預先定製的Configuration的實例構建出SqlSessionFactory的實例.每個MyBatis的應用程序都以一個SqlSessionFactory對象的實例爲核心.同時SqlSessionFactory也是線程安全的,SqlSessionFactory一旦被建立,應該在應用執行期間都存在.在應用運行期間不要重複建立屢次,建議使用單例模式.SqlSessionFactory是建立SqlSession的工廠
SqlSession:SqlSession是MyBatis的關鍵對象,是執行持久化操做的獨享,相似於JDBC中的Connection.它是應用程序與持久層之間執行交互操做的一個單線程對象,也是MyBatis執行持久化操做的關鍵對象.SqlSession對象徹底包含以數據庫爲背景的全部執行SQL操做的方法,它的底層封裝了JDBC鏈接,能夠用SqlSession實例來直接執行被映射的SQL語句.每一個線程都應該有它本身的SqlSession實例.SqlSession的實例不能被共享,同時SqlSession也是線程不安全的,絕對不能講SqlSeesion實例的引用放在一個類的靜態字段甚至是實例字段中.也毫不能將SqlSession實例的引用放在任何類型的管理範圍中,好比Servlet當中的HttpSession對象中.使用完SqlSeesion以後關閉Session很重要,應該確保使用finally塊來關閉它.mybatis