文章目录
调试必备-如何控制台打印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的方式