Mybatis篇总结

本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看java

JDBC写法

//sql:
String sql = "select * from user";
//加载驱动:
Class.forName("com.mysql.jdbc.Driver");
//根据参数建立链接
Connection conn = DriverManager.getConnection(url,username,password);
//建立PreparedStatement
PreparedStatement statement = conn.prepareStatement(sql);
//执行sql,并使用resultSet接收结果
ResultSet rs =  statement.executeQuery();
//将rs里的全部值取出来
try{
while(rs.next()){
    String ... = rs.getString(1)/rs.getString("userName");       //从结果中根据列名或者列的序号取值.
}
}catch(SqlException ex){

    }finally{
        //必需要手动释放链接
        conn.close();
    }
//

以上便是一个简单的jdbc查询数据库的写法.
有什么问题呢?
第一是sql的写法,若是sql过长,参数过多,拼接起来很麻烦,不直观,而且sql很难查看;
第二是Connectione的建立和销毁须要手动控制,而这些应该是业务无关代码.mysql

Mybatis主要概念

ORM框架是一种数据操做的框架,常见的好比JDBC,Hibernate,固然,Mybatis也是其中的一种.
相比于JDBC,Mybatis的优点在于能将Sql集中配置;而且能和Spring集成;将connection交给Spring托管,不须要开发者本身操做;同时也能方便进行AOP的开发.
而和hibernate对比,Mybatis则比较容易学,没有hibernate那么高的门槛.git

如何配置Mybatis

1.配置Mybatis的配置文件Configuration.xml
 
2. 读取xml,建立sqlsession
//经过配置文件获取数据库链接信息
        Reader reader = Resources.getResourceAsReader("com/chentao/MicroMessage/config/mybatis-config.xml");
        
        //经过配置信息构建一个SqlSessionFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        
        //经过sqlsessionfactory打开session
        SqlSession sqlSession = sessionFactory.openSession();
        
        return sqlSession;
3.配置与Sql相关的XML文件
3.1 定义namespace       --namespace定义了xml文件的域,和mybatis接口相匹配,也是为了标志在xml文件中定义的属性等
3.2 定义resultMap,用来简单接受返回对象(固然也能够不用定义,返回时)mybatis使用约定来返回对象)
3.3 在xml中定义sql,经过id对应方法名称,在java中调用
4.在Configuration.xml中将第三步配置的文件经过mapper属性引入文内存中读取
5.在Java中使用接口来调用sql写就的业务
4.关于代码中参数的使用,能够传入一个map,能够传入对象,也能够传入多个对象,在(须要接口中经过注解定义在sql中使用的参数名)
5.关于一对多配置的使用:
5.1 在resultMap中引入其余的resultMap
5.2 在sql中使用join这样的方式能够查出一对多的对象,
5.3 若是在返回结果中字段名称相同,则须要使用As指定别名,并在resultMap的属性中体现出来.

概念深刻了解(增强版)

接口式编程

经过namespace的包名和相应接口的包名与类名进行匹配,能够经过调用接口的方法直接使用sql的逻辑.
mybatis实现这一特性的方法是动态代理.github

分页:

根据每页的条数,和须要查询的页数能够加载整个页面的数据;
简单逻辑是从数据库拿到总条数,而后计算出总页数,而后经过数据查询出第n到m条数据,使用limit关键字(mysql中)便可以拿到须要查询的数据.sql

Mybatis拦截器

实现:

1:实现mybatis的Inteceptor接口
在实现类上使用注解:Intercepts来定义须要拦截哪一种类型的方法.
实现plugin方法和intercept方法;数据库

2:在plugin中根据注解和传进来的对象肯定是否拦截该对象.编程

3:在intercept方法中肯定是否拦截对应方法,并拿到其中参数,包括sql,增长本身的逻辑.session

4:在intercept方法中,使用invocaiton.proceed来调用原来的逻辑.mybatis

经过拦截器实现分页是比较常见的场景.app

相关文章
相关标签/搜索