MyBatis和Hibernate一樣都是基於ORM的關係型資料庫框架 ORM工具的基本思想: 1.從配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 產生 session 3. 在session中完成對數據的增刪改查和事務提交等. 4. ...
MyBatis和Hibernate一樣都是基於ORM的關係型資料庫框架
ORM工具的基本思想:
1.從配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 產生 session 3. 在session中完成對數據的增刪改查和事務提交等. 4. 在用完之後關閉session。
5.在java對象和資料庫之間有做mapping的配置文件,也通常是xml文件。
MyBatis 是支持 普通 SQL 查詢 , 存儲過程 和 高級映射 的優秀持久框架。MyBatis 消除了幾乎所有的 JDBC 代碼和參數的手工設置以及對結果集的檢索封裝。
本文就一個demo的形式,講訴MyBatis的資料庫操作過程,新建一個web項目,項目結構如圖:
我們需要準備mybatis3.2.jar和mysql的jar,日誌輸出的jar根據自己項目的需要
新建資料庫,數據表是users,設置id為主鍵,同時自動增長
新建一個資源文件config
編寫資料庫配置信息文件db.properties:
driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/db_mysql?useUnicode\=true&characterEncoding\=utf-8 username=root password=111
編寫pojo類:
package com.mybatis.entity; public class User { /* * ID */ private int id; /* * 用戶姓名 */ private String name; /* * age */ private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
編寫pojo類對應的mapper文件:
<?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,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 --> <mapper namespace="com.mybatis.mapper.userMapper"> <!-- 在select標簽中編寫查詢的SQL語句, 設置select標簽的id屬性為findById,id屬性值必須是唯一的,不能夠重覆 parameterType可以在MyBatis的配置文件里設置,也可以直接用包名+類名 --> <insert id="save" parameterType="User"> insert into users(id,name,age) value(#{name},#{age}) </insert> <update id="update" parameterType="User"> update users set name=#{name},age=#{age} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from users where id=#{id} </delete> <select id="findById" parameterType="int" resultType="User"> select * from users where id=#{id} </select> <select id="findAll" resultType="User"> select * from users </select> </mapper>
然後,在編寫MyBatis的配置文件:
<?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> <!-- 資料庫配置文件 --> <properties resource="db.properties" /> <!-- 實體類,簡稱 -設置別名 --> <typeAliases> <typeAlias alias="User" type="com.mybatis.entity.User" /> </typeAliases> <!-- 讀取db.properties里的數據,進行資料庫配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}" /> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- 註冊userMapper.xml文件 --> <mappers> <mapper resource="com/mybatis/mapper/userMapper.xml"/> </mappers> </configuration>
測試類:
import java.io.Reader; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.mybatis.entity.User; public class Test { public static void main(String[] args) { String resource = "mybatis-config.xml"; try{ //載入Mybatis的配置文件 Reader reader = Resources.getResourceAsReader(resource); //構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); //創建可以執行sql的SqlSession SqlSession session = sessionFactory.openSession(); //映射sql的標誌字元串 String statement = "com.mybatis.mapper.userMapper.findById"; //執行查詢返回id為1的User對象 User user = session.selectOne(statement,1); System.out.println(user); }catch (Exception e) { e.printStackTrace(); } } }
然後,可以編寫日誌文件,進行日誌輸出
log4j.properties\uFF0C log4j.rootLogger=DEBUG, Console #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
運行測試類,可以輸出,說明我們的mybatis搭建好了,可以進行資料庫操作
需要註意的:
為了統一編碼,建議新建資料庫時設置成utf-8的
還有測試時,那個id一定要和userMapper.xml里的id對應,mybatis是根據這個id調用sql函數的哦
配置mybatis文件時,一定要註意順序,一般都是先配置別、資料庫配置、然後mapper文件註冊的