ibatis

ibatis的批处理

六月ゝ 毕业季﹏ 提交于 2020-02-04 07:37:25
(1)spring模式:尽管spring已经配置了事务,但以下代码中还是要设置事务,不然batch不会起作用;另外这里虽然设了一下事务处理,但对全局事务并不会造成影响; 注:不启用事务将建立多次连接,这表示batch没起作用,建立事务后一次连接就搞定了. Java代码 public void batchAddExamlog(List examlogList) throws SQLException{ SqlMapClient smc= this .getSqlMapClient(); try { smc.startTransaction(); smc.startBatch(); for (Iterator iter = examlogList.iterator(); iter.hasNext();) { Examlog log = (Examlog) iter.next(); smc.update( "insertExamlog" , log); } smc.executeBatch(); } catch (Exception e) { // TODO: handle exception } finally { smc.commitTransaction(); smc.endTransaction(); } } (2)直接采用回调函数设置 Java代码 public void

ibatis实现批处理

随声附和 提交于 2020-02-04 07:36:36
最近做一个小项目,用到Spring+iBatis。突然遇到一个很久远,却很实在的问题:在Spring下怎么使用iBatis的批处理实现? 大概是太久没有写Dao了,这部分真的忘得太干净了。 从4个层面分析这部分实现: iBatis的基本实现 基于事务的iBatis的基本实现 基于事务的Spring+iBatis实现 基于回调方式的Spring+iBatis实现 1.iBatis的基本实现 iBatis通过SqlMapClient提供了一组方法用于批处理实现: startBatch() 开始批处理 executeBatch() 执行批处理 代码如下: Java代码 public void create(List<Reply> replyList) { try { // 开始批处理 sqlMapClient.startBatch(); for (Reply reply: replyList) { // 插入操作 sqlMapClient.insert("Reply.create", reply); } // 执行批处理 sqlMapClient.executeBatch(); } catch (Exception e) { e.printStackTrace(); } } 这是基于iBatis的最基本实现,如果你一步一步debug,你会发现:其实,数据库已经执行了插入操作! 因此

iBatis整理——Spring环境下批处理实现

旧巷老猫 提交于 2020-02-04 07:33:37
最近做一个小项目,用到Spring+iBatis。突然遇到一个很久远,却很实在的问题:在Spring下怎么使用iBatis的批处理实现? 大概是太久没有写Dao了,这部分真的忘得太干净了。 从4个层面分析这部分实现: iBatis的基本实现 基于事务的iBatis的基本实现 基于事务的Spring+iBatis实现 基于回调方式的Spring+iBatis实现 1.iBatis的基本实现 iBatis通过SqlMapClient提供了一组方法用于批处理实现: startBatch() 开始批处理 executeBatch() 执行批处理 代码如下: Java代码 public void create(List replyList) { try { // 开始批处理 sqlMapClient.startBatch(); for (Reply reply: replyList) { // 插入操作 sqlMapClient.insert( "Reply.create" , reply); } // 执行批处理 sqlMapClient.executeBatch(); } catch (Exception e) { e.printStackTrace(); } } 这是基于iBatis的最基本实现,如果你一步一步debug,你会发现:其实,数据库已经执行了插入操作! 因此

异常记录——使用Mybatis报BindingException

做~自己de王妃 提交于 2020-01-24 00:26:39
异常信息 org.apache.ibatis.binding.BindingException nested exception is org.apache.ibatis.binding.BindingException: Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2] 场景回溯 业务场景:车辆表,需要更新指定编号车辆的设备Id(编号和设备ID均非主键),因而在对应的mapper.xml中自定义了SQL语句,结果调用对应接口时爆出异常 当然可以直接使用Mybatis-plus的EntityWrapper,这样做虽然方便,但是第一影响性能,第二造成职责划分不清(SQL的拼装属于dao层,它从来就不该在Service层完成) 原因排查 apache的ibatis将原因说的很清楚:Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2] ,没找到xml里使用占位符表示的参数(#{deviceNO}),能用的参数有deviceNo、deviceId等,很明显是发生了拼写错误 xml: Mapper接口:

IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

╄→гoц情女王★ 提交于 2020-01-21 22:10:50
原因 : 此异常的原因是由于mapper接口编译后在同一个目录下没有找到mapper映射文件而出现的。由于maven工程在默认情况下src/main/java目录下的mapper文件是不发布到target目录下的。 解决方法 :   在dao的pom.xml中添加如下内容: <!-- 如果不添加此节点mybatis的mapper.xml文件都会被漏掉。 --> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build> IDEA异常解决: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 有时候解决问题不仅仅是解决问题。-----jstarseven 最近因为开发需要,需要搭建一个ssm开发框架,采用了开发工具IDEA。 整合完了SSM开发框架之后,发布的时候出现 org.apache.ibatis

HTTP Status 500 - Request processing failed; nested exception is org.apache.ibatis.binding.BindingException

我的未来我决定 提交于 2020-01-21 22:08:18
在使用Maven工程管理工具整合SSM框架时,Mybatis使用逆向工程生成的pojo,mapper接口及映射文件,把mapper接口和映射文件放在DAO工程的同一级src/main/java目录下。正常启动服务器,浏览器执行业务Console控制台抛出异常:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。 一、异常描述: 1 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 2 cn.e3mall.mapper.TbItemMapper.selectByExample 3 at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189) 4 at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43) 5 at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58) 6 at org

SSM框架面试题及答案整理

那年仲夏 提交于 2020-01-20 21:26:03
一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架 作用:Bean工厂,用来管理Bean的生命周期和框架集成。 两大核心: ①. IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。 ②. AOP:面向切面编程 2、Spring的事务? 编程式事务管理:编程方式管理事务,极大灵活性,难维护。 声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。 3、IOC 在项目中的作用? 作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。 4、Spring的配置文件中的内容? 开启事务注解驱动 事务管理器 开启注解功能,并配置扫描包 配置数据库 配置SQL会话工厂,别名,映射文件 不用编写Dao层的实现类 5、Spring下的注解? 注册:@Controller @Service @Component 注入:@Autowired @Resource 请求地址:@RequestMapping 返回具体数据类型而非跳转:@ResponseBody 6、Spring DI 的三种方式? 构造器注入:通过构造方法初始化 <constructor-arg index="0" type=

MyBatis打印输出SQL语句

心不动则不痛 提交于 2020-01-17 00:59:40
Hibernate是可以配置 show_sql 显示 自动生成的SQL 语句,用 format_sql 可以格式化SQL 语句,但如果用 mybatis 怎么实现这个功能呢?如果你搜索看一下,基本都是通过配置日志来实现的,比如配置我们最常用的 log4j.properties 来实现。 首页我们创建一个 java 工程叫作:mybatis12,内容与之前 Mybatis+Spring 差不多,实现一个通过指定用户ID并读取其订单列表,来观察SQL的执行情况。其工程目录结构如下: log4j.properties 内容如下: # by yiibai.com log4j.rootLogger=debug,stdout,logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=C:/mybatis_show_sql.log log4j.appender

nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping

末鹿安然 提交于 2020-01-15 23:08:02
今天mybatis报了个错误 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=‘InfoId’, mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId=‘null’, jdbcTypeName=‘null’, expression=‘null’}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 with JdbcType null . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.lang.ClassCastException: java.lang.Integer cannot be cast to java

通用数据权限的设计思路

半世苍凉 提交于 2020-01-15 10:23:56
接着上个襄阳项目的需要, 目前的项目情况是,一期已经把功能权限做完了,可以对不同用户的不同权限功能做到限制,现在需要做数据的权限,不同的用户看到不同的数据。 根据目前的调研情况,有两种数据级别权限设计思路,都可以实现对人员访问的数据权限控制,从而实现不同的人员能够看到不同的数据, 例如经理能够看到其部门下所有人的数据,而单个的员工只能看到自己的数据。用户拥有的权限越大,能看到的数据就越多。 第一种是使用先在网关进行权限的判断,此用户有这个操作的权限,再进行查询,查询时根据参数进行SQL的拼接。网关鉴定是否能访问以及转发请求,对SQL的拼接和处理在各微服务自己内部进行,服务A/B/C都需要自己写需要查询的参数。如下图所示 使用此方式存在一些弊端 ,使用SQL拼接的方式不利于统一管理权限,每个项目有自己的过滤方式,拼接SQL的方式,不利于统一管理,也不方便后期可能出现的规则修改,因为已经硬编码到代码中,需要各个服务自己修改一遍。 优点很明显,足够很简单,只需要根据相应的规则调整SQL就可以了。 第二种方式,专门抽离一个权限鉴定的服务,所有到达网关的请求后,网关去调用权限鉴定服务,进行访问的URL的权限判断,如果鉴定成功,则能够访问,网关转到请求到对应的服务,否则网关直接返回,提示用户没有权限访问。数据权限的控制依然需要各个微服务硬编码到各自的项目代码中去。如下图所示