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();
}
}
}