刚学ibatis,小结一下

MATLAB去雾算法实战:5种经典方法对比+1种改进方案(附完整源码) 本文详细对比了MATLAB中5种经典去雾算法(包括暗通道先验、多尺度Retinex等)的实现效果,并提出一种创新的自适应融合改进方案。通过完整的源码展示和性能对比,帮助开发者掌握图像去雾的核心技术,提升计算机视觉应用中的图像质量。特别针对去雾算法中的光晕效应问题,给出了工程实践中的优化技巧。 阅读详情
 

1. ibatis 框架通过对象和SQL 之间映射来完成持久化工作的。
2. ibatis框架的搭建

(1)所需的架包:ibatis.jar  mysql-connector-java-bin.jar
(2)配置数据源:SqlMapConfig.xml

  <?xml version="1.0" encoding="UTF-8"?>

     <!DOCTYPE sqlMapConfig
     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
     http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

    <sqlMapConfig>
        <!-- 数据库连接方面的一些配置 -->
        <settings cacheModelsEnabled="true" enhancementEnabled="true"
      lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="50"
      maxSessions="30" maxTransactions="20" useStatementNamespaces="true" />
  
      <transactionManager type="JDBC" commitRequired="false">
          <dataSource type="SIMPLE">
   <property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
          <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/ibatis" />
   <property name="JDBC.Username" value="root" />
   <property name="JDBC.Password" value="kimi19891108" />
   </dataSource>
      </transactionManager>
 
   <!-- 映射文件的配置,如果有多个映射文件一定要将userStatementNamespaces设置为true -->
   <sqlMap resource="com/perhaps_love/bean/Users.xml"/>
    </sqlMapConfig>
  
(3)配置JavaBean和SQL之间的映射:Users.xml
     说明;  1.  Users.xml最好和User,java放在同一目录,一个实体bean一个配置文件相对应。
             2. namespace是ibatis方便查找,且对于开发者来说区分不同JavaBean的dao操作。可以提高可读性:
                 sqlMapper.insert("User.insert",user);
             3.  typeAlias 相当于名字较长的类取别名。这样当配置文件的其他地方(如parameterClass)需要用这个类的时候就可以通过引用这个较短的别名来
          引用这个类。
             4.  ibatis 根据一个HashMap里面提供的动态条件进行查询的<dynamic>标签
      5.  <iterate>标签。
             5.  <selectKey>标签。
          此标签的用途是:当你插入一条数据,但你想立刻就得到插入数据的id,这时用selectKey标签,且将type属性设置为"post",可以完成。
          (1) 将数据库的id字段设置为 自动增加
   (2) 在insert SQL语句前加:
           <selectKey resultClass="Integer" keyProperty="id" type="post">
       SELECT LAST_INSERT_ID() <!--  这是针对MySQL数据库的语句 -->
    </selectKey>
          (3) type: post 或是 pre  先运行selectKeyt中的语句还是先执行insert语句。通常选取post。
          post: 先执行insert语句,后去mysql缓存中读取最后最近插入的id。这样通常取出来的是刚才插入数据的自动生成的主键。
   pre : 先执行last_insert_id()函数,由于mysql数据库的缓存id时间较短。很容易使结果为0。

 --------------------------
