6.MyBatis

mybatis是一个非常好的持久层框架,有字段映射,有sql缓存,还能很好的和spring做集成,用的人真是非常非常多,尤其是互联网公司,基本上不用hibernate的都在用mybatis。

我也用过很长时间的mybatis,总的来说mybatis的优点主要体现在以下几个方面:

  • java实体和数据库字段做映射,简化jdbc操作,不用写各种各样的set get字段操作。
  • 可以利用第三方的工具,根据model对象,自动生成xml mapper配置文件,基本不用写sql
  • sql集中存储,上线后如果sql有问题,可以直接改配置,不用编译java,重启就能运行(这一点是别人提的,我不是很赞同,集中存储其实意义也不大,生产中直接改sql,然后上线运行估计没有哪个领导同意这个干的。)
  • mybatis的缓存,这个意义也不是很大,如果真到了靠这点缓存来提高性能的地步了,估计就不单单是mybatis的原因了。

当然缺点也有不少,我简单列几点:

  • mybatis里面的特殊字符,比如<>等,很容易造成错误,且mybatis的错误提示不是很具体。
  • mybatis更新比较缓慢,其实这几年都没什么更新,而且也没什么要更新的了。确实是这样,mybatis后来新加的基于注解的操作,替代xml,意义不是很大,基本很少人用,mybatis的核心在于mapper映射文件,改为注解后,映射文件不存在了。
  • 调试比较麻烦,主要是因为如果改mapper配置文件,工程需要重启,不知道现在的jrebel能不能动态加载mapper文件。

个人建议不用mapper,因为spring的JDBCTempalte出来了,mybatis有的,JDBCTemplate全都有,而且更容易调错。当然这仅是建议,下面还是得写个例子的。

pom.xml依赖


            mysql
            mysql-connector-java
            5.1.18
        
        
            org.mybatis
            mybatis
            3.4.1
        

Mybatis配置文件Configuration.xml




    
        
            
            
                
                
                
                
            
        
    
    
        
    

这里面主要是配置连接数据库的,没什么复杂的。

StaffMapper.xml映射文件

  


    

    
        insert into staff(name)
        values(#{name})
    

    
        update staff set
        name=#{name}
        where
        id=#{id}
    

    
        delete from staff where
        id=#{id}
    

这里面写了增删改查的四个例子,参数类型可以是一个Model,也可以是普通java类型,返回值是放在List容器中的实体类型

StaffDao.java接口映射

public interface StaffDao {
    public int add(Staff staff);

    public int update(Staff staff);

    public int delete(int id);

    public List list();
}

**接口映射要完全和mapper配置文件一致,如果不一致,启动会报错
**

Staff.java java实体,很简单

public class Staff {
    private int id;

    private String name;//
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

调用例子

    public static void main(String[] args) throws Exception {
        String resource = "configuration.xml";//读取Mybatis的数据库连接配置及mapper配置,
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(reader);//建立数据库连接

        SqlSession session = factory.openSession();//打开连接
        StaffDao staffDao = session.getMapper(StaffDao.class);//加载映射文件

        Staff staff = new Staff();
        staff.setName("Mybatis");
        staffDao.add(staff);//新增

        List list = staffDao.list();
        for (Staff staff2 : list) {
            System.out.println(staff2.getName());//查询
        }
        session.commit();//数据提交
        session.close();//连接关闭
    }

**这一块和hibernate基本一致,先读取配置,打开数据库连接,然后新建实体,执行新增,查询,数据库提交,关闭连接等
**

这一节讲的mybatis比较简单,当然mybatis肯定不会这么简单的,它的核心一个是实体映射,另一个是动态xml,这一块没有讲,不过也比较简单,就是在mapper配置文件里面写sql,网上教程比较多,这里就不在写了。Mybatis和Spring的整合也比较简单,这里主要说的是mybatis是个数据库持久化工具类,具体开发中用不用这个,看整个团队的技术实力,看使用经验。

源码下载

本工程详细源码

你可能感兴趣的:(6.MyBatis)