MyBatis 3 中,使用MySql 的AUTO_INCREMENT

原文地址: http://www.raistudies.com/mybatis/inserting-auto-generated-id-using-mybatis-return-id-to-java/


http://blog.csdn.net/zhangwenan2010/article/details/7579191   介绍了MyBatis 3 的配置过程,

其中,Product 类的 id 属性,在真实项目中,它的值是唯一的,以便确定对应的数据。

要在Java 中自动生成这样的 id 值,必然要进行额外的运算来找到一个唯一的 id 值,那么一旦需要存储大量的数据,这个问题就有可能成为瓶颈。


那么,解决方案是?

其实大多数主流数据库都已经提供了自动生成唯一id 值的解决方案,我们只需要将这个值与我们的 Java 对象关联起来就可以了。

比如:

1、Mysql 数据库,AUTO_INCREMENT

2、MS SQL Server 数据库,IDENTITY 


修改原先的代码

工具:

1、MyBatis 3.1.0 ( 原先使用的 MyBatis 3.0.4 有bug)

2、Mysql Java Connector 5.1


首先,修改数据库

CREATE TABLE Product(id BIGINT NOT NULL AUTO_INCREMENT , brand VARCHAR(20),
model VARCHAR(20), name VARCHAR(30) , PRIMARY KEY (id));


然后,修改配置文件

<?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">

<mapper namespace="com.raistudies.services.ProductServices">

    <insert id="save" parameterType="product" useGeneratedKeys="true" keyProperty="id"  keyColumn="id">
        INSERT INTO Product (brand,model,name)
        VALUE (#{brand}, #{model}, #{name} )
        <selectKey keyProperty="id" resultType="long" order="AFTER">
            SELECT LAST_INSERT_ID();
        </selectKey>
    </insert>

</mapper>

可以发现,我们对 <insert/>标签作了以下修改:

1、增加了 useGeneratedKeys=”true” ,这一设置指定了 “id” 属性将会由数据库来自动生成,keyProperty ="id" 指定 Product 类中的 id 属性,keyColumn="id" 则指定了Product 表中的列名 id

2、使用<selectKey> 标签,就会在数据库自动生成 id 之后,将id 的值返回给 Java 程序中的对象,那么product 实例中的id 值就会被正确设置。

     SELECT LAST_INSERT_ID() 这一语法,根据使用数据库类型的不同,有可能不同,本例中的语句仅适用与MySQL


package com.raistudies.runner;

import java.io.IOException;
import java.io.Reader;

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 com.raistudies.domain.Product;
import com.raistudies.services.ProductServices;

public class AppTester {
    private static SqlSessionFactory sessionFac = null;
    private static Reader reader;
    private static String CONFIGURATION_FILE = "sqlmap-config.xml";

    static{
        try {
            reader = Resources.getResourceAsReader(CONFIGURATION_FILE);
            sessionFac = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        SqlSession session = sessionFac.openSession();
        try {
        ProductServices productServiceObj = session.getMapper(ProductServices.class);
        Product product = new Product();
        product.setBrand("LG");
        product.setModel("P500");
        product.setName("Optimus One");
        productServiceObj.save(product);
        System.out.println("The new id is : " + product.getId());
        session.commit();

        } finally {
            session.close();
        }
    }

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个支持面向对象的持久层框架,可以与各种关系型数据库(如MySQL、Oracle、SQL Server等)结合使用MySQL是一种常用的关系型数据库管理系统,支持触发器(Trigger)功能。 在MyBatis使用MySQL触发器可以实现一些特定的业务需求,例如在数据库插入或更新数据时,触发器可以自动执行一些操作,如记录日志、更新其他表等。 下面是一个简单的示例,演示了如何在MyBatis使用MySQL触发器。 首先,我们需要在MySQL创建一个表和一个触发器,用于记录用户的登录信息。 CREATE TABLE user_login ( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL, login_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TRIGGER user_login_trigger AFTER INSERT ON user_login FOR EACH ROW BEGIN INSERT INTO log_table (username, action, time) VALUES (NEW.username, 'login', NOW()); END; 上面的触发器定义了在user_login表插入一条数据时,自动向log_table表插入一条记录。 接下来,我们需要在MyBatis的Mapper XML文件配置插入数据的SQL语句。 <insert id="insertUserLogin" parameterType="com.example.UserLogin"> INSERT INTO user_login (username) VALUES (#{username}) </insert> 在Java代码,我们可以使用MyBatis的SqlSession对象执行insertUserLogin方法。 UserLogin userLogin = new UserLogin(); userLogin.setUsername("john"); sqlSession.insert("insertUserLogin", userLogin); 当执行上面的代码时,MySQL触发器会自动执行,向log_table表插入一条记录。 总结: 使用MySQL触发器可以在数据库实现一些自动化的操作,如记录日志、更新其他表等。在MyBatis使用MySQL触发器需要在MySQL创建触发器,然后在Mapper XML文件配置插入数据的SQL语句。执行插入数据的方法时,MySQL触发器会自动执行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值