• 【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代理的方法,不过第一种也有公司在用所以两种都要知道。

  • 相关阅读:
    (转)spring学习之@ModelAttribute运用详解
    (转)Spring3MVC 在JSP中使用@ModelAttribute
    (转)如何在maven的pom.xml中添加本地jar包
    (转)linux中项目部署和日志查看
    (转)Schema
    (转)xml
    (转)Dom4J解析
    判断一个请求是否为Ajax请求
    spring mvc中拦截器配置mvc:interceptors
    Freemarker自定义方法
  • 原文地址:https://www.cnblogs.com/UUUz/p/9022110.html
Copyright © 2020-2023  润新知