Mybatis 插入后获取主键
项目结构#
数据表结构#
pom.xml#
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>net.cyb</groupId> <artifactId>cyb-mybatis</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.30</version> </dependency> </dependencies> </project>
mybatis-config.xml#
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 引入外部配置文件 --> <properties resource="config/db.properties"></properties> <!--下划线自动映射驼峰字段--> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <!-- 数据库链接相关 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${db.driver}" /> <property name="url" value="${db.url}" /> <property name="username" value="${db.username}" /> <property name="password" value="${db.password}" /> </dataSource> </environment> </environments> <mappers> <!-- 添加映射文件 --> <mapper resource="mapper/VideoMapper.xml" /> </mappers> </configuration>
db.properties#
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://127.0.0.1:3306/cybclass
db.username=root
db.password=root
log4j.properties#
#dev env [debug] product env [info]
log4j.rootLogger=ERROR, stdout
# Console output...
# 细化到打印某个mapper
# log4j.logger.包名.方法名=TRACE
log4j.logger.net.cybclass.online=TRACE
#log4j.logger.net.cybclass.online.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
VideoMapper.xml#
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:名称空间,一般需要保持全局唯一,最好是和dao层的java接口一致。可以映射sql语句到对应的方法名称和参数、返回类型 --> <mapper namespace="net.cybclass.online.dao.VideoMapper"> <insert id="add" parameterType="net.cybclass.online.domain.Video"> insert into video (title,summary,cover_img,price,c_id,point,create_time) values (#{title,jdbcType=VARCHAR},#{summary,jdbcType=VARCHAR},#{coverImg,jdbcType=VARCHAR},#{price,jdbcType=INTEGER},#{c_id,jdbcType=INTEGER},#{point,jdbcType=DOUBLE},#{create_time,jdbcType=TIMESTAMP}) </insert> </mapper>
VideoMapper.java#
package net.cybclass.online.dao; import net.cybclass.online.domain.Video; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; public interface VideoMapper { /** * 根据视频id查找视频对象 * @param videoId * @return */ Video selectById(@Param("video_id") int videoId); /** * 查询全部视频列表 * @return */ @Select("select * from video") List<Video> selectList(); /** * 查询全部视频列表 * @return */ List<Video> selectListByXml(); /** * 根据评分和标题模糊查询 * @param point * @param title * @return */ List<Video> selectByPointAndTitleLike(@Param("point") double point,@Param("title") String title); /** * 新增一个视频记录 * @param video * @return */ int add(Video video); }
Video.java#
package net.cybclass.online.domain; import java.util.Date; /** * 视频类 */ public class Video { //内码 private int id; //视频标题 private String title; //视频详情 private String summary; //视频封面 private String coverImg; //加个 private int price; private int c_id; //评分 private double point; //创建日期 private Date create_time; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public String getCoverImg() { return coverImg; } public void setCoverImg(String coverImg) { this.coverImg = coverImg; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getC_id() { return c_id; } public void setC_id(int c_id) { this.c_id = c_id; } public double getPoint() { return point; } public void setPoint(double point) { this.point = point; } public Date getCreate_time() { return create_time; } public void setCreate_time(Date create_time) { this.create_time = create_time; } @Override public String toString() { return "Video{" + "id=" + id + ", title='" + title + '\'' + ", summary='" + summary + '\'' + ", coverImg='" + coverImg + '\'' + ", price=" + price + ", c_id=" + c_id + ", point=" + point + ", create_time=" + create_time + '}'; } }
SqlSessionDemo.java#
package net.cybclass.online; import net.cybclass.online.dao.VideoMapper; import net.cybclass.online.domain.Video; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.Date; public class SqlSessionDemo { public static void main(String[] args) throws IOException { String resouce="config/mybatis-config.xml"; InputStream resourceAsStream = Resources.getResourceAsStream(resouce); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); try(SqlSession session=build.openSession()){ VideoMapper mapper = session.getMapper(VideoMapper.class); Video video=new Video(); video.setTitle("测试A"); video.setSummary("这是一条测试数据"); video.setCoverImg("www.baidu.com"); video.setC_id(6); video.setPoint(8.88); video.setPrice(98); video.setCreate_time(new Date()); mapper.add(video); session.commit(); }catch (Exception e){ e.printStackTrace(); } } }
主键返回#
<insert id="add" parameterType="net.cybclass.online.domain.Video" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> insert into video (title,summary,cover_img,price,c_id,point,create_time) values (#{title,jdbcType=VARCHAR},#{summary,jdbcType=VARCHAR},#{coverImg,jdbcType=VARCHAR},#{price,jdbcType=INTEGER},#{c_id,jdbcType=INTEGER},#{point,jdbcType=DOUBLE},#{create_time,jdbcType=TIMESTAMP}) </insert>
package net.cybclass.online; import net.cybclass.online.dao.VideoMapper; import net.cybclass.online.domain.Video; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.Date; public class SqlSessionDemo { public static void main(String[] args) throws IOException { String resouce="config/mybatis-config.xml"; InputStream resourceAsStream = Resources.getResourceAsStream(resouce); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); try(SqlSession session=build.openSession()){ VideoMapper mapper = session.getMapper(VideoMapper.class); Video video=new Video(); video.setTitle("测试A"); video.setSummary("这是一条测试数据"); video.setCoverImg("www.baidu.com"); video.setC_id(6); video.setPoint(8.88); video.setPrice(98); video.setCreate_time(new Date()); int rows=mapper.add(video); session.commit(); System.out.println(rows); System.out.println(video.toString()); }catch (Exception e){ e.printStackTrace(); } } }
插入的时候,自动就把id赋值给Video实体类对象中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-07-09 ORA-06502:at "WMSYS.WM_CONCAT_IMPL",line 30 解决方法整理