关于selectKey

1.首先我们要做的是在pom.xml中配置3个点
<!--MyBatis核心jar包-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.2</version>
</dependency>
<!--MySQL配置-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.25</version>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

2.接下来 我们要搭好练习项目架构(如图所示:)


3.现在我们来配置Mybatis.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="config.properties">
    </properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="haha.UserDao"/>
        <mapper resource="user.xml"/>
    </mappers>
</configuration>

4.创建实体类User

User有三个属性:nameageid,重写toString()方法便于调试。

 

public class User {
    String name;
    Integer age;
    Integer id;

    public User(){}
public User(String name,int age){
    this.name=name;
    this.age=age;
}

 


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return String.format("(id:%d,name:%s,age:%d)", id, name, age);
    }
}

5.实现UserDao接口

UserDao接口有两个功能:插入、查询全部

 

public interface UserDAO {
    @Insert("insert into user(name,age) value (#{name},#{age})")
    int insert_withoutPrimaryKey(@Param("name") String name, @Param("age") int age);

    int insert_useGeneratedKey(@Param("user") User user);

    int insert_selectKey(@Param("user") User user);

    @Insert("insert into user(name,age) value(#{user.name},#{user.age})")
    @SelectKey(statement = "select last_insert_id()" ,keyProperty = "user.id" ,before = false,resultType = int.class)
    int insert_selectKeyAnotation(@Param("user") User user);

    @Select("select*from user")
    List<User> getAll();
}

6.User.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">
<mapper namespace="haha.UserDao">
    <insert id="insert_useGeneratedKey" parameterType="haha.User"
            useGeneratedKeys="true" keyProperty="user.id"
>
        insert into user set id=#{user.id},name=#{user.name},age=#{user.age}
    </insert>
    <insert id="insert_selectKey" parameterType="haha.User">
        <selectKey keyProperty="user.id" keyColumn="id" order="AFTER" resultType="int">
            SELECT last_insert_id()
        </selectKey>
        insert into user(name,age) VALUE (#{user.name},#{user.age})
    </insert>
</mapper>

7.编写测试类

package haha;
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.List;

public class UserService {

public static void main(String[] args) throws IOException {
    String resource = "mybatis.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory factory = builder.build(inputStream);
    SqlSession session = factory.openSession();
    UserDao dao = session.getMapper(UserDao.class);

    //使用默认主键
    
int affectedRows = dao.insert_withoutPrimaryKey("张三", 25);
    System.out.println(affectedRows);

    //使用useGeneratedKey,将主键注入到user.id
    
User u = new User("李四", 17);
    affectedRows = dao.insert_useGeneratedKey(u);
    System.out.println(affectedRows + " " + u.getId());

    //使用selectKey执行在插入之前或之后执行查询语句
    
affectedRows = dao.insert_selectKey(u);
    System.out.println(affectedRows + " " + u.getId());

    //使用selectKey注解的方式
    
affectedRows = dao.insert_selectKeyAnotation(u);
    System.out.println(affectedRows + " " + u.getId());
    session.commit();
    List<User> a = dao.getAll();
    a.forEach(System.out::println);
}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值