Mybatis学习第5节 -- 插入并获取ID

插入过程

接口

int insertShop(Shop shop);

映射

<insert id="insertShop" parameterType="Shop" useGeneratedKeys="true" keyProperty="id">    INSERT INTO `oto`.`tb_shop` (      `owner_id`,      `area_id`,      `shop_category_id`,      `shop_name`,      `shop_desc`,      `shop_addr`,      `phone`,      `shop_img`,      `priority`,      `advice`    )    VALUES      (        #{ownerId},        #{areaId},        #{categoryId},        #{name},        #{desc},        #{addr},        #{phone},        #{image},        #{priority},        #{advice}      ) ;</insert>

测试

@Testpublic void testInsertShop() {    String template = "查询结果: %s";    SqlSession session = MyBatisUtil.getSqlSession();    ShopMapper mapper = session.getMapper(ShopMapper.class);

    Shop shop = new Shop();    shop.setOwnerId(1);    shop.setName("Hello Jack");    mapper.insertShop(shop);

    session.commit();    session.close();

    System.out.printf(template, shop);}

结果

Opening JDBC Connection
Created connection 118555812.
Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@71104a4]
==> Preparing: INSERT INTO `oto`.`tb_shop` ( `owner_id`, `area_id`, `shop_category_id`, `shop_name`, `shop_desc`, `shop_addr`, `phone`, `shop_img`, `priority`, `advice` ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ; 
==> Parameters: 1(Integer), null, null, Hello Jack(String), null, null, null, null, null, null
<== Updates: 1
Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@71104a4]
Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@71104a4]
Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@71104a4]
Returned connection 118555812 to pool.
查询结果: Shop{id=41, ownerId=1, areaId=null, categoryId=null, name=‘Hello Jack‘, desc=‘null‘, addr=‘null‘, phone=‘null‘, image=‘null‘, priority=null, createTime=null, lastEditTime=null, enableStatus=null, advice=‘null‘}

第一种方法: 在insert语句标签中指明pojo对象中对应的id

<insert id="insertShop" parameterType="Shop" useGeneratedKeys="true" keyProperty="id">

第二种方法: 全局配置

在mybatis-config.xml文件中进行配置

<setting name="userGeneratedKeys" value="true" />

在mapper里面仅设置keyProperty

第三种方法: 不支持自增的数据库比如说Oracle

没有学过Oracle,等女朋友来教我

原文地址:https://www.cnblogs.com/litran/p/10543837.html

时间: 2024-08-30 18:00:00

Mybatis学习第5节 -- 插入并获取ID的相关文章

spring JdbcTemplate批量插入以及单个插入时获取id

1. 批量更新插入 jdbcTemplate.batchUpdate(String sql, List<Object[]> batchArgs) Object[]数组的长度为每条记录的参数个数(也就是sql语句中"?"的个数) List: 总共插入多少条记录. /** * 批量插入订单详情 * */ public void addBatch(List<OrderDetail> orderDetails) { List<Object[]> params

Mybatis学习第25节 -- 懒加载 积极与不积极

积极懒加载是指如果你访问一个对象的属性,Mybatis就会帮你把需要进步一查询的该属性或者其他属性在数据库中查询出来. 不积极懒加载是指,有这种必要的时候,采取进行必要的数据库检索 我看的教程中的Mybatis版本默认是积极的lazy加载, 而我实际用的Mybatis3.4.6实际上默认不积极的lazy加载. mybatis-config.xml文件 <settings> <!-- 打印查询语句 --> <setting name="logImpl" va

Mybatis学习第19节 -- 嵌套查询一对多的配置

一对多和多对多是一样的. 而多对多是指 A对于B来说是一对多的关系, 同时B对于A来说也是一对多的关系, 互为一对多,即为多对多. 比如说一个标签下面有多篇文章,一篇文章也可能有多个标签 Shop实体类设计 List<Product> productList; Product实体类设计 public class Product implements Serializable{ Integer id; String name; String desc; String imgAddr; Strin

Mybatis学习第23节 -- 鉴别器 discriminator

discriminator或者叫做分类器 Vehicle类   package io.github.coinsjack.pojo; import java.util.Date; public class Vehicle { protected Integer id; protected String vin; protected Date year; protected String make; protected String model; protected String color; pu

Mybatis学习第2节 -- 模糊查询之#和$的区别

先说结论, #是占位符,而$的行为是字符串拼接, 在参数是java的基本类型且只有一个参数的情况下,使用$时,只能用value作为参数传递 需求决定设计, 先在interface里面添加相应方法 public interface ShopMapper { Shop getShopById(Integer id); Shop getShopByIdAlias(Integer id); Shop getShopByTitleContainDollar(String value); Shop getS

Mybatis学习第4节 -- 多参数传递

第一种方法使用索引 一般不使用,不记录 第二种方法使用注解 接口 List<Shop> getShopListByPageAno(@Param(value = "offset") int offset, @Param(value = "pagesize") int pagesize); mapper <select id="getShopListByPageAno" resultMap="simpleResultMap

Mybatis学习第6节 -- 修改功能和修改部分字段

方案一, 先查询再修改 接口 int updateShop(Shop shop); 映射 <update id="updateShop" parameterType="Shop"> UPDATE `tb_shop` SET `owner_id` = 'owner_id', `area_id` = 'area_id', `shop_category_id` = 'shop_category_id', `shop_name` = 'shop_name', `

Mybatis学习第8节 -- 动态sql-if

需求 查询id小于10,并且shopname包含"关键词"的记录 如果用户没有输入任何关键词, 那么列出所有结果 接口 List<Shop> get10ShopByTitle(String value); 映射 <select id="get10ShopByTitle" resultMap="simpleResultMap"> select * from tb_shop <where> <if test=

Mybatis学习第22节 -- 高级结果映射 构造方法映射

知识储备:  对于大部分编程语言的函数来说, 函数的signature是函数名和函数参数,而对于函数参数的名称, 编译器不关心. 为ShopCustom创建一个构造函数 public ShopCustom(Integer id, String shopName, String shopDesc) { this.id = id; this.shopName = shopName; this.shopDesc = shopDesc;} 为ShopMapperCustom添加一个新方法 public