Mybatis开发dao

原始dao开发方法

思路:编写daodaoimpl ,向dao注入 SqlSessionFactory,在方法体内通过 SqlSessionFactory创建SqlSession。与spring整合之后,直接定义 SqlSessionFactory属性就可以了。

public class UserDaoImpl implements UserDao {
    // 通过构造方法传入SqlSessionFactory
    // 如果与Spring整合,直接通过注解和SqlSessionFactory属性就可以完成注入。
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    public User findUserById(int id) throws Exception {
        // SqlSession线程不安全,需要在内部创建。
        SqlSession sqlSession = sqlSessionFactory.openSession();
        /**
         * @param  参数一:调用sqlSession方法时,statement id 属于硬编码,
         * @param  参数二:类型属于泛型,在编译阶段不报错。,
         */
        User user = sqlSession.selectOne("com.zd.user.dao.UserMapper.findUserById", id);
        //session.commit();// 提交事务
        sqlSession.close();
        return user;
    }
}

原始dao开发存在的问题:

  • dao接口实现类存在大量模版方法,试图将这些代码提取出来。
  • 调用sqlSession方法时将statement的id硬编码了
  • 调用sqlSession方法时传入了泛型变量,编译时不报错

使用mapper代理方法(只需要提供mapper接口(相当于dao接口))

思路:

  • 编写mapper.xml映射文件
  • 编写mapper接口,需要遵循一些开发规范,就可以自动生成mapper接口实现类代理对象。
    • 开发规范:
      • mapper.xml中,namespace 等于mapper接口地址
      • mapper.java接口中方法名和mapper.xml中的statementid一致
      • mapper.java接口中方法输入参数类型和mapper.xml中的statementparameterType指定的类型一致
      • mapper.java接口中方法输入参数类型和mapper.xml中的statementresultType指定的类型一致
// 拿到mapper代理对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.findUserById(1);
  • 代理对象内部调用selectOne selectList
    • mapper返回单个pojo,代理对象内部通过调用selectOne查询数据库
    • mapper返回集合对象,代理对象内部通过调用selectList查询数据库
  • 系统框架中,dao层的代码是被业务层公用的。即使mapper接口很自由一个参数,也可以通过包装类型pojo满足不通的业务方法需求。

mybatis.xml全局配置文件

  • 将数据库的链接单独配置在db.properties中,只需要在mybatis.xml中加载即可。
  • properties:属性
  • typeHandler: 类型处理器
  • typeAliases类型别名
  • mapper:映射器*(mapper配置)
    • 通过resource或者url加载
    • 通过mapper接口加载映射文件

        
        
        
    

vo po pojo指代的含义:

  • vo:试图层面的对象 view object
  • po:持久层的对象
  • pojo:自定义的,类似po或vo的简单综合javabean

输入输出映射

  • 输入映射,pojo的包装类型

动态sql

mybatissql语句灵活操作,通过表达式判断,对sql进行灵活拼接、组装。

  • if判断
  • sql片段
  • foreach

需求:通过多个id查询用户。



    
    
    
    
        
            
                and user.sex = #{user.sex}
            
            
                and user.name like '%${user.name}%'
            
            
                /*SELECT * from USER where 1=1 and (id=1 or id=10 or id=15) and ...*/
                
                    
                    id=#{item_id}
                
            
        

    

你可能感兴趣的:(Mybatis开发dao)