mybatis|MyBatis

MyBatis简介 MyBatis是一个持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码
mybatis|MyBatis
文章图片

  • mybatis-config.xml时mybatis的核心配置文件,通过他的配置可以生成SqlSessionFactory工厂对象
  • 基于SqlSessionFactory工厂可以生成SqlSession对象
  • SqlSession对象可以发送SQL去执行并返回结果
  • Executor是SqlSession底层对象用于执行SQL语句
  • MapperStatement也是SQLSession低等对象,可以用来接收输入映射(用户输入的参数)和作出输出映射(Sql查询结果)
Mybatis与传统JDBC对比 传统JDBC
  • 使用传统JDBC会有大量重复代码
  • JDBC本身没有连接池,会频繁创建关闭连接效率低
  • Sql写死在程序中
  • 查询SQL返回的结果是ResultSet对象,需要手动处理
    使用MyBatis
  • Mybatis对JDBC进行封装,可以简化代码
  • Mybatis自身支持连接池,可以提高效率
  • MyBatis是将SQL配置在Mapper文件中,修改SQL修改配置文件就可以,不需要重新编译
  • MyBatis会将查询结果转换成java对象
MyBatis的编程步骤
  • 创建SqlSessionFactory
  • 通过SqlSessionFactory创建SqlSession
  • 通过SqlSession执行数据库操作
  • 调用session.commit()提交事务
  • 调用session.close()关闭事务
MyBatis优缺点 优点
  • 易于上手掌握
  • Sql写在xml里利于管理和优化
  • 减少Sql与代码的耦合
  • 提供xml标签,支持动态Sql( )
    缺点
  • Sql工作量大
  • Sql依赖于数据库,数据库移植性差
导入依赖包
junit junit 4.9 mysql mysql-connector-java 5.1.32 org.mybatis mybatis 3.2.8 org.slf4j slf4j-log4j12 1.6.4

Mybatis-config.xml配置文件 【mybatis|MyBatis】Mybatis-config.xml是MyBatis的全局配置文件src/main/resources
  • environments : 可以配置多个环境(environment)每种环境可以做不同配置或连接不同数据库开发、测试、生产环境可能需要不同的配置,连接的数据库可能也不相同,因此我们可以配置三个environment,分别对应上面三种不同的环境
  • environment配置 :内部可以配置多种配置信息,事务管理配置(`transactionManage)和数据源(dataSource)配置
  • transactionManage事务管理器 : Mybatis中有两种事务管理方式(type="[JDBC|MANAGED])JDBC:直接使用JDBC的提交和回滚设置,他依赖数据源的到的连接来管理事务范围; MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接。需要自己手动添加并管理 不经常使用
  • dataSource 数据源 即连接池配置 使用type指定数据源类型
    JNDI:已过时,不推荐使用!
    POOLED:使用连接池,mybatis会创建连接池,并从连接池中获取连接访问数据库,在操作完成后,将会把连接返回连池。
    UNPOOLED:不使用连接池,该方式适用于只有小规模数量并发用户的简单应用程序上
  • Mapper: 用于导入Mapper文件位置,可以配置多个

Mybatis详细配置

添加Mapper.xml
  • (1)第1行是xml的文档声明,用于声明xml的版本和编码
  • (2)第2、3、4行,引入了xml约束文档,当前xml文档将会按照mybatis-3-mapper.dtd文件所要求的规则进行书写。
  • (3)Mapper标签:根标签,其中namespace(名称空间,也叫命名空间),要求不能重复。在程序中通过【namespace + id 】定位到要执行哪一条SQL语句
    位置src/main/resource
  • (4)select标签 用于制定执行的各种SQL语句包括id , resultType,resultMap
="findAll" resultType="com.tedu.pojo.Emp"> select * from emp

测试
  • 1.读取Mybatis核心配置文件(mybatis-config.xml)
    InputStream in = Resources.getResourceAsStream(“mybatis-config.xml”);
  • 2.通过配置信息获取SQLSessionFactory工厂对象
    SqlSessionFactory fac = new SqlSessionFactoryBuilder().build( in );
  • 3.通过工厂对象获取SqlSession对象
    SqlSession session = fac.openSession();
  • 4.通过namespace+id找到要执行的sql语句并执行sql语句
    List list = session.selectList(“EmpMapper.findAll”);
@Test public void findAll() throws IOException { //1.读取mybatis的核心配置文件(mybatis-config.xml) InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); //2.通过配置信息获取一个SqlSessionFactory工厂对象 SqlSessionFactory fac = new SqlSessionFactoryBuilder().build( in ); //3.通过工厂获取一个SqlSession对象 SqlSession session = fac.openSession(); //4.通过namespace+id找到要执行的sql语句并执行sql语句 List list = session.selectList("EmpMapper.findAll"); //5.输出结果 for(Emp e : list) { System.out.println( e ); } }

    推荐阅读