【Mybatis】——Dao層開發

開篇

dao層是直接和數據庫打交道的,我們所熟悉的是面向接口編程即編寫接口然後編寫不同的實現類。

正文

傳統實例

pojo類:

user

public class User {
 
//屬性名和數據庫表的字段對應
private int id;
private String username;// 用戶姓名
private String sex;// 性別
private Date birthday;// 生日
private String address;// 地址
}


第一步:編寫dao接口

public interface UserDao {
 
//根據id查詢用戶信息
public User findUserById(int id) throws Exception;
 
//刪除用戶信息
public void deleteUser(int id) throws Exception;
}


 

 

第二步:接口實現

public class UserDaoImpl implements UserDao {
 
// 需要向dao實現類中注入SqlSessionFactory
// 這裏通過構造方法注入
private SqlSessionFactory sqlSessionFactory;
 
public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
this.sqlSessionFactory = sqlSessionFactory;
}
 
@Override
public User findUserById(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
 
User user = sqlSession.selectOne("test.findUserById", id);
 
// 釋放資源
sqlSession.close();
 
return user;
 
}
@Override
public void deleteUser(int id) throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
 
//執行插入操作
sqlSession.delete("test.deleteUser", id);
 
// 提交事務
sqlSession.commit();
 
// 釋放資源
sqlSession.close();
 
}
}


 

第三步:測試

public class UserDaoImplTest {
 
private SqlSessionFactory sqlSessionFactory;
 
// 此方法是在執行testFindUserById之前執行
@Before
public void setUp() throws Exception {
// 創建sqlSessionFactory
 
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
 
// 創建會話工廠,傳入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
}
 
@Test
public void testFindUserById() throws Exception {
// 創建UserDao的對象
UserDao userDao = new UserDaoImpl(sqlSessionFactory);
 
// 調用UserDao的方法
User user = userDao.findUserById(1);
 
System.out.println(user);
}
 
}


傳統dao層開發的問題

1、使用sqlsession調用方法時statementid是寫死的

2、調用sqlsession時傳入變量,由於sqlsession方法使用的是泛型,即使變量傳入的類型不是配置文件中規定的編譯階段不報錯。

 

使用mapper代理的方法開發dao

第一步:mapper接口,相當於dao層接口

package cn.itcast.mybatis.mapper;
public interface UserMapper{
 
//根據id查詢用戶信息
public User findUserById(int id) throws Exception;
 
//刪除用戶信息
public void deleteUser(int id) throws Exception;
}


 

第二步:編寫mapper.xml

規則:

1、在mapper.xmlnamespace等於mapper接口地址

 

2mapper接口中的方法名和mapper.xmlstatementid一致

 

3mapper接口中的方法輸入參數類型和mapper.xmlstatementparameterType指定的類型一致。

 

4mapper接口中的方法返回值類型和mapper.xmlstatementresultType指定的類型一致。

 

 

第三步:測試

public class UserMapperTest {
 
private SqlSessionFactory sqlSessionFactory;
 
// 此方法是在執行testFindUserById之前執行
@Before
public void setUp() throws Exception {
// 創建sqlSessionFactory
 
// mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
 
// 創建會話工廠,傳入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception {
 
SqlSession sqlSession = sqlSessionFactory.openSession();
 
//創建UserMapper對象,mybatis自動生成mapper代理對象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
 
//調用userMapper的方法
 
User user = userMapper.findUserById(1);
 
System.out.println(user);
}
}


 

總結

使用mapper代理的方式編寫dao層相對傳統方法從代碼量上來說簡單的,但是mapper接口的參數只能有一個,所以如果需要多個參數需要包裝pojo類來滿足不同的業務需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章