【mybatis基础】mybatis开发dao两种方法

mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀的持久层的框架,是apache下的顶级项目。mybatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。mybatis可以使用简单的XML或注解用于配置和原始映射,将接口和JavaPOJO映射成数据库中的记录。

其中,开发dao有两种方法,一种原始的dao开发方法,程序员需要写dao接口和dao实现类。另一种是mapper代理方法,程序员只需要写mapper接口相当于dao接口。

 

原始dao开发方法

1.编写dao接口(UserDao

 

[java] view plain copy
 
  1. public interface UserDao {  
  2.     // 根据id查询用户信息  
  3.     public User findUserById(int id) throws Exception;  
  4. }  

2.编写dao实现类

[java] view plain copy
 
  1. public class UserDaoImpl implements UserDao {  
  2.   
  3.     // 需要向dao实现类中注入SqlSessionFactory  
  4.     // 这里通过构造方法注入  
  5.     private SqlSessionFactory sqlSessionFactory;  
  6.   
  7.     public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {  
  8.         this.sqlSessionFactory = sqlSessionFactory;  
  9.     }  
  10.   
  11.     @Override  
  12.     public User findUserById(int id) throws Exception {  
  13.         SqlSession sqlSession = sqlSessionFactory.openSession();  
  14.           
  15.         //这里的test.findUserById是与下面的映射文件user.xml中的namespace+id有关。  
  16.         User user = sqlSession.selectOne("test.findUserById", id);  
  17.   
  18.         // 释放资源  
  19.         sqlSession.close();  
  20.   
  21.         return user;  
  22.   
  23.     }  
  24. }  

3.编写映射文件(user.xml

[java] view plain copy
 
  1. <mapper namespace="test">  
  2.     <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">  
  3.         SELECT * FROM USER WHERE id=#{value}  
  4.     </select>  
  5. </mapper>  

4.编写测试类

[java] view plain copy
 
  1. public class UserDaoImplTest {  
  2.     private SqlSessionFactory sqlSessionFactory;  
  3.   
  4.     // 此方法是在执行testFindUserById之前执行  
  5.     @Before  
  6.     public void setUp() throws Exception {  
  7.         // 创建sqlSessionFactory  
  8.   
  9.         // mybatis配置文件  
  10.         String resource = "SqlMapConfig.xml";  
  11.         // 得到配置文件流  
  12.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  13.   
  14.         // 创建会话工厂,传入mybatis的配置文件信息  
  15.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  16.     }  
  17.   
  18.     @Test  
  19.     public void testUserDaoImpl() throws Exception{  
  20.         // 创建UserDao的对象  
  21.         UserDao userDao = new UserDaoImpl(sqlSessionFactory);  
  22.   
  23.         // 调用UserDao的方法  
  24.         User user = userDao.findUserById(1);  
  25.                   
  26.         System.out.println(user);  
  27.     }  
  28. }  

测试结果:

 



mapper代理方法

1.编写mapper.javaUserMapper.java相当于java接口)

[java] view plain copy
 
  1. public interface UserMapper {  
  2.     // 根据id查询用户信息  
  3.     public User findUserById(int id) throws Exception;  
  4. }  

2.编写mapper.xml(UserMapper.xml)

[java] view plain copy
 
  1. <mapper namespace="cn.itcast.mybatis.mapper.UserMapper">  
  2.   
  3.     <!--通过id查询用户表的记录 -->  
  4.     <select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">  
  5.         SELECT * FROM USER WHERE id=#{value}  
  6.     </select>  
  7.   
  8. </mapper>  

 

注意:

1)在mapper.xmlnamespace等于mapper接口地址

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

3mapper.java接口中的方法输入参数类型和mapper.xmlstatementparameterType指定的类型一致。

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

3.编写测试类

[java] view plain copy
 
  1. public class UserMapperTest {  
  2.   
  3.     private SqlSessionFactory sqlSessionFactory;  
  4.   
  5.     // 此方法是在执行testFindUserById之前执行  
  6.     @Before  
  7.     public void setUp() throws Exception {  
  8.         // 创建sqlSessionFactory  
  9.   
  10.         // mybatis配置文件  
  11.         String resource = "SqlMapConfig.xml";  
  12.         // 得到配置文件流  
  13.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  14.   
  15.         // 创建会话工厂,传入mybatis的配置文件信息  
  16.         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  17.     }  
  18.       
  19.     @Test  
  20.     public void testFindUserById() throws Exception {  
  21.         SqlSession sqlSession=sqlSessionFactory.openSession();  
  22.           
  23.         //创建UserMapper对象,mybatis自动生成mapper代理对象  
  24.         UserMapper userMapper =sqlSession.getMapper(UserMapper.class);  
  25.           
  26.         //调用UserMapper的方法  
  27.         User user=userMapper.findUserById(1);  
  28.           
  29.         System.out.println(user);  
  30.           
  31.         sqlSession.close();  
  32.     }  
  33.   
  34. }  

测试结果:



现在最常用的方法是第二种使用mapper代理的方法,不过第一种也有公司在用所以两种都要知道。

posted on 2018-05-10 22:18  丶柚子  阅读(3109)  评论(0编辑  收藏  举报

导航