
*** 作。具体的步骤如下:
获取 MyBatis 中的 MappedStatement 对象。可以通过 SqlSession 的 getConfiguration() 方法获取 Configuration 对象,然后再通过 Configuration 对象的 getMappedStatement() 方法获取 MappedStatement 对象。
从 MappedStatement 对象中获取 BoundSql 对象,即 SQL 语句绑定的参数对象。
从 BoundSql 对象中获取 SQL 语句字符串。可以通过调用 getSql() 方法获取 SQL 语句字符串。
对 SQL 语句进行相应的 *** 作。例如,可以对 SQL 语句进行修改、输出等 *** 作。
Java 通过反射获取 MyBatis 中的 SQL 语句的代码示例:
SqlSession sqlSession = sqlSessionFactoryopenSession();
try {
// 获取 MappedStatement 对象
MappedStatement mappedStatement = sqlSessiongetConfiguration()getMappedStatement("comexamplemapperselectUser");
// 获取 BoundSql 对象
BoundSql boundSql = mappedStatementgetBoundSql(paramObject);
// 获取 SQL 语句字符串
String sql = boundSqlgetSql();
// 对 SQL 语句进行相应的 *** 作
//
} finally {
sqlSessionclose();
}
需要注意的是,在使用反射获取 SQL 语句时,要注意保护用户隐私和安全,以免发生 SQL 注入等问题。
1、定义
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
2、使用原因
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
3、总体流程
(1)加载配置并初始化
触发条件:加载配置文件
处理过程:将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
(2)接收调用请求
触发条件:调用Mybatis提供的API
传入参数:为SQL的ID和传入参数对象
处理过程:将请求传递给下层的请求处理层进行处理。
(3)处理 *** 作请求
触发条件:API接口层传递请求过来
传入参数:为SQL的ID和传入参数对象
处理过程:
(A)根据SQL的ID查找对应的MappedStatement对象。
(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
(E)释放连接资源。
(4)返回处理结果将最终的处理结果返回。
你是否想达到下列目的:
budgetType 不为null,更新 BUDGET_TYPE_ 字段;
budgetType 为努力时,不更新 BUDGET_TYPE_ 字段;
如果是可以如下做:
<update id="update">UPDATE PRO_BUDGET_F
SET
<if test="budgetType != null"> BUDGET_TYPE_ = #{budgetType}</if>
<if test="budgetType == null"> BUDGET_TYPE_ = BUDGET_TYPE_</if>
WHERE ID_ = #{id}
</update>
即改变下思路,当budgetType 为null,不更新值(这里BUDGET_TYPE_ = BUDGET_TYPE_
只是把值重新设置一次)
注:上面的方法只是针对你Mybatis部分做出的修改,如果budgetType 为null,将执行一次无用的SQL语句,浪费系统资源,最好的办法是,到调用Mybatis时(一般在DAO)判断budgetType是否为空,为空则不执行数据库 *** 作;
Mybatis只执行SQL *** 作,Dao(或者Service)附带业务检查,判断是否需要执行
一、mybatis的工作原理:
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。
推荐在这个配置中使用类路径资源,但可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
二、使用mybatis的原因:因为mybatis具有许多的优点,具体如下:
1、简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
2、灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足 *** 作数据库的所有需求。
3、解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
4、提供映射标签,支持对象与数据库的orm字段关系映射。
5、提供对象关系映射标签,支持对象关系组建维护。
6、提供xml标签,支持编写动态sql。
扩展资料:
mybatis的功能构架:
1、API接口层:提供给外部使用的接口API,开发人员通过这些本地API来 *** 纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
2、数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库 *** 作。
3、基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
参考资料来源:百度百科-MyBatis
参考资料来源:百度百科-MyBatis从入门到精通
SqlSessionFactoryBuilder 的实例化分两步。第一步 解析配置文件 得到configuration对象,第二步实例化DefaultSqlSessionFactory记录configuration。
sqlSessionFactoryopenSession()这一步就厉害了,完成了事务管理对象实例化、执行器实例化、执行器代理(拦截器链)。到这一步为止完成了defaultSqlSessionFactory会话创建。
sqlSessiongetMapper()是通过从configuration的mapperRegistry中获取mapperclass的MapperProxyFactory对象,再用MapperProxyFactory对象生产出一个MapperProxy的代理对象。到这里完成了对mapper类代理对象的创建,后续调用mapper类的方法时将会由mapperProxy处理。
userMapperqueryUser()真正做事的时候到了。由上文可知mapper类的方法被调用时将会由mapperProxy代替处理,所以第一站就是mapperProxy的invoke()
由下图可知,缓存的位置位于CachingExecutor中的localCache,
而Executor是在openSession时创建,由此可知一级缓存是sqlSesssion级别的。
cacheKey的组成:ms, parameter, rowBounds, boundSql
由下图可知,二级缓存与MappedStatement有关,在MappedStatement中共享一个Cache对象,而MappedStatement位于configuration,所以二级缓存可以跨sqlSession。
解释器模式: 初始化过程中构建出抽象语法树,请求处理时根据参数对象解释语法树,生成sql语句。
工厂模式: 为动态标签的处理方式创建工厂类(SqlTagHandlerFactory),根据标签名称获取对应的处理方式。
策略模式: 将动态标签处理方式抽象为接口,针对不同标签有相应的实现类。解释抽象语法树时,定义统一的解释流程,再调用标签对应的处理方式完成解释中的各个子环节
以上就是关于java通过反射拿到mybatis中的sql语句并 *** 作怎么用什么时候用全部的内容,包括:java通过反射拿到mybatis中的sql语句并 *** 作怎么用什么时候用、什么是mybatis 为什么要使用my batis、Mybatis,对象中某属性为null时,不要更新数据库中对应的字段,该怎么弄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)