Mybatis@options注解属性useGeneratedKeys,keyProperty,keyColumn的使用

option注解标签useGeneratedKeys=true表示使用数据库自动增长的主键,keyColumn用于指定数据库table中的主键,keyProperty用于指定传入对象的成员变量。

@Options(useGeneratedKeys=true,keyProperty="userId",keyColumn="userId")

这个注解的意思就是,使用数据库自动增长的主键,并从table中userId字段里面把数据放到传入对象的成员变量userId里面。
如果我们已经在数据库表中指定了主键,那么keyColumn属性可以缺省。

测试代码

User.java:

package com.cr.pojo;

public class User {
	private int userId;
	private String userName;
	private String userPassword;
	private int userAge;
	private String userEmail;

	public int getUserAge() {
		return userAge;
	}

	public void setUserAge(int userAge) {
		this.userAge = userAge;
	}

	public String getUserEmail() {
		return userEmail;
	}

	public void setUserEmail(String userEmail) {
		this.userEmail = userEmail;
	}

	public int getUserId() {
		return userId;
	}

	public void setUserId(int userId) {
		this.userId = userId;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getUserPassword() {
		return userPassword;
	}

	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
}

UserMapper.java:

package com.cr.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.cr.pojo.User;

public interface UserMapper
{
	//select
	@Select("select * from user where userId = #{userId}")
	public User getUserById(int userId);
	//insert
	@Insert("insert into user(userName,userPassword,userAge,userEmail) "
			+ "values(#{userName},#{userPassword},#{userAge},#{userEmail}) ")
	//Options注解中默认设置的主键对应的字段名为id,在我的user表中,主键名为userId,因此需要将keyProperty和keyColumn设置成我们想要的字段;
	//这个注解的意思就是,从user表中主键(userId)里面把数据放到传入对象User类对象的userId成员变量里面。
	//这里,由于在数据库表中已经指定了主键,固可省略keyColumn属性
	@Options(useGeneratedKeys=true,keyProperty="userId")
	public void insertUser(User user);
}

测试类:

package com.cr.test.annotation;

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.cr.mapper.UserMapper;
import com.cr.pojo.User;

/**  
* <p>Title: Options.java</p>  
* <p>Description: 此类用于测试@options注解标签(useGeneratedKeys,keyProperty,keyColumn)的使用:
* 	Options注解中默认设置的主键对应的字段名为id,在我的user表中,主键名为userId,因此需要将keyProperty和keyColumn设置成我们想要的字段;
	这个注解的意思就是,从user表中userId字段里面把数据放到传入对象User类对象的userId成员变量里面。</p>  
* <p>Copyright: Copyright (c) 2019</p>  
* <p>Company:uestc</p>  
* @author ChenRan  
* @date 2019年1月2日  
* @version 1.0  
*/  
public class Options 
{
	 private static SqlSessionFactory sqlSessionFactory;
	    private static Reader reader;
	    

	    static {
	        try {
	            reader = Resources.getResourceAsReader("mybatis.xml");
	            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	    }

	    public static SqlSessionFactory getSession() {
	        return sqlSessionFactory;
	    }

	    /**
	     * @param args
	     */
	    public static void main(String[] args) {
	       testInsert();
	    }
	    
	    
	    //select查询测试模块:根据id获得User对象
	    private static void testSelect(int userId) 
	    {	
	    	 SqlSession session = sqlSessionFactory.openSession();
		        try 
		        {
		        	UserMapper userMapper = session.getMapper(UserMapper.class);
		        	User user = userMapper.getUserById(userId);
		        	if(user != null)
		        	{
		        		System.out.println(user.getUserId()+"||"+user.getUserName()+"||"+user.getUserPassword()+"||"+user.getUserAge()
		        		+"||"+user.getUserEmail());
		        	}
		        	else
		        	{
		        		System.out.println("userId为"+userId+"的用户不存在!可能未创建或者已经被删除。");
		        	}

		        } finally {
		            session.close();
		        }
	    }

	    //insert测试模块:向user表中插入行
	    private  static void testInsert()
	    {	
	    	//构造要插入的user对象
	       User user = new User();
	       user.setUserId(0);
	       user.setUserName("NewName4");
	       user.setUserEmail("ssssqas@qq.com");
	       user.setUserAge(999);
	       user.setUserPassword("221111");
	       
	    	SqlSession session = sqlSessionFactory.openSession();
	        try 
	        {
	        	UserMapper userMapper = session.getMapper(UserMapper.class);
	        	userMapper.insertUser(user);
	        	//注意这里需要提交session
	        	session.commit();
	        	System.out.println("After insert:");
	        	testSelect(user.getUserId());
	        } finally {
	            session.close();
	        }
	    }
}

测试结果

在这里插入图片描述

  • 21
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值