JavaWeb笔记(19)-mybatis基础

  1. mybatis
1. 三层架构:
    * 表现层:spring MVC框架
        用于展示数据
    * 业务层:
        用于处理业务需求
    * 持久层:mybatis框架
        用于数据库交互
2. 持久层技术解决方案:
    * JDBC技术:
        Connection
        PreparedStatement
        ResultSet
    * Spring中的JdbcTemplate
        Spring中队jdbc的简单封装
    * Apache的DBUtils
        类似JdbcTemplate,也是对jdbc的简单封装
    以上技术都不能算是框架:JDBC作为规范,JdbcTemplate和DBUtils都是工具类
3. mybatis是一个优秀的基于java的持久层框架
    它内部封装了jdbc,使开发者只需要关注sql语句本身
    而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程
    mybatis通过xml或注解的方式将要执行的各种statement配置起来
4. mybatis中的ORM:
    a. ORM:Object Relational Mapping对象关系映射
        将数据库表与实体类以及实体类的属性对应起来
        使得操作实体类就可以实现操作数据库表
    b. 类似之前的查询对象封装操作
        list<Emp> list = template.query(sql,new BeanPropertyRowMapper<Emp>(Emp.class));
    c. 因此需要保证数据库的列名与实体类的属性保持一致
  1. mybatis使用xml配置
1. mybatis使用:
    a. 环境搭建:
        1. 创建maven工程,并导入jar包坐标
            mybatis
            mysql-connector-java
            log4j(可选)
        2. 创建数据库表和对应的实体类和dao接口
        3. 创建mybatis的主配置文件
            SqlMapConfig.xml 
            其中包含mysql环境配置:
                <!--配置环境-->
                <environments default="mysql">
                    <!--配置mysql-->
                    <environment id="mysql">
                        <!--配置事务的类型-->
                        <transactionManager type="JDBC"></transactionManager>
                        <!--配置数据源(这里选择数据库连接池)-->
                        <dataSource type="POOLED">
                            <!--配置连接数据库的4个基本信息-->
                            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                            <property name="url" value="mysql连接数据库的url"/>
                            <property name="username" value="数据库用户名"/>
                            <property name="password" value="数据库密码"/>
                        </dataSource>
                    </environment>
                </environments>
            还包含映射文件的配置:
                 <!--指定映射文件的配置位置,映射文件指的是每个dao独立的配置文件-->
                <mappers>
                    <mapper resource="cn/mysilent/dao/IUserDao.xml"/>
                    <!--如果还有其他dao接口则需要再创建mapper标签-->
                </mappers>
        4. 创建映射配置文件:
            IUserDao.xml
            其中包含对应抽象接口中的抽象方法配置:
                <!--namespace属性为dao接口的位置-->
                <mapper namespace="cn.mysilent.dao.IUserDao">
                    <!--配置dao接口抽象方法的实现-->
                
                    <!--配置findAll方法的查询语句-->
                    <!--属性id的值必须为接口中对应的抽象方法名称,标签体为该抽象方法的sql查询语句-->
                    <!--属性resultType的值必须为查询后的结果封装的对象-->
                    <select id="findAll" resultType="cn.mysilent.domain.User">
                        select * from user;
                    </select>
                </mapper>
        5. 注意事项:
            * 在mybatis框架的使用过程中,常有命名格式为IUserMapper来代替IUserDao
            * 在IDEA中创建目录时和创建包时是有差异的
                在创建包时:cn.mysilent.dao这是三级目录
                在创建目录时:cn.mysilent.dao这是一级目录,需要分开创建cn目录mysilent目录dao目录才为三级目录
            * mybatis要求配置文件在resources下的路径要与dao接口的包路径保持一致
                因此,创建配置文件时,必须创建三级目录
                cn/mysilent/dao/IUserDao.xml
                cn.mysilent.dao.IUserDao.java
            * 映射配置文件的mapper标签属性namespace必须时dao接口的全类名
            * 映射配置文件的select标签id属性必须为dao接口的方法名
            * 映射配置文件的select标签resultType属性必须为查询结果的封装类全类名
            此时,无需要在写dao的实现类,mybatis框架就可以自动实现
