mybatis使用mapper代理的方式操作資料庫
阿新 • • 發佈:2019-01-02
利用mapper 代理的方式操作資料庫和上一篇利用傳統的方式相比,不需要程式設計師自己建立 dao 的介面實現類(即:不需要建立userDaoImpl),而是通過 mybatis 代理的方式建立。
但是要注意的開發規範:
1、usermapper.xml 檔案中 mapper 的 namespace 的值要等於 dao 的介面類的地址
2、userDao 方法名和 usermapper.xml 中的 select 的 id 一樣
3、userDao 介面中的方法的返回值和 usermapper.xml中 select 的 resultType 的型別一樣
4、userDao 介面中方法的輸入引數型別和 usermapper.xml 中 select 的
這是和傳統的方式(隨便起個名字)不同的地方
sqlMapperConfig.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"> <!-- 配置JDBC事務控制,由mybatis進行管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置資料來源,採用mybatis連線池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/spring"/> <property name="username" value="root" /> <property name="password" value="5315314sd" /> </dataSource> </environment> </environments> <mappers> <!-- 載入 usermapper.xml 檔案 --> <mapper resource="usermapper.xml"/> </mappers> </configuration>
usermapper.xml
userdao 介面:<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper 的 namespace 的值要等於 userdao 介面的地址(包名.介面名) --> <mapper namespace="testmapper.userdao"> <!-- 查詢使用者 id 名字要等於 userdao 接口裡面對應的方法名, parameterType 的型別等於對應方法裡面的輸入引數型別, resultType是對應 方法裡面的返回值型別,例如 userdao 接口裡面的方法:public user findUserById(int id); --> <select id="findUserById" parameterType="int" resultType="test.user"> select * from user where id =#{id} </select> <!-- 新增使用者 --> <!-- parameterType:指定輸入引數型別是 pojo #{}中指定 pojo 的屬性名,接收到 pojo 的屬性值 --> <insert id="insertUser" parameterType="test.user"> insert into user(name,password) values(#{name},#{password}) </insert> </mapper>
package testmapper;
import test.user;
public interface userdao {
public user findUserById(int id);
public void inserUser(user user);
}
測試類:
package testmapper;
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 test.user;
public class test {
public static SqlSessionFactory sf;
public void setup() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream is = Resources.getResourceAsStream(resource);
sf = new SqlSessionFactoryBuilder().build(is);
}
public static void main(String[]args){
test t = new test();
try {
t.setup();
} catch (IOException e) {
e.printStackTrace();
}
SqlSession sqlsession = sf.openSession();
//建立userdao物件,mybatis 自動生成 mapper 代理物件
userdao userdao = sqlsession.getMapper(userdao.class);
user user = userdao.findUserById(1);
System.out.println(user);
}
}
整個專案框架:
總結:一般專案開發都是面向介面開發,所以我們只需要把 dao 的方法定義在一個接口裡面:UserDao,然後通過 mapper 代理的方式建立 mapper 介面實現類的代理物件,再通過該代理物件可直接對接口裡面的方法進行呼叫
與不用mapper代理方式開發在編碼上的區別與共同點:
1、要遵守mapper代理方式的開發規範,剛開始的4點
2、不用建立dao介面的實現類
3、不論是非mapper 代理的方式還是 mapper 代理的方式,都需要建立回話工廠,回話工廠建立之後
(1)非mapper 代理的方式是通過呼叫 SqlSession 裡面的 select、insert、update、delete 方法操作資料庫
(2)mapper 代理的方式通過建立 dao 介面實現類的代理物件,直接呼叫接口裡面的方法實現相關資料庫操作