首页 > 代码库 > myBatis

myBatis

ORM:Object(javaBean) Relation(和数据库记录的关系) Mapping(javaBean和数据库记录的映射)

    对象关系映射,Hibernate把ORM用的淋漓尽致。

Hibernate:
 
          @Table("person")
          Person{
               String lastName;
               int age;
          }
 
          save(new Person()); 
 
          get(1);
           update();         
缺点:ORM(反模式);
          1、sql框架自动生成的;无法优化;
          2、全映射框架;     select lastName from person where id=1;
                                        select * from person where id=1 ;
          3、HQL:
能写原生sql;
     获取连接---->创建PreparedStatement---->预编译sql---->执行sql--->封装结果4
Hibernate;
     JavaBean---------------------------------------------------------------->数据表
MyBatis;
        只需要编写sql;queryRunner   queryForObject( new BeanPropertyMapper<>())
      获取连接---->创建PreparedStatement---->预编译sql---->执行sql--->封装结果
给配置文件里面写好sql即可;
 
MyBatis:
          轻量级;导包少;MyBatis.jar;

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。

安装

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。

如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中:

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>

从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

 

 

技术分享

 

0、搭建数据库的基础环境;创建一些表;
建表;HelloWorld使用tbl_student表测试;
 
 
 
 
1、导包
MyBatis框架在关键位置特别是发sql语句的时候都有日志记录;导入日志包才能看;
Log4j:能用依赖自己的一个配置文件。文件名就叫log4j.xml;必须放在类路径下;
 
 
 
2、写配置
          1)、mybatis的全局配置文件;指导mybatis框架正确运行的文件;比如数据库连接池(mybatis内置连接池)配置
          2)、StudentDao接口的实现描述文件(sql映射文件)(StudentDao.xml);配置这dao的哪个方法执行哪个sql语句;相当于是dao的实现
          3)、一定要在全局配置文件中注册接口的实现文件(eg:StudentDao.xml)
 
3、测试
@Test
    public void test() throws IOException {

        //1、根据全局配置文件获取一个SqlSessionFactory对象;
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、SqlSessionFactory;用它来创建sqlSession;
        //开启一次和数据库的会话;默认这个会话是非自动提交的;
        SqlSession openSession = sqlSessionFactory.openSession(true);

        //3、SqlSession;sql会话;相当于是connection;和数据库建立一次会话(连接)
        StudentDao studentDao = openSession.getMapper(StudentDao.class);
        Student student = new Student(null, "张三admin", 19, 98.98, new Date());
        studentDao.saveStudent(student);

        //4、保存成功!
    //  openSession.commit();

    }

总结实现过程:

0、创建库创建表;运行mybatis_test.sql文件
     把javaBean和操作数据的Dao接口创建出来;
1、导包;导入mybatis.jar,数据库驱动,日志包(log4j);
2、写配置:
          1)、复制粘贴log4j.xml到类路径下即可;
          2)、MyBatis的全局配置文件;(注意配置数据源信息)
          3)、Dao接口的实现文件(sql映射文件);复制粘贴官方文档;
          4)、一定要把dao接口的实现文件注册到全局配置文件中;
3、测试:
        复制粘贴:
          1)、根据全局配置文件创建一个SqlSessionFactory
          2)、调用SqlSessionFactory.openSession()创建一个sqlSession对象。开启和数据库的一次会话
          3)、通过sqlSession.getMapper(接口类)获取这个接口的映射器;
          4)、调用接口的方法测试;
          5)、注意:默认sqlSession是不自动提交,测试增删改需要注意;
          6)、一定关闭SqlSession

 

dtd是约束xml文档中都能写什么标签;
如果这个文件能找到写xml就有提示;
eclipse写mybatis配置文件有提示;
引入mybatis的dtd约束;
 

1、复制dtd约束的url地址
 
2、按照以下步骤
技术分享
 技术分享

 

技术分享

 

技术分享
 
注意:
     1)、配置文件的作用;
               全局配置文件:mybatis-config.xml;作用:指导mybatis如何正确运行;
               SQL映射文件:将接口的方法和文件里面sql进行绑定;对接口的实现;
     2)、两个类;
               SqlSessionFactory:SqlSession工厂;需要根据全局配置文件得到工厂;
               SqlSession:从SqlSession工厂中获取SqlSession对象;
                                   一个SqlSession代表和数据库的一次会话;线程不安全,我们需要及时释放资源;
     3)、一个原理;
               我们通过SqlSession对象获取到Dao接口的实现类对象;
               对象是org.apache.ibatis.binding.MapperProxy@1794d431===》         
                              class com.sun.proxy.$Proxy2
    
 MyBatis会为每个绑定了配置文件的接口,创建一个代理对象;接口执行方法执行的是代理对象的方法;
技术分享

 

技术分享

 4)、一个不常用的场景;
               我们可以没有dao接口,直接调用sqlSession的原生API;
               最低配置;
 
  原生mybatis模式;不推荐;
//使用sql语句的唯一标示调用
openSession.insert("com.atguigu.dao.StudentDao.saveStudent", student);
          接口式编程(推荐);接口->解耦;BookDao bookDao;
               BookService{
                        @Autowired
                        BookDao bookDao; 
               }
                    

 

 
 
技术分享
 

myBatis