2. Mybatis使用步骤:
    a. 读取配置的文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        * 读取配置文件建议方法:
            1. 使用类加载器,只能读取类路径的配置文件
            2. 使用ServletContext对象的getRealPath()方法
    b. 创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder sb = new SqlSessionFactoryBuilder();
        SqlSessionFactory sf = sb.build(in);
        * 创建工厂时,mybatis使用的是构建者模式
            即开发商包了一个建筑队,只需要给建筑队设计图纸和钱即可,最后生成建筑
            隐藏了对象的实现细节,使用者直接调用方法即可拿到对象
    c. 使用工厂生成SqlSession对象
        SqlSession sqlSession = sf.openSession();
        * 生成SqlSession对象时,mybatis使用的是工厂模式
            降低了类之间的依赖关系
    d. 使用SqlSession创建Dao接口的代理对象 -- 即由mybatis框架来实现接口的实现类
        IUserDao userDao = sqlSession.getMapper(IUserDao.class);
        * 创建Dao接口的实现类时,mybatis使用了代理模式
            不修改源码基础上增强方法
    e. 使用代理对象执行方法
        List<User> userDaoAll = userDao.findAll();
        for (User user : userDaoAll) {
            System.out.println(user);
        }
    f. 释放资源
        sqlSession.close();
        in.close();
  1. mybatis使用注解配置
1. mybatis使用:
    a. 环境搭建:
        1. 创建maven工程,并导入jar包坐标
        2. 创建数据库表和对应的实体类和dao接口
        3. 在dao接口的抽象方法上加上@Select注解,注解参数为该方法对应的sql语句
            @Select("select * from user")
            List<User> findAll();
        4. 创建mybatis的主配置文件
            SqlMapConfig.xml 
            映射文件的配置与xml配置有所区别:
                 <!--使用注解不再需要配置映射文件,直接指定添加了注解的全类名-->
                <mappers>
                    <mapper class="cn.mysilent.dao.IUserDao"/>
                    <!--如果还有其他dao接口则需要再创建mapper标签-->
                </mappers>
        5. 注意事项:
            * 在mybatis框架的使用过程中,常有命名格式为IUserMapper来代替IUserDao
            * 在IDEA中创建目录时和创建包时是有差异的
                在创建包时:cn.mysilent.dao这是三级目录
                在创建目录时:cn.mysilent.dao这是一级目录,需要分开创建cn目录mysilent目录dao目录才为三级目录
            * mybatis要求配置文件在resources下的路径要与dao接口的包路径保持一致
                因此,创建配置文件时,必须创建三级目录
                cn/mysilent/dao/IUserDao.xml
                cn.mysilent.dao.IUserDao.java
            * 映射配置文件的mapper标签属性namespace必须时dao接口的全类名
            * 映射配置文件的select标签id属性必须为dao接口的方法名
            * 映射配置文件的select标签resultType属性必须为查询结果的封装类全类名
            此时,无需要在写dao的实现类,mybatis框架就可以自动实现
  1. mybatis底层操作
1. 读取SqlMapConfig.xml文件:
    a. 可以获取到数据库连接的相关信息
    b. 由数据库连接信息可以获取到Connection对象
    c. 可获取到dao接口的映射信息(可选xml配置/注解配置两种配置方式)
2. 读取xml配置/注解配置信息
    a. 可以获取需要执行的SQL语句
    b. 可以通过SQL语句获取PreparedStatement对象
    c. 可以获取到封装实体类的全限定类名
3. mybatis中selectList方法实现技术:
    a. dom4j技术解析xml文档
    b. 注册驱动,获取连接
    c. 通过SQL语句获取PreparedStatement
    d. 查询获取ResultSet结果集
    e. 遍历结果集,封装对象
        1. 由封装实体类的全限定类名得到实体类对象实例:反射技术
            E element = (E) Class.forName(全限定类名).newInstance();
        2. 使用getXxx/setXxx方法设置属性值
        3. 将该对象放入List<E>中
    f. 返回List集合
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值