<?xml version="1.0" encoding="UTF-8"?>

 <!DOCTYPE sqlMap
   PUBLIC "-iabtis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="User">
 <typeAlias alias="Users" type="com.lovee.model.User" />
 <resultMap class="Users" id="UsersResult">
  <result property="id" column="id" />
  <result property="name" column="name" />
  <result property="password" column="password" />
 </resultMap>


 <!-- 插入新的user -->
 <insert id="insertUser" parameterClass="Users">

  INSERT INTO users( name,
  password ) VALUES ( #name#,
  #password# )

 </insert>
 <select id="selectUserById" parameterClass="int" resultClass="Users">
  SELECT
  id,
  name,
  password
  From users
  WHERE id=#id#
 </select>

 <select id="selectAllUsers" resultMap="UsersResult">
  SELECT
  *
  From users
 </select>
 <select id="getUsersNum" resultClass="int">
  SELECT
  count(*)
  From users
 </select>
 <select id="checkUser" parameterClass="Users" resultClass="int">
  SELECT
  count(*)
  From users
  WHERE
  name=#name#
  And
  password=#password#

 </select>
 <--
 动态查询,用于一些多条件查询。
        如将一些参数:name: 2 password:3 放入hashMap中。
 ibatis的isPropertyAvailbel 表示如果hashMap中有这个key,则取出值。否则忽略。
        ibatis提供了很多像这样的标签 如isNull等。可以好好研究一下。
 -->
 <select id="getUsersByCondition" parameterClass="java.util.HashMap"
  resultMap="UsersResult">
  SELECT
  *
  From users
  <dynamic prepend="WHERE">
   <isPropertyAvailable property="id" prepend="and">
    id=#id#
   </isPropertyAvailable>
   <isPropertyAvailable property="name" prepend="and">
    name=#name:VARCHAR#
   </isPropertyAvailable>
   <isPropertyAvailable property="password" prepend="and">
    password=#password:VARCHAR#
   </isPropertyAvailable>
  </dynamic>
 </select>
        <!--
 dynamic的是各类的条件是and即都符合,那么这里的iterate是集合中一个条件符合就好。
 -->
 <select id="batchUsersByIds" parameterClass="java.util.HashMap"
  resultMap="UsersResult">
  SELECT *
  From users
  WHERE ID in
  <iterate property="ids" open="(" close=")" conjunction=",">
   #ids[]#
  </iterate>
 </select>
</sqlMap>

(4)若项目不用spring等容器框架,新建一个IbatisUtil类,用来辅助Ibatis的一些配置文件的读取。
     
      说明:1. SqlMapConfig.xml配置文件放在src目录下,不然会加载不到配置文件
 
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class IbatisUtil {

 public static SqlMapClient getSqlMapclient()
 {
  try{
   //读取配置文件
   Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
   //获取SqlMapClient
   SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
   return sqlMapper;
  }catch(Exception e){
   
   System.out.println("加载sqlmap错误:");
   e.printStackTrace();
   return null;
  }
 }
}

(5)dao层调用:
package ibatis.dao;
import java.sql.SQLException;
import ibatis.bean.User;
import ibatis.utils.IbatisUtil;

public class UserDao {
 
 //新增一个用户
 public void insertUser(User user) throws SQLException
 {
  IbatisUtil.getSqlMapclient().insert("User.insertUser", user);
 }
 
}

(6)返回结果:
   1:insert返回的结果是插入值的id值,但是前提是插入表的id是auto_increment或是Sequence的。
      所以insert要注意的是  !并非任何表的insert操作都会返回主键----这是一个陷阱!。
   2:update delete返回的是影响的行数。

 

3. ibatis 和Spring的整合

(1)读取数据源就归spring管理了。
spring数据源配置以及spring一些将要用到的一些的依赖注入:application-datasource.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
   "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <!-- 建立数据源 -->
 <bean id="dataSource"
  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
  <property name="url" value="jdbc:mysql://localhost:3306/DocumentFlowSystemWithJBPM"></property>
  <property name="username" value="root"></property>
  <property name="password" value="kimi19891108"></property>
 </bean>
        <!--读取ibatis的配置文件,主要是读取JavaBean的xml文件>
 <!--sqlMapClient依赖datasource-->
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="WEB-INF/SqlMapConfig.xml" />
  <property name="dataSource" ref="dataSource" />
 </bean>
        <!--sqlMapClientTemplate依赖sqlMapClient -->
 <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
  <property name="sqlMapClient" ref="sqlMapClient" />
 </bean>

</beans>
(2)dao层service层的依赖注入略~
(3)dao层,service层代码

dao层:
package com.perhaps_love.dao;

import java.util.List;
import java.util.Map;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.perhaps_love.bean.User;

public class UserForeDaoImpl extends SqlMapClientDaoSupport implements UserForeDao {

 @SuppressWarnings("unchecked")
 public List<User> batchUsersByCodition(Map<String, String> map) {
  //正因为前面配置中将SqlMapClient注入了SqlMapCLientTemplate,所以可以调用。
  return getSqlMapClientTemplate().queryForList("User.batchUsersByCondition", map);
 }

}

service层:
package com.perhaps_love.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.perhaps_love.bean.User;
import com.perhaps_love.dao.UserForeDao;

public class UserForeServiceImpl implements UserForeService {

 private UserForeDao userForeDao;
 private static Logger log = Logger.getLogger(UserForeServiceImpl.class);

 public User login(String work_no, String password) {

  if (null == work_no || null == password) {
   log.error("Parameter error");
   return null;
  }
  // 封装参数
  Map<String, String> map = new HashMap<String, String>();
  map.put("work_no", work_no);
  map.put("password", password);

  /**
   * 验证用户,若正确返回一个size为1的list 根据list的size返回
   */
  List<User> list = userForeDao.batchUsersByCodition(map);
  if (1 == list.size()) {
   return list.get(0);
  } else {
   return null;
  }

 }

 public UserForeDao getUserForeDao() {
  return userForeDao;
 }

 public void setUserForeDao(UserForeDao userForeDao) {
  this.userForeDao = userForeDao;
 }

}

 

基于Simulink的占空比调制DTC降低转矩脉动 修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。 阅读详情

相关推荐

Zynq实战:如何用AXI4-Stream To Video Out实现HDMI视频输出(附时序调试技巧)

本文详细介绍了基于Zynq平台使用AXI4-Stream To Video Out IP核实现HDMI视频输出的工程化解决方案。内容涵盖系统架构设计、AXI4-Stream接口优化、异步FIFO配置、时序同步调试技巧等核心环节,特别针对1080p60视频输出提供具体参数配置和性能优化建议,帮助开发者快速构建稳定的视频处理系统。

sql99的博客 463

ibatis的dynamicSQL中,关于prepend的使用

ibatis的文档中,关于动态SQL的举例如下: [code="java"] select * from ACCOUNT ACC_ID = #id# ACC_LAST_NAME = #lastName# order by ACC_LAST_NAME [/code] 当需要使用根据传...

一只想跳舞的老鼠 1860

基于单片机红外线遥控Proteus仿真电路发射接收

*单片机设计介绍,基于单片机红外线遥控Proteus仿真电路发射接收。

2201_75940997的博客 3943

Ibatis <dynamic> 标签 update 的相关问题总结

1.为了使用&lt;dynamic &gt;中 &lt;isNotNull&gt;和其他地方出现不必要的bug  我们在定义map 或者 TO时 将所有的类型都定义为原生态的类型,比如定义INTEGER。2.在写语句时很容易引入很难察觉的错误 比如“ : ” ,和“ : ” .这两个字符在.java 文件里面会区别非常明显,但是在xml中,肉眼是看不出来的。所以尽量统一,将标点用半角英文。3.所有...

萧曳丶 1477

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1899

STM32F103内部晶振配置实战:从代码修改到频率验证(附工程模板)

本文详细介绍了STM32F103内部晶振(HSI)的配置实战,从代码修改到频率验证的全流程,并附赠可直接使用的工程模板。通过对比HSI与外部晶振的优缺点,帮助开发者在成本敏感和空间受限的应用中实现稳定时钟配置,同时提供频率校准和常见问题排查方法。

weixin_29171087的博客 323

ibatis 动态语句拼写心得

ibatis 动态语句拼写心得 文章分类:Java编程  项目中用到了ibatis。看了很多篇在XML 里动态编写sql 的文章!  我突然有了疑问,在一个statement 中可以包含多个 dynamic 子标签么?  于是 试验了一把,嘿嘿 果然能行~~ dynamic 标签的作用是  可以自动添加或者移除 在SQL语句中 多余的表单符号 不用再担心 少了逗号...

mowengaoboa的博客 247

番外篇第3集:多模态运维!让 AI 看懂 Grafana 图表并自动生成巡检报告

文章摘要 《多模态运维:让AI看懂Grafana图表并自动生成巡检报告》介绍了如何利用Qwen2.5-VL多模态模型解决传统运维巡检的痛点。文章指出人工查看Grafana监控图表存在效率低、易漏判、报告编写耗时等问题,提出通过Grafana Render API和多模态AI技术实现自动化巡检方案。 主要内容包括: 环境准备:配置Qwen2.5-VL多模态模型和Grafana访问权限 测试验证:展示模型准确识别图表类型、指标数值和异常趋势的能力 技术实现:封装Grafana截图API客户端,支持面板截图和数据

qq_2937655951的博客 109

ibatis 3.0 Dynamic Sql 设计解析(并与2.x的差异)

前段时间ibatis3.0发布出来了,迫不及待,将其源码下载拜读。相对ibatis 2.x来说,3.0已是完全改变。具体我就不在这细说,论坛中有一个帖子介绍了ibatis 3.0的新特征及使用。       由于其他模块的源码我还未细读,在这篇中,先来讨论Dynamic Sql在ibatis 3.0中的实现并比较2.x对应模块的设计。   写在前头的话:       其实如从设计模式应用角...

蝈蝈的技术博客 250

Qt 国产嵌入式操作系统实现文字转语音功能(ekho库)

Qt 国产嵌入式操作系统实现文字转语音功能(TTS)_tts驱动 转文字-优快云博客在继上篇文章之后,甲方粑粑不满意使用eSpeak发出的声音太难听了,这就不得不找个替代品,声音稍微好听了一些。使用ekho开源库。Ekho(余音)是一个免费、开源的中文语音合成软件。它目前支持粤语、普通话(国语)、诏安客语、藏语、雅言(中国古代通用语)和韩语(试验中),英文则通过Festival间接实现。Ekho支持Linux、Windows和Android平台。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 2754

【存储原理】IO超时处理 块层block-scsi层之间

【存储原理】IO超时处理 块层block-scsi层之间

sinat_37817094的博客 1024

[ibatis]动态映射

在复杂查询过程中,我们常常需要根据用户的选择决定查询条件,这里发生变化的并不只是SQL 中的参数,包括Select 语句中所包括的字段和限定条件,都可能发生变化。典型情况,如在一个复杂的组合查询页面,我们必须根据用户的选择和输入决定查询的条件组合。一个典型的页面如下:对于这个组合查询页面,根据用户选择填写的内容,我们应为其生成不同的查询语句。如用户没有填写任何信息即提交查询请求,我们应

blueilove2003的专栏 1597

OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战

【代码】OpenHarmony + AI:深度解析 Whisper.cpp 智慧语音系统级移植与 NAPI 封装实战。

m0_67505153的博客 188

iBatis小结

1、isNull, isNotNull与isEmpty, isNotEmpty区别 在iBATIS中isNull用于判断参数是否为Null,isNotNull相反。 isEmpty判断参数是否为Null或者空,满足其中一个条件则其true,isNotEmpty相反,当参数既不为Null也不为空是其为true isNull:  Checks if a property is null. is

caihaijiang的专栏 7627

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ibatis转成Mybatis问题小结

在数据层ibatis转换成mybatis的时候,遇到了点问题。 区别1: ibatis的结构是Service-&gt;ServiceImpl-&gt;Dao-&gt;DaoImpl-&gt;Domain(实体类)-&gt;xml(里面是对应的SQL) mybatis的结构是Service-&gt;Mapper-&gt;Mapper.xml文件,其中Mapper文件需要在application...

yuyuyumeimeimei的博客 1619

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

iBATIS学习小结

一、iBATIS介绍 1.iBATIS的思想: iBATIS是查询映射工具,而不是O/RM工具,适用于持久层。 方案 相同的优点 解决的问题 存储过程 iBATIS对SQL进行了封装和外部化,使SQL从应用程序中分离出来,iBATIS支持对存储过程的调用 业务逻辑从数据库中分离出来,应用程序更容易部署与测试,也具有更好的可移植性。...

iteye_9308的博客 199

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ibatis小结

sqlMap配置文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0/...

chuifuhuo6864的博客 130

Ibatis Iterator用法小结

1、要在ibatis里面使用命名空间需要在sqlMapConfig.xml中增加如下设置          &lt;settings useStatementNamespaces="true" /&gt; 2、写JavaBean类时  建议把属性全部写成引用类型  对于基本类型写成它对应的包装类型       这样可以避免数据库中对应的字段可以为空时   查询结果在映射时报错 3、 &lt...

f04062115的专栏 718

iBATIS学习小结1——初步了解iBATIS

    刚开始实习,还未具体参与某个项目,所以抽出点时间来学习下这个即将用到的工具——Eclipse,当然主要还是iBATIS,因为具体设计还不到火候,只能做点数据导入数据库并完成到具体类的映射这种稍微点拨下就能学会的事儿。但是我不满足于借由已经配置好的Eclipse写些无趣的代码,我希望能更深入的了解iBATIS。    学习心得是在平时学习中一点一滴积累的,因为还是小白,可能有相当多的错误,希...

红枫林 184

ibatis 初学小结

ibatis学习 ibatis与hibernate都是持久层的额技术框架,这里看看ibatis的配置:作为自己以后的参考: ibstis的配置主要由两种文件, (一)有关项目的总体配置,如连接的数据源,连接池,缓存等的配置,也即sqlmapconfig.xml文件的配置。 (二)sqlmap.xml文件的配置,也即对象与表的操作映射的配置。 下面分两个部分进行记录 第一

花落尽相随 663

ibatis传入数组或List类型参数小结

ibatis传入数组或List类型参数小结

qq_44925357的博客 634

ibatis 小结

IBATIS的操作核心对象是SqlSession,它提供了强大的增、删、改、查功能,我们对对象(数据库)的所有操作都是基于SqlSession来完成的。SqlSession执行哪些具体操作需要我们来为它指定mapper,这个mapper类似于我们在SQLDeveloper中执行SQL,只不过现在是把SQL配置在Mapper.xml文件中,并且这个SQL具体自动校验、封装的功能。每一个操...

s306587279的专栏 169

ibatis 搭配oracle做批量插入小结

比如,经常遇到的情况是,要把表A中的符合条件的数据全部取出来,形成一个结果集,  然后针对结果集中的每一条数据,循环插入到数据表B中去,除了传统的在JAVA代码中  FOR循环来做外,在ibatis 2中,还增加了iterate标签,可以用来生成循环要执行的语句,介绍如下:      property="" /*可选,            从传入的参数集合中使用属性名去

岁寒松柏 9543

ibatis 使用小结

一、在ibatis的配置文件中,#,$等表示的意义是不同的。 举例来说明他们的应用: DAO层代码赋值为:username=”abc” sortField=”ord1” ascending=”ASC” &lt;select id="getDestroyIdListLimit" parameterClass="java.util.Map" resultClass="String"&gt;  ...

marco1983的专栏 252
上一篇: Windows7 Eclipse未响应问题
下一篇: 关于Eclipse javadoc的问题
kimi_lov_ing
博客等级 码龄15年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值