Mybaties笔记总结(主要介绍理论知识:mybaties优点、核心配置文件和映射配置文件的编写以及部分典型标签的使用)

一、Mybatis的优越性以及和jbutils的对比
JBUtils不能解耦(sql语句,参数,返回结果都是写死的)
框架:减少重复代码量,解耦。框架可以封装重复的代码,提供更加简洁的API。功能发生改变不需要改变代码
Mybatis是操作数据库(持久层)的框架,他的内部封装了JDBC,开发者只需要关注sql本身。采用ORM(对象关系映射)思想解决了实体和数据库映射的问题。
Mybatis作用:
(1)简化了代码
(2)实现了解耦(sql语句,参数,返回结果都是在配置文件中使用的)
(3)内置连接池,性能比较好

二、Mybatis特点
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过xml 或注解的方式将要执行的各种statement 配置起来,并通过java 对象和statement 中sql的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与 jdbc api打交道,就可以完成对数据库的持久化操作。

下面给出封装myBatis的工具类:
只需要调用openSession()、closeAndCommit()、rollbackAndCommit()三个函数即可以实现创建、关闭提交事务、回滚事务等功能不必像jdbc那样写大段的冗余代码

public class SqlSessionFactoryUtil {
    public static InputStream is;
    public static SqlSession openSession() throws IOException {
        //使用代码执行mybatis
        //1.创建sqlsessionFactorybuilder对象
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        //2.使用factoryBuilder对象加载主配置文件,创建sqlsessionfactory对象
        //将主配置文件转换成流
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        //(相当于连接池构建者模式)
        SqlSessionFactory sessionFactory = factoryBuilder.build(is);
        //3.使用sessionFactory来创建sqlsession对象来执行sql语句
        //相当于connection工厂模式
        SqlSession sqlSession = sessionFactory.openSession();
        return sqlSession;

    }
    public static void closeAndCommit(SqlSession sqlSession) {
        //6.提交事务(查询可以不提交但是增删改一定要提交)
        sqlSession.commit();
        //7.关闭资源
        sqlSession.close();
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void rollbackAndCommit(SqlSession sqlSession) {
        //6.提交事务(查询可以不提交但是增删改一定要提交)
        sqlSession.rollback();
        //7.关闭资源
        sqlSession.close();
        try {
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

三、核心配置文件

数据库的环境信息:整个项目只需要配置一次(核心配置文件)
(1)数据源信息:username,password,url,driverClassName.最大连接数,最大超时时间。
如下所示不同的用户登录可以登录自己的username和password:

jdbc.username=root
jdbc.password=root
jdbc.url=jdbc:mysql:///mybatis_day01?characterEncoding=utf8
jdbc.driver=com.mysql.jdbc.Driver

(2)事务管理者的信息等等
核心配置文件:
(1)存储位置:资源文件的类路径下,也就是resources根目录下,文件名随意,文件类型是xml文件。
(2)properties标签,用于引入外部属性文集;引入之后在当前文件中通过${name}获取value。
(3)typeAliases标签里面通过package进行包扫描配置别名
(4)environment标签,里面配置当前数据库的环境
(4.1)transactionManager
(4.2)datasource
(5)mapper标签中,通过package进行包扫描加载映射配置文件。
(6)引入约束文件:约束文件如下,约束文件的作用是给与正确的提示

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

四、映射配置文件
每个方法执行需要的信息:每一个方法都需要配置一次(映射配置文件)
(1)sql语句
(2)返回值类型
(3)参数列表等等
映射配置文件:
一个Dao接口就对应一个映射配置文件
(1)保存路径:在resources目录中,路径要和对应的Dao接口的路径保持一致(建议)。如下所示(同级)
在这里插入图片描述

(2)映射配置文件的文件名,建议和Dao接口的名字保持一致,文件类型是xml。如上所示UserDao.xml对应UserDao

(3)映射配置文件的跟标签是mapper标签,mapper标签的namespace属性要与对应的dao接口保持一致。
以上述为例UserDao.xml对应UserDao,mapper标签的namespace属性是UserDao的路径。

<mapper namespace="***.****.dao.UserDao">

(4)dao接口中的每一个方法就是对应映射配置文件的一个标签
查询方法对应select标签
添加 insert
删除 delete
更新 update
(5)parameterType属性对应方法的参数类型,如果有别名可以写别名
(5.1)如果只需要接收一个参数,则可以简单数据类型传入,获取简单数据类型的参数时推荐用#{任意字符}
(5.2)如果是需要接收多个参数的时候,则以pojo对象或者是map的类型传入,获取pojo对象或者是map中的数据: p o j o 的 属 性 或 者 是 m a p 的 k e y 或 者 是 ’ {pojo的属性或者是map的key}或者是’ pojomapkey{ pojo的属性或者是map的key }’
(5.3)如果参数更加复杂,还可以是pojo的包装类型
(6)resulttype属性,这个属性是select标签专有,他里面指定的结果类型(进行的是默认的映射)
(6.1)如果查询到的结果是一个数据,则使用简单数据类型
(6.2)如果查询到的是一行数据,那么方法的返回值就是pojo类型,resulttype属性的值也是pojo类型
(6.3)如果查询到的是多行数据,那么方法的返回值就是List类型,resulttype属性的值也是pojo类型
(7)resultMap属性,将结果集合pojo进行自定义映射,要引用自定义映射的id
(8)resultMap标签,自定义映射规则
(8.1)id属性是他的唯一标识,供select标签的resultMap属性引用
(8.2)property属性,就是要进行自定义映射的pojo类的全限定名或者是别名
他的子标签:id标签,用来对主键字段配置映射规则;result子标签,用来对非主键的字段配置映射规则
Column属性:要进行映射的结果集的字段名
Property属性:要进行映射的pojo的属性名
(9)通过selectKey标签,查询自增长的id
Keycolum:添加的是表的主键字段名
Keyproperty:要设置到的pojo中的属性名
resultType:查询到的主键字段的类型
order:顺序,在添加之后执行则为after否则为before
(10)引入约束文件:约束文件如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

五、 #{}与${}的区别【面试】
(1)#{}表示一个占位符号
1.1通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 数据库 类型转换
1.2#{}可以有效防止 sql 注入
1.3#{}可以接收简单类型值或 pojo 属性值
1.4 如果 parameterType 传输单个简单类型值(String,基本类型), #{} 括号中可以是 value 或其它名称。
(2) 表 示 拼 接 s q l 串 ( 2.1 ) 通 过 {}表示拼接 sql 串 (2.1) 通过 sql2.1{}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换.
(2.2) 不 能 防 止 s q l 注 入 ( 2.3 ) {}不能防止 sql 注入 (2.3) sql2.3{}可以接收简单类型值或 pojo 属性值
(2.4)如果 parameterType 传输单个简单类型值.${}括号中只能是 value

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值