一、Mybatis簡介
Mybatis本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation 遷移到了google code,並且改名爲MyBatis 。
MyBatis是一個支持普通SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis消除了幾乎所有的JDBC代碼和參數的手工設置以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成數據庫中的記錄。
二、簡單配置使用示例
1.Mybatis可應用於普通JAVA項目或JAVAWeb項目中,此處我建立的是一個JAVAWeb項目,目錄結構如下:
2.導入相應的jar包
一個是mybatis的包,如:mybatis-3.4.6.jar;一個是數據庫的包,如:mysql-connector-java-5.1.37.jar
3.配置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>
<!-- environments:信息配置的是連接數據庫的(數據源的)一些參數,如用戶名,密碼等,MyBatis數據庫操作的session就是根據這些信息初始化的-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 數據源配置 -->
<dataSource type="POOLED">
<!-- 數據庫驅動 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- 數據庫連接URL -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy?useUnicode=true&characterEncoding=utf8"/>
<!-- 數據庫用戶名和密碼 -->
<property name="username" value="root" />
<property name="password" value="" />
</dataSource>
</environment>
</environments>
<!-- mappers:配置的是一個個Mapper文件,這些文件來約束數據庫的信息(Relationship) 和 對象(Object)的信息映射(Mapper);它負責完成對象和數據庫表的映射,是ORM最具體的配置-->
<mappers>
<!-- 配置實體映射文件 -->
<mapper resource="com/mybatisstudy/mapper/userMap.xml" />
</mappers>
</configuration>
4.建表,如:
5.編寫用於測試的實體類,如:
package com.mybatisstudy.model;
public class User {
private int id;
private String name;
private String sex;
private int age;
public User() {
super();
}
public User(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public User(int id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = 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 String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "[id:" + id + ",name:" + name + ",sex:" + sex + ",age:" + age + "]";
}
}
6.編寫該實體類的映射文件,注意需要在Mybatis的配置文件中引用該文件,如:
<?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="com.mybatisstudy.mapper.userMap">
<select id="selectAllUser"
resultType="com.mybatisstudy.model.User">
SELECT * FROM user ;
</select>
<select id="selectUserById" parameterType="int"
resultType="com.mybatisstudy.model.User">
SELECT * FROM user where id = #{id} ;
</select>
<insert id="addUser" parameterType="com.mybatisstudy.model.User">
INSERT INTO user(id,name,sex,age) VALUES(#{id},#{name},#{sex},#{age});
</insert>
<delete id="deleteUserById" parameterType="com.mybatisstudy.model.User">
DELETE FROM user WHERE id=#{id};
</delete>
<update id="updateUserById" parameterType="com.mybatisstudy.model.User">
UPDATE user SET age=#{age} ,name=#{name} WHERE id=#{id}
</update>
</mapper>
7.測試,如:
其中加載Mybatis的配置文件的方式主要有三種,第一種是通過類加載器來加載;第二種是採用文件讀取的方式來加載;第三種是使用Mybatis提供的Resources類來進行加載。
注意:對於涉及到增刪改數據時,需要手動進行提交(session.commit())。
package com.mybatisstudy.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
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.mybatisstudy.model.User;
public class Test {
public static void main(String[] args) {
// mybatis的配置文件
String resource = "mybatisconf.xml";
InputStream inputStream = null;
// 方式一:使用類加載器加載mybatis的配置文件
// inputStream = Test.class.getClassLoader().getResourceAsStream(resource);
// 方式二:採用文件讀取的方式,讀取配置文件
/*File file = new File("src/mybatisconf.xml");
Reader reader = null;
try {
reader = new FileReader(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);*/
// 方式三:使用MyBatis提供的Resouces類加載mybatis的配置文件
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 構建SqlSessionFacoty工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 創建session對象,並使用它來進行數據庫的各項 操作
SqlSession session = sqlSessionFactory.openSession();
// 根據Id查詢用戶
String statement = "com.mybatisstudy.mapper.userMap.selectUserById";
User user = session.selectOne(statement, 1001);
System.out.println(user);
// 查詢所有的用戶
String statement2 = "com.mybatisstudy.mapper.userMap.selectAllUser";
List<User> users = session.selectList(statement2);
System.out.println(users);
// 添加用戶信息
User user2 = new User(1003, "小杰", "男", 20);
String statement3 = "com.mybatisstudy.mapper.userMap.addUser";
int line = session.insert(statement3, user2);
// 對於增刪改,需要手動提交事務,才能將數據持久化,才能避免出現髒數據
session.commit();
// 修改用戶信息
User user3 = new User(1003, "小明", "男", 21);
String statement4 = "com.mybatisstudy.mapper.userMap.updateUserById";
int line2 = session.update(statement4, user3);
session.commit();
// 刪除用戶信息
String statement5 = "com.mybatisstudy.mapper.userMap.deleteUserById";
int line3 = session.delete(statement5, 1003);
session.commit();
session.close();
}
}
8.結果: