1.概念
Mybatis是一款優秀的數據持久層框架,是ORM(Object Relational Mapping)的具體實現。那ORM是什麼呢?簡單來說就是將面向對象程序中的對象持久化到關係型數據庫中。Mybatis通過XML或註解,將程序中的接口或POJO對象映射到數據庫中。
2.入門
1)新建java項目,添加mybatis-x.x.x.jar文件引用,如果使用mysql數據庫,則需要添加mysql-connector-xxx.jar文件;
2)新建xml配置文件conf.xml,作爲mybatis的核心配置文件,其中包括數據庫連接實例的數據源、事務控制方式(TransactionManagement)、註冊的映射文件等信息
<?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配置節中包括數據源,事務控制方式 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置數據庫連接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
</configuration>
3)mysql數據庫中創建表及數據
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES (1,'蒙牛',4),(2,'伊利',5);
4)創建數據類User
package com.lpq.domain;
public class User {
private int id;
private String name;
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 + "]";
}
}
5)創建映射文件包及映射文件UserMapper.xml
<?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.lpq.mapping.UserMapper">
<select id="selectUser" resultType="com.lpq.domain.User">
select * from users where id=#{id}
</select>
</mapper>
6)在mybatis配置文件conf.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>
<!-- environments配置節中包括數據源,事務控制方式 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<!-- 配置數據庫連接信息 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--mappers配置節中包含 註冊映射文件 -->
<mappers>
<!-- 映射文件的路徑 -->
<mapper resource="com/lpq/mapping/UserMapper.xml"></mapper>
</mappers>
</configuration>
7)利用映射文件訪問數據庫
Mybatis應用過程中有三個重要的類,SqlSessionFactory,SqlSessionFatoryBuilder,SqlSession
SqlSessionFactory:每個Mybatis應用都是以SqlSessionFactory爲核心的,在應用運行期間一直存在,不需消除或重建,最好採用單例模式。
SqlSessionfactoryBuilder:利用mybatis配置文件來創建SqlSessionFactory,創建完成之後即可銷燬;
SqlSession:通過SqlSessionFactory產生,每個線程都會創建單獨的SqlSeesion,它不是線程安全的,不能再線程間共享,數據操作完畢後,需要在finally中及時關閉SqlSession;
在進行增刪改操作時必須使用sqlSession.commit()來手動提交事務
package com.lpq.test;
import java.io.IOException;
import java.io.InputStream;
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.lpq.domain.User;
import com.lpq.mapping.UserMapper;
public class TestClass {
public static void main(String[] args) throws IOException {
//mybatis配置文件的完整路徑,當前conf,xml在根目錄下
String resource="conf.xml";
//使用mybatis的Resources工具類讀取配置文件
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//方式一:使用SqlSession訪問數據有兩種方式
SqlSession session=sqlSessionFactory.openSession();
try{
User user=(User)session.selectOne("com.lpq.mapping.UserMapper.selectUser", 2);
System.out.println(user);
}finally{
session.close();
}
//方式二:使用映射器接口UserMapper,接口中的方法跟映射文件中內容保持一致,這種方式不需要類型轉換
// SqlSession session=sqlSessionFactory.openSession();
// try{
// UserMapper mapper=session.getMapper(UserMapper.class);
// User user=mapper.selectUser(1);
// System.out.println(user);
// }finally{
// session.close();
// }
}
}