1. 程式人生 > >Mybaits——DAO層開發兩種模式

Mybaits——DAO層開發兩種模式

使用mybaits作為持久層,在開發dao層時可以有兩種方式。一種是傳統的方法,就是定義dao介面,然後寫實現類,第二種較簡單,只需要定義dao介面就行,但是命名什麼的得按照規範寫,剩下的交給框架就行。

1.傳統方法

我就不解釋了…
不管是jdbc還是hibernate都是這模式,

2.介面開發

mybaits特有的,至於為什麼這麼叫,我也不知
1.準備工作
資料庫裡一個測試表,環境的搭建等。我這裡是為了方便,建一個簡單的表叫message,建立對應的實體類
這裡寫圖片描述

實體類

public class Message {
 private Integer id;
 private
String title; private String comment; 省略getset方法... }

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代理物件。優點就是程式碼看起來更優雅,規範化。