-
Mybatis
目錄
-
Mybatis簡介
Mybatis就是讓你更好的對數據庫進行操作,代替原生的JDBC進行操作。
-
JDBC和Mybatis
既然原生JDBC和mybatis都是對數據庫操作,那他們有什麼區別呢。
public class DbUtil {
public static final String URL = "jdbc:mysql://localhost:3306/imooc";
public static final String USER = "liulx";
public static final String PASSWORD = "123456";
public static void main(String[] args) throws Exception {
//1.加載驅動程序
Class.forName("com.mysql.jdbc.Driver");
//2. 獲得數據庫連接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3.操作數據庫,實現增刪改查
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");
//如果有數據,rs.next()返回true
while(rs.next()){
System.out.println(rs.getString("user_name")+" 年齡:"+rs.getInt("age"));
}
}
}
//代碼來自https://www.runoob.com/w3cnote/jdbc-use-guide.html
可以看到JDBC操作,創建了3個對象
Connection |
數據庫連接 |
Statement |
數據庫操作 |
ResultSet |
結果集 |
那麼Mybatis操作呢
public class MybatisTest {
public static void main(String[] args) throws Exception {
// 指定全局配置文件
String resource = "mybatis-config.xml";
// 讀取配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
// 構建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 獲取sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
// 操作CRUD,第一個參數:指定statement,規則:命名空間+“.”+statementId
// 第二個參數:指定傳入sql的參數:這裏是用戶id
User user = sqlSession.selectOne("MyMapper.selectUser", 1);
System.out.println(user);
} finally {
sqlSession.close();
}
}
}
//代碼來自:https://blog.csdn.net/hellozpc/article/details/80878563
InputStream | 讀取配置文件,包含配置的數據庫源 |
SqlSessionFactory | 通過SqlSessionFactoryBuilder創建,用來生成數據庫操作對象 |
SqlSession | 數據庫操作 |
(1)、定義一個Configuration對象,其中包含數據源、事務、mapper文件資源以及影響數據庫行爲屬性設置settings
(2)、通過配置對象,則可以創建一個SqlSessionFactoryBuilder對象
(3)、通過 SqlSessionFactoryBuilder 獲得SqlSessionFactory 的實例。
(4)、SqlSessionFactory 的實例可以獲得操作數據的SqlSession實例,通過這個實例對數據庫進行操作
在使用JDBC操作數據庫時,數據庫表列名與對象是無關聯的,我們需要手動的去指定獲取數據庫列。同時每次操作數據庫都需要去配置數據源,Mybatis等框架就爲我們優化了這些問題,讓開發者更好去的進行開發工作。
那麼Mybatis是如何去進行配置從而實現的:
首先配置全局文件mybatis-config.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>
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<!-- 環境,可以配置多個,default:指定採用哪個環境 -->
<environments default="test">
<!-- id:唯一標識 -->
<environment id="test">
<!-- 事務管理器,JDBC類型的事務管理器 -->
<transactionManager type="JDBC" />
<!-- 數據源,池類型的數據源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis-110" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
<environment id="development">
<!-- 事務管理器,JDBC類型的事務管理器 -->
<transactionManager type="JDBC" />
<!-- 數據源,池類型的數據源 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}" /> <!-- 配置了properties,所以可以直接引用 -->
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
</configuration>
通過配置文件,我們告訴了Mybatis數據源和加載什麼數據庫驅動去讀取數據庫,即JDBC裏的
public static final String URL = "jdbc:mysql://localhost:3306/imooc";
public static final String USER = "liulx";
public static final String PASSWORD = "123456";
Class.forName("com.mysql.jdbc.Driver");
現在數據源有了,那如何去操作數據:創建MyMapper.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:命名空間,隨便寫,一般保證命名空間唯一 -->
<mapper namespace="MyMapper">
<!-- statement,內容:sql語句。id:唯一標識,隨便寫,在同一個命名空間下保持唯一
resultType:sql語句查詢結果集的封裝類型,tb_user即爲數據庫中的表
-->
<select id="selectUser" resultType="com.zpc.mybatis.User">
select * from tb_user where id = #{id}
</select>
</mapper>
然後把創建的Mapper加入到mybatis-config.xml
<mappers>
<mapper resource="mappers/MyMapper.xml" />
</mappers>
<?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>
<!-- 環境,可以配置多個,default:指定採用哪個環境 -->
<environments default="test">
<!-- id:唯一標識 -->
<environment id="test">
<!-- 事務管理器,JDBC類型的事務管理器 -->
<transactionManager type="JDBC" />
<!-- 數據源,池類型的數據源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/ssmdemo" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/MyMapper.xml" />
</mappers>
</configuration>
現在完成了數據源的配置,和需要的操作,就可以生成Mybatis對象進行對應操作了。