mybatis 使用小总结

mybatis 使用小总结

动态更改表名

不能直接用#{value},要使用${value},同时在mapper中方法的参数前加上@Param("value"),注意mapper中指定的名称要和xml文件中一致。

#{}与${}的区别

个人理解,#就是占位符,而$是字符串拼接。

就拿上面的改表名来说,你用#{value}的话会替换成'value',而${value}会替换成valve,注意,不是没区别,后者没带引号,所以可以作为表名。

如果你想要传多个字符串,而又不想用map,我的解决方案是方法参数列表用@Param("key")String key,取值的时候用${key},注意如果key是字符串,最好手动加引号'${key}'

执行多个sql语句

使用mybatis连postgresql,是可以直接运行多个sql语句的,如在一个<delete></delete>标签中删除多个表,中间用分号隔开就行了。

后来在mysql里面跑多个sql,直接就挂了。解决方式也很简单,在mysql连接url后面加一个allowMultiQueries=true

其实数据库连接url后面有很多好东西可以加,如zeroDateTimeBehavior=convertToNull,这样如果时间类型为空,就不会抛什么null值无法转换成Date类型异常。

多个参数

例如,想要传两个字符串类型的为参数,在mapper.xml中就要使用#{arg0}#{arg1}获取,当然,如果你的版本比较老,可以用#{0}#{1},其实,有时候会告知你要用#{param0}#{param1}。你要问我具体用什么,我会告诉你,我也不知道,看报错提示咯。

友情提示,如果你传递的多个参数类型不同,这时候不必写parameterType,否则你在xml指定String,传递Integer时会抛类型转换异常。

批量插入

mapper.xml

<insert id="insertBatch" parameterType="java.util.List">
        insert into track (latitude, longitude,time) values
        <foreach collection="list" separator="," item="track">
            (#{track.latitude,jdbcType=DOUBLE}, 
            #{track.longitude,jdbcType=DOUBLE}, 
            #{track.time,jdbcType=TIMESTAMP})
        </foreach>
</insert>

mapper interface

int insertBatch(@Param("list") List<Track> list);

属性值为空时,不插入对应的字段
mapper.xml

<insert id="insertBatch" parameterType="java.util.List">
    <foreach collection="list" item="track" separator=";">
        insert into track 
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="#{track.latitude} !=null">latitude,</if>
            <if test="#{track.longitude} !=null">longitude,</if>
            <if test="#{track.time} !=null">time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="#{device.operationType} !=null">#{device.operationType},</if>
                <if test="#{track.latitude} !=null">#{track.latitude},</if>
            <if test="#{track.longitude} !=null">#{track.longitude},</if>
            <if test="#{track.time} !=null">#{track.time},</if>
        </trim>
    </foreach>
</insert>

mapper interface

int insertBatch(List<Track> list);

可以看到,上面两种是采用了不同的方式,一种是指定多个值,一种是执行多次插入,都可以实现给一张表插入多条记录的操作。

批量修改

mapper.xml

<update id="updateBoundsByLayers" parameterType="java.util.List">
    <foreach collection="list" separator=";" item="map">
        update track set time = #{map.time} where id= #{map.id}
    </foreach>
</update>

mapper interface

void updateTrackBatch(List<Map<String, String>> list);

返回结果

  1. 批量插入:返回插入记录的个数
  2. 批量修改:返回修改记录的个数
  3. 删除:返回删除记录的个数
  4. 多条sql:返回最先执行的sql作用的结果数,也就是以最上面那一条为准
  5. 插入返回主键:使用<insert useGeneratedKeys="true" keyProperty="id" keyColumn="id"keyColumn可以不要,mybatis会自动取到主键,然后将值赋给你插入时使用的对象,批量插入时也适用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring整合MyBatis的原理可以总结为以下几步: 1. 配置数据源:在Spring配置文件中配置数据源,可以使用Spring自带的数据源或第三方数据源。 2. 配置SqlSessionFactory:SqlSessionFactory是MyBatis的核心配置对象,可以通过Spring的MyBatis-Spring模块来配置SqlSessionFactory。 3. 配置MapperScannerConfigurer:MapperScannerConfigurer是MyBatis-Spring模块提供的一个扫描器,用于自动扫描Mapper接口并注册到Spring容器中。 4. 配置事务管理器:Spring提供了多种事务管理器,可以根据实际情况来选择。 总结一下,Spring整合MyBatis的过程就是将MyBatis的核心配置对象SqlSessionFactory和Mapper接口通过Spring的容器管理起来,并且使用Spring提供的事务管理器来管理事务。 具体的步骤如下: 1. 在Spring配置文件中配置数据源,可以使用Spring自带的数据源或第三方数据源。例如: ``` <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="123456" /> </bean> ``` 2. 配置SqlSessionFactory,可以使用MyBatis-Spring模块提供的SqlSessionFactoryBean来配置。例如: ``` <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.example.model" /> <property name="mapperLocations" value="classpath*:com/example/mapper/*.xml" /> </bean> ``` 其中,typeAliasesPackage用于指定实体类所在的包,mapperLocations用于指定Mapper XML文件所在的路径。 3. 配置MapperScannerConfigurer,可以使用MyBatis-Spring模块提供的MapperScannerConfigurer来配置。例如: ``` <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper" /> </bean> ``` 其中,basePackage用于指定Mapper接口所在的包。 4. 配置事务管理器,可以使用Spring提供的事务管理器。例如: ``` <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> ``` 最后,在Service层的方法上添加@Transactional注解即可实现事务管理。 综上所述,Spring整合MyBatis的过程比较简单,只需要配置几个关键的对象即可。同时,Spring提供了很多方便的注解和工具类,可以更加方便地使用MyBatis

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值