?
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;}@Overridepublic 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的SqlSessionSqlSession 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文件注冊的
?
?