Mybatis怎么实现dao层?

有两种方式:         

  • 接口代理方式开发
  • 传统方式

两种方式的区别: 

 可以省略我们自己定义实现类的操作,将来mybatis会帮我们去定义实现类以及创建实现类对象(换句话来说直接  UserDao.findAll()而不用  UserDaoImpl.findAll() )。


第一种方式:传统方式

        1、编写dao层

public interface UserDao {
    //查询所有
    List<User> findAll() throws IOException;
}

        2、编写dao层实现类

/*
    Dao层实现类
 */
public class UserMapperImpl implement UserMapper{
    /*
        定义查询所有用户的方法
     */
    public List<User> findAll() throws IOException {
        //加载核心配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //创建SqlSessionFactory工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //创建sqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行sql语句
        List<User> list = sqlSession.selectList("userMapper.findAll");
        //释放资源
        sqlSession.close();
        //返回结果
        return list;
    }
}

        3、UserMapper.xml映射文件的编写

<!--namespace是命名空间,可以看成是这个文件的标识 权限定类名-->
<mapper namespace="com.hello.mapper.UserMapper">
    <!--查询所有-->
    <select id="findAll" resultType="user">
        SELECT * FROM user
    </select>

</mapper>

        4、测试传统方式(略)


第二种:代理开发方式

         目前企业主流的方式就是使用接口 + 配置文件的方式进行的dao层开发

Mapper接口开发方法只需要程序员编写Mapper接口(相当于dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边dao接口实现类方法。

Mapper接口开发只需要遵循以下规范:

  • Mapper.xml文件中的namespace与Mapper接口的全限定名相同 (即com.hello.mapper.UserMapper和UserMapper)
  • Mapper接口方法名和Mapper.xml中定义的每个statement的id属性相同(方法名都是findById)
  • Mapper接口方法的输入参数类型和Mapper.xml中定义的每个sql的parameterType的类型相同(都是传入的参数都是int类型)
  • Mapper接口中方法的返回类型要和statement的resultType属性保持一致(返回值都是User对象类型)

其中:statement指的是select,insert,update,delete标签

1、编写dao层

/*
    DAO层接口
        定义查询所有的方法

 */
public interface UserMapper {
    //定义方法,用来查询所有用户(方法名必须和statement的id保持一致)
    List<User> findAll();
}

2、模拟service层

/*
    模拟service层
 */
public class UserMapperTest extends BaseMapperTest{

    //查询所有
    @Test
    public void testFindAll() {
        //调用SqlSession中的getMapper方法,里面传递接口的Class,程序可以直接帮我们以动态代理的方式创建该接口的实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //调用findAll查询所有
        List<User> list = userMapper.findAll();
        for (User user : list) {
            System.out.println(user);
        }
    }
}

3、编写xml

<!--namespace是命名空间,可以看成是这个文件的标识-->
<mapper namespace="com.hello.mapper.UserMapper">
    <!--查询所有-->
    <select id="findAll" resultType="user">
        SELECT * FROM user
    </select>

</mapper>

Mybatis编程步骤是什么样的?

  1. 创建SqlSessionFactory
  2. 通过SqlSessionFactory创建SqlSession
  3. 通过SqlSession执行数据库操作
  4. 调用session.commit()提交事务
  5. 调用session.close()关闭会话

常见的数据层访问方式以及比较:

        1.JDBC: java原生的关系型数据库访问方式

  • 每次操作数据库都需要获取连接关闭连接,在大量访问数据库时,频繁的开关链接消耗性能。
  • 需要手动编写sql语句,有学习成本。
  • 查询出的结果需要手动进行封装到bean。
  • 没有缓存处理机制。
  • sql语句写死在程序中吗,需要修改sql必须修改源文件

        2.Hibernate: 基于面向对象理念设计的Dao层框架,基本理念就是维护对象到表的映射关系,通过操作对象操作表中的数据,从而可以减少甚至杜绝sql的使用

  • 相对比较沉重,效率不好
  • 当涉及到比较复杂的查询时,Hibernate的操作对象的方式用起来非常麻烦,甚至无法实现,只能用sql操作
  • 底层需要频繁的拼接sql,产生大量冗余的sql

        3. MyBatis: 是一种半自动对象-表映射关系的Dao层框架,可以自动的进行对象的封装,但是sql仍然需要自己来写

1.SqlMapConfig.xml:

  • 配置数据源
  • 配置别名标签
  • 缓存的设置

2.XxxMapper.xml

  • 映射文件
  • 主要写sql,映射关系

3.SqlSessionFactory

  • 生成数据库连接

SqlSession

  • 执行数据库的CRUD

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值