Mybatis面试题,这是一篇会一直更新的文章!

Mybatis面试题

  • 一、mybatis的优缺点
  • 二、ORM对象关系映射
    • 1. ORM:对象关系映射
    • 2. ORM思想:简单易懂
    • 3. 以Hibernate实例,实现ORM思想
  • 三、Mybatis与hibernate的对比

一、mybatis的优缺点

优点:

  1. XML文件管理:SQL写在XML里,解除了SQL与程序代码的耦合,便于统一管理。
  2. 代码量减少:与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码
  3. 兼容性高:很好的与各种数据库兼容
  4. 与Spring很好的集成
  5. 提供映射标签:支持对象与数据库的ORM字段关系映射

缺点:

  1. SQL语句的编写工作量较大
  2. SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库

二、ORM对象关系映射

参考文章:快来get这个ORM知识!!

1. ORM:对象关系映射

  • 简单:ORM以最基本的形式建模数据。比如ORM会将MySQL的一张表映射成一个Java类(模型),表的字段就是这个类的成员变量
  • 精确:ORM使所有的MySQL数据表都按照统一的标准精确地映射成java类,使系统在代码层面保持准确统一
  • 易懂:ORM使数据库结构文档化。比如MySQL数据库就被ORM转换为了java程序员可以读懂的java类,java程序员可以只把注意力放在他擅长的java层面(当然能够熟练掌握MySQL更好)
  • 易用:ORM包含对持久类对象进行CRUD操作的API,例如create(), update(), save(), load(), find(), find_all(), where()等,也就是将sql查询全部封装成了编程语言中的函数,通过函数的链式组合生成最终的SQL语句。通过这种封装避免了不规范、冗余、风格不统一的SQL语句,可以避免很多人为Bug,方便编码风格的统一和后期维护。

2. ORM思想:简单易懂

主要目的:操作实体类就相当于操作数据库表,建立两个映射关系(实体类和表、属性和字段),将SQL语句操作封装成函数的形式,程序员不再重点关注 sql 语句

3. 以Hibernate实例,实现ORM思想

参考文章:Hibernate入门这一篇就够了
参考文章:ORM框架原理与应用——实现ORM框架入门实例
配置环境和配置文件,我就不做了,这里主要是展示一下ORM思想的实现,具体配置在参考文章

  • User实体类
public class User {

    private int id;
    private String username;
    private String password;
    private String cellphone;

    //各种setter和getter
}
  • 编写对象映射User.hbm.xml

<hibernate-mapping package="zhongfucheng.domain">

    
    <class name="User"  table="user">

        
        <id name="id" column="id">
            
            <generator class="native"/>

        id>

        
        <property name="username" column="username"/>
        <property name="cellphone" column="cellphone"/>
        <property name="password" column="password"/>
    class>
hibernate-mapping>
  • 编写主配置文件hibernate.cfg.xml
<hibernate-configuration>
    
    <session-factory>

        
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
        <property name="hibernate.connection.url">jdbc:mysql:///zhongfuchengproperty>
        <property name="hibernate.connection.username">rootproperty>
        <property name="hibernate.connection.password">rootproperty>
        
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialectproperty>


        
        
        <property name="hibernate.show_sql">trueproperty>
        
        <property name="hibernate.format_sql">trueproperty>
        
        <property name="hibernate.hbm2ddl.auto">createproperty>

        
        <mapping resource="zhongfucheng/domain/User.hbm.xml"/>

    session-factory>
hibernate-configuration>
  • 测试
public class App {
    public static void main(String[] args) {

        //创建对象
        User user = new User();
        user.setPassword("123");
        user.setCellphone("122222");
        user.setUsername("nihao");

        //获取加载配置管理类
        Configuration configuration = new Configuration();

        //不给参数就默认加载hibernate.cfg.xml文件,
        configuration.configure();

        //创建Session工厂对象
        SessionFactory factory = configuration.buildSessionFactory();

        //得到Session对象
        Session session = factory.openSession();

        //使用Hibernate操作数据库,都要开启事务,得到事务对象
        Transaction transaction = session.getTransaction();

        //开启事务
        transaction.begin();

        //把对象添加到数据库中
        session.save(user);

        //提交事务
        transaction.commit();

        //关闭Session
        session.close();
    }
}

三、Mybatis与hibernate的对比

你可能感兴趣的:(Spring,mybatis,java,mysql)