一 : 使用jdbc操作数据库进行开发时会有些不方便的地方,具体如下


1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能.解决方案:如果使用数据库链接池可解决此问题。


2、 Sql语句在代码中硬编码,造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。解决方案:mybatis的sql语句写在mapper.xml文件中


3、 使用preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。解决方案: mybatis在mapper.xml文件的使用parameterType 传递参数,可以是基本数据类型,POJO类型,hashmap类型等,解决传递参数的问题


4、 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成pojo对象解析比较方便。解决方案:mybatis中在mapper.xml文件中使用resultType封装查询结果,可以为POJO类型等,解决对结果集解析的问题


二 : 引入Mybatis

Mybatis使用注意事项_1

1、  mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。加载完成后将编译好的sql语句存储到SqlsessionFactorySqlSession中。


2、  通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂


3、  由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。


4、  mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

publicinterface Executor {

    // ResultHandler接口

   ResultHandler NO_RESULT_HANDLER =null;

     //修改

   int update(MappedStatement ms, Object parameter)throws SQLException;

    //查询返回list集合

      <E> List<E> query(MappedStatementms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler,CacheKey cacheKey, BoundSql boundSql)throws SQLException;      

      <E> List<E> query(MappedStatementms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler)throws SQLException;

   

      List<BatchResult> flushStatements()throws SQLException;

 

      void commit(boolean required)throws SQLException;


      void rollback(boolean required)throws SQLException;

    

      CacheKey createCacheKey(MappedStatement ms,Object parameterObject, RowBounds rowBounds, BoundSql boundSql);


      boolean isCached(MappedStatement ms, CacheKey key);

 

       void clearLocalCache();


       void deferLoad(MappedStatement ms, MetaObject resultObject,     String property, CacheKey key,Class<?> targetType);


      Transaction getTransaction();


      void close(boolean forceRollback);


       boolean isClosed();


       void setExecutorWrapper(Executorexecutor);

 

5、   MappedStatement也是mybatis一个底层封装对象,封装了mybatis中数据的实体类,就是一个POJO对象,它包装了mybatis配置信息及sql映射信息等。 mapper.xml文件中一个sql对应一个Mapped Statement对象,sqlid即是Mapped statementid

 

6、   Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数.

如下:MappedStatment就是封装了mybatis数据的实体类

publicfinalclass MappedStatement {

          private Stringresource;

          private Configurationconfiguration;

          private Stringid;

          private IntegerfetchSize;

          private Integertimeout;

          private StatementTypestatementType;

          private ResultSetTyperesultSetType;

          private SqlSourcesqlSource;

          private Cachecache;

          private ParameterMapparameterMap;

          private List<ResultMap>resultMaps;

          privatebooleanflushCacheRequired;

          privatebooleanuseCache;

          privatebooleanresultOrdered;

          private SqlCommandTypesqlCommandType;

          private KeyGeneratorkeyGenerator;

          private String[]keyProperties;

          private String[]keyColumns;

          privatebooleanhasNestedResultMaps;

          private StringdatabaseId;

          private LogstatementLog;

          private LanguageDriverlang;

          private String[]resultSets;



相关文章: