掌握新版MyBatis3.x对MySQL的查询和新增

文章讲述了如何通过添加SLF4J和Log4j的Maven依赖,在log4j.properties配置中设置日志级别,来实现MyBatisSQL的打印。此外,还介绍了在MyBatis中进行多个参数模糊查询的方法,使用@Param别名以及驼峰字段与数据库字段的映射。同时,文章详细说明了如何处理插入语句获取自增主键和使用foreach进行批量插入的操作。
摘要由CSDN通过智能技术生成

调试必备-如何控制台打印Sql

内置的⽇志⼯⼚提供日志功能, 使⽤log4j配置打印sql

添加Maven依赖

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

log4j.properties文件

log4j.rootLogger=ERROR, stdout

log4j.logger.net.xdclass=DEBUG
#trace内容会打印更多
#log4j.logger.net.xdclass=TRACE
#细化到打印某个mapper
#log4j.logger.net.xdclass.online_class.dao.VideoMapper.selectById=TRACE

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

多个参数的模糊查询

参数别名

单个参数,可以使用别名,也可以使用默认的名称(随意,不同名也无所谓)
多个参数最好取别名,方便识别与使用

1、(java接口)参数前使用@Param("[别名]")完成取别名

/**
 * 根据评分和标题模糊查询
 * @param point
 * @param title
 * @return
 */
List<Video> selectByPointAndTitleLike(@Param("point") double point, @Param("title") String title);

2、(xml文件)使用别名

<select id="selectByPointAndTitleLike"  resultType="net.xdclass.online_class.domain.Video">
    select * from video where point=#{point,jdbcType=DOUBLE} and title like concat('%', #{title,jdbcType=VARCHAR},'%')
</select>

驼峰字段映射java对象和数据库字段

数据库字段是下划线,java属性是驼峰时,使用mybatis-config.xml配置

<!--下划线自动映射驼峰字段-->
<settings>
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

入参 parameterType和取值类型

parameterType参数类型:
1、基本类型
2、Java集合List或者Map
3、Java⾃定义对象

取参数值,具体某个字段的类型,从java类型映射到数据库类型
如:#{title, jdbcType=VARCHAR}

注意:
1、多数情况不加是正常使⽤,但是如果出现报错:无效的列类型,则是缺少jdbcType
2、只有当字段可为NULL时才需要jdbcType属性

常见数据库类型和java列席对比:
在这里插入图片描述
在这里插入图片描述

新增语句

新增⼀条视频记录

 <insert id="add" parameterType="net.xdclass.online_class.domain.Video">
 INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`, `create_time`, `point`)
 VALUES
 (
 #{title,jdbcType=VARCHAR},#{summary,jdbcType=VARCHAR},
 #{coverImg,jdbcType=VARCHAR},#{price,jdbcType=INTEGER},
 #{createTime,jdbcType=TIMESTAMP},#{point,jdbcType=DOUBLE}
 );
</insert>

获得插入的自增主键

<insert id="add" parameterType="net.xdclass.online_class.domain.Video"
useGeneratedKeys="true" keyProperty="id" keyColumn="id" >

利用自增的主键(useGeneratedKeys="true"),将数据库的自增主键(keyColumn="id")映射为实体类的主键(keyProperty="id")

foreach批量插入语法

foreach:⽤于循环拼接的内置标签,常用于批量新增、in查询等

包含以下属性:
1、collection:必填,值为要迭代循环的集合类型,情况有多种
⼊参是List类型的时候,collection属性值为list
⼊参是Map类型的时候,collection 属性值为map的key值
2、item:每⼀个元素进⾏迭代时的别名
3、index:索引的属性名,在集合数组情况下值为当前索引值,当迭代对象是map时,这个值是map的key
4、open:整个循环内容的开头字符串
5、close:整个循环内容的结尾字符串
6、separator: 每次循环的分隔符

<!--批量插入-->
<insert id="addBatch" parameterType="net.xdclass.online_class.domain.Video" 
useGeneratedKeys="true" keyProperty="id" keyColumn="id" >

INSERT INTO `video` ( `title`, `summary`, `cover_img`, `price`, `create_time`, `point`)
        VALUES
        <foreach collection="list" item="video" separator=",">
        (
        #{video.title,jdbcType=VARCHAR},#{video.summary,jdbcType=VARCHAR},
        #{video.coverImg,jdbcType=VARCHAR},#{video.price,jdbcType=INTEGER},
        #{video.createTime,jdbcType=TIMESTAMP},#{video.point,jdbcType=DOUBLE}
        )
        </foreach>
        
</insert>

如果批量插⼊要获取自增id, 可以按照单条记录获得自增id的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆浆两块钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值