最近幾天學習了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("登錄成功"); } } }