Mybaits——DAO層開發兩種模式
阿新 • • 發佈:2019-02-06
使用mybaits作為持久層,在開發dao層時可以有兩種方式。一種是傳統的方法,就是定義dao介面,然後寫實現類,第二種較簡單,只需要定義dao介面就行,但是命名什麼的得按照規範寫,剩下的交給框架就行。
1.傳統方法
我就不解釋了…
不管是jdbc還是hibernate都是這模式,
2.介面開發
mybaits特有的,至於為什麼這麼叫,我也不知
1.準備工作
資料庫裡一個測試表,環境的搭建等。我這裡是為了方便,建一個簡單的表叫message,建立對應的實體類
實體類
public class Message {
private Integer id;
private String title;
private String comment;
省略get和set方法...
}
2.1配置
mybaits環境配置,寫在configration.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>
<!-- 取別名,僅限配置檔案 -->
<typeAliases>
<typeAlias type="com.entity.Message" alias="Message"/>
</typeAliases>
<!-- 環境配置-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事務管理-->
<transactionManager type="JDBC"/>
<!-- 資料庫連線池-->
<dataSource type="POOLED">
<!--驅動-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--url-->
<property name="url" value="jdbc:mysql://localhost:3306/project?characterEncoding=UTF-8"/>
<!--使用者名稱-->
<property name="username" value="root"/>
<!--密碼-->
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<!--加入對映檔案-->
<mappers>
<mapper resource="sqlmap/MessageMapper.xml"/>
</mappers>
</configuration>
到此都沒什麼不一樣,主要是對映檔案和介面有點規範
看一下對映檔案和介面
對映檔案MessageMapper.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="sqlmap.MessageMapper">
<!-- 根據id查詢 -->
<select id="findById" resultType="String" parameterType="int">
select comment from message where id=#{id}
</select>
<!-- 查詢所有訊息 -->
<select id="findAll" resultType="Message">
select * from message
</select>
</mapper>
介面MessageMapper
public interface MessageMapper {
public String findById(int id) throws Exception;
public List<Message> findAll();
}
注意:
1.namespace對應的是介面全類名,即能夠點進去定位到介面中
2.介面中方法名,引數型別,返回型別當與對映檔案一致。
2.2測試
@Test
public void test1(){
//配置檔案
String resource="SqlMapConfig.xml";
InputStream ins=null;
SqlSession sqlSession=null;
try {
ins=Resources.getResourceAsStream(resource);
//1.建立會話工廠
SqlSessionFactory fac=new SqlSessionFactoryBuilder().build(ins);
//2.通過工廠取得sqlSession
sqlSession= fac.openSession();
//3.操作
//取得mapper物件
MessageMapper mp=sqlSession.getMapper(MessageMapper.class);
//呼叫介面方法
System.out.println(mp.findAll());
} catch (Exception e) {
e.printStackTrace();
}finally{
if(sqlSession!=null){
sqlSession.close();
}
if(ins!=null){
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.3結果
結果就是在控制檯列印了,至於這樣做為什麼可行,其實就是用mapper代理物件。優點就是程式碼看起來更優雅,規範化。