本文是对慕课网上"搞定SSM开发"路径的系列课程的总结,详细的项目文档和课程总结放在github上了.点击查看java
//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
ORM框架是一种数据操做的框架,常见的好比JDBC,Hibernate,固然,Mybatis也是其中的一种.
相比于JDBC,Mybatis的优点在于能将Sql集中配置;而且能和Spring集成;将connection交给Spring托管,不须要开发者本身操做;同时也能方便进行AOP的开发.
而和hibernate对比,Mybatis则比较容易学,没有hibernate那么高的门槛.git
//经过配置文件获取数据库链接信息 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;
经过namespace的包名和相应接口的包名与类名进行匹配,能够经过调用接口的方法直接使用sql的逻辑.
mybatis实现这一特性的方法是动态代理.github
根据每页的条数,和须要查询的页数能够加载整个页面的数据;
简单逻辑是从数据库拿到总条数,而后计算出总页数,而后经过数据查询出第n到m条数据,使用limit关键字(mysql中)便可以拿到须要查询的数据.sql
1:实现mybatis的Inteceptor接口
在实现类上使用注解:Intercepts来定义须要拦截哪一种类型的方法.
实现plugin方法和intercept方法;数据库
2:在plugin中根据注解和传进来的对象肯定是否拦截该对象.编程
3:在intercept方法中肯定是否拦截对应方法,并拿到其中参数,包括sql,增长本身的逻辑.session
4:在intercept方法中,使用invocaiton.proceed来调用原来的逻辑.mybatis
经过拦截器实现分页是比较常见的场景.app