mybatis自己总结资料

来源:互联网 发布:战列舰炮击的威力知乎 编辑:程序博客网 时间:2024/06/07 01:32
mybatis:

    持久层框架
    java实现的数据库操作只能是JDBC
    mybatis底层也是JDBC
    
    
    Mybatis前身就是ibatis,是一个支持普通sql查询,存储过程和高级映射的一个优秀的持久层(ORM)框架
    MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的封装
    MyBatis可以向PreparedStatement中的输入参数进行输入映射,将查询的结果集进行输出映射,映射成java对象
    
    
    总结JDBC的问题
        1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁的开启和关闭,浪费资源,影响数据库的性能
        解决:使用数据库连接池
        2.将sql语句写在java代码中,如果需要修改sql语句需要重新编码,不利于维护
        解决:放入到配置文件.xml
        3.向Preparedstatement中设置参数的时候也是在java代码中,不利于维护
        解决:放入到配置文件中
        4.从ResultSet中遍历结果的时候,需要手动映射结果集
        解决:将查询的结果集,自动映射成java对象
        
    
    依赖两个jar包
        mybatis自身的
            mybatis.jar
        数据库的
            mysql-jdbc.jar-----mysql
            ojdbc.jar----------oracle
        
    两种配置文件:
        configuration配置(只有一个)
            连接信息
            系统的环境信息
        
        mapper配置(有多个)
            sql语句
            映射信息
    
    configuration配置详解
        environments:配置连接的环境,可能有多个,通过default指定是某一个,default的值对应的下面子环境的id值
            
            
        environment:一个连接的环境,id表示该环境的唯一性标示
        
        transactionManager:事务管理器
            JDBC:使用了JDBC的提交和回滚,它依赖于从数据源得到的连接来管理事务的范围
                conn.setAutoCommit(false);
                conn.commit();
                conn.rollback();
            
            
            MANAGED:这个配置几乎啥都没做,它从来不会提交或者回滚一个连接
                    它将事务扔给了其他框架来做,自己不管理
    
        dataSource:用于配置连接信息
            UNPOOLED:没有连接池
            POOLED:有连接池
            JNDI:向其他容器要连接
        
        typeAliases:取别名
            第一种方式:每一个对象配置一个别名
            <typeAlias type="entity.User" alias="user"/>
                type:对应的java对象
                alias:别名
            第二种方式:扫包
            <package name="entity"/>
                name:需要扫描的包
            
Mapper配置文件

    mapper标签
        namespace:一般是包名.类名        
        
        
    select标签
        方法的参数:
            如果只有一个,正常
            
            如果有多个
                方式一:当遇到多条件的时候,将多条件的数据封装成一个对象配置
                
                方式二:在mapper中不配置parameterType,直接写参数的下标,参数在dao层接口中设置
        
    
        id:方法名,需要与dao层的方法名相同
        parameterType:参数的类型
        resultType:返回值的类型
            查询的时候如果返回值是一个对象的集合,那么配置的resultType就是这个对象
        resultMap:另一种映射方式
                数据库返回数据与java对象进行映射的配置


    sql标签
        这个元素可以被用来定义可重用的SQL代码段

    insert标签
        id:方法名
        parameterType:参数类型
        
        保存时需要提交事务
        
        如果想要保存时返回主键,需要加如下配置
        useGeneratedKeys="true"-----配置保存时返回主键
        keyProperty="id" ----------主键所对应的java对象中属性的名字
        keyColumn="id"     ---------主键所对应的数据库中列名
        
    使用注解的方式代替配置文件
        对于简单语句来说,使用注解代码会比较清晰
        但是对于复杂语句来说,会混乱,所以官方并不推荐使用注解的方式、
        
        @select--相当于select标签

        @Results(value={
            @Result(id=true,property="id",column="user_id"),
            @Result(property="username",column="user_username"),
            @Result(property="password",column="user_password"),
            @Result(property="phone",column="user_phone")
        })
        @Results:相当于resultMap
        id=true:表示是主键
        property:java对象属性名
        column:数据库字段名

        
        @Options:选项
            相当于xml配置中的标签的属性        

    id    name password
    select * from t_user where id = ?
    select * from t_user where username = ?
    select * from t_user where id = ? and username = ?
    select * from t_user where username = ? and password = ?
    select * from t_user where 1=1 and password = ?
    StringBuffer sql = new StringBuffer()
                .append("select * from t_user where 1=1")
    if(id!=null){
        sql.append("and id = ? ")
    }
    if(name != null){
        sql.append("and name = ? ")
    }
    

    动态sql
        if
        choose(when,otherwise)
        where
        trim
        foreach
        
        
        if:就是一个简单的条件判断,通过if语句我们可以实现某些简单的条件选择查询
            只要条件满足会一直添加
            
        choose:相当于jstl中的choose标签
            通常与when和otherwise搭配使用
            when:当when中的条件满足的时候加入其中的内容
            otherwise:当所有的条件都不满足的时候加入其中的内容
            只要满足一个条件就不再考虑其他条件
            
        where:简化了sql语句中where中的条件判断
            将最终生成的sql语句中添加where关键字
            并且将条件部分第一个条件前面的and/or连接条件的关键字自动去除
        
        trim:可以在自己包含的内容中加上某些前缀或者后缀,
            也可以把包含的内容部分的首部或者尾部的某些内容去掉
            prefix:加前缀
            suffix:加后缀
            prefixOverrides:忽略首部内容
                在忽略首部内容时,如果有多个关键字选择,以|分隔,并且|后面不能有空格
            suffixOverrides:忽略尾部内容
            
        set:在包含的语句块前面加上set
            如果包含的语句是以逗号结束会把该逗号去掉
      
        
        foreach:主要用在in语句中,可以在sql语句中进行迭代一个集合
            collection:参数的类型,可能有三种值
                传入的参数类型的同一种,并且用的是一个List存放,这时候用:list
                穿入的参数类型是同一种,并且使用的是一个array数组,这时候用:array
                传入的参数类型不同:封装成map
            item:相当于var,表示集合中每一个元素进行迭代时的别名
            index:指定一个名字,用于表示在迭代过程中,每次迭代的位置
            open:表示该语句从什么地方开始迭代,in语句中是以"("开始
            close:什么时候结束
            separator:表示迭代的数据之间的分隔符
            
        select * from t_user where id in(1,3,5)

    
   
        



原创粉丝点击