最近幾天學習了mybatis框架,我是mybatis視頻學習的。看這篇文章,我建議首先要會熟練使用MVC架構,再學習這個框架。
在我們寫傳統的MVC模式寫Bean,Dao,Servlet時,我們每次調用dao時,不一樣的sql語句,每次都要獲得連接對象,然后獲得PreparedStatement,然后通過Preparedstatement執行編寫的sql語句。每次來個service每次都要寫這寫,有沒有感覺很繁瑣?
mybatis框架呢,主要就是對dao層的封裝,只要關注sql語句,然后我在dao層寫一個方法,web程序能夠知道要執行哪個sql語句,這時候是不是需要映射?映射這個概念,在框架的學習中至關重要。
mybatis的映射非常方便,但是它的底層是怎樣實現的呢?我強烈建議先自己寫一寫mybatis的底層,就是不用mapper代理(其實就是dao接口),自己寫dao接口。我這里就是來演示自己寫底層的dao接口。
mybatis的底層原理是:首先在配置文件xml中配置連接數據庫的一些連接池,連接數據庫的參數。然后在程序中加載xml配置文件,創建SqlSessionFactory,通過SqlSessionFactory創建SqlSession,然后
SqlSession封裝了很多操作數據庫的方法。
首先創建web項目,建一個bean,建好數據庫,建一個dao的接口,


寫完接口了,就要引入jar包了

這里采用的是junit測試,模擬測試,模擬請求
接下來就是來配置xml了,配置一個mybatis必須的是一個配置連接池的xml,這里叫SqlMapConfig.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 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/exam" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 配置映射文件地址 -->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
整個項目結構如下

然后就是配置UserMapper.xml了,內容如下,這里的namespace是一種管理方式,到時候在測試代碼,底層就會用到
<?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="test">
<select id="login" parameterType="com.cidp.edu.po.User"
resultType="com.cidp.edu.po.User">
select * from books where id=#{id} and username=#{username}
</select>
</mapper>
最后就是自己寫一個dao的接口的實現類

最后就用junit來測試一下了
package com.cidp.edu.test;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.cidp.edu.bean.User;
import com.cidp.edu.dao.IUserMapper;
import com.cidp.edu.dao.UserMapperImpl;
public class MabatisTest {
@Test
public void myTest() throws Exception {
//加載源文件,路徑很關鍵,我建的config目錄和src是並列的,所以直接就訪問了,不需要
//config/SqlMapConfig.xml,可以去看下tomcat下文件的目錄結構
//classpath目錄,就是部署到tomcat下項目WEB-INF下面classes下的目錄是classpath下
//而這樣建會神奇的發現,這兩個配置文件都是和classpath並列的。
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
IUserMapper userMapper = new UserMapperImpl(sqlSessionFactory);
User user = new User();
user.setId(4);
user.setUsername("wangwu");
User selectUser = userMapper.mylogin(user);
if(selectUser==null) {
System.out.println("登錄失敗");
}else {
System.out.println("登錄成功");
}
}
}
