MyBatis 实现主键回写

作者: Java成长之路 | 来源:发表于2019-05-04 15:51 被阅读1次

    当我们向数据库插入数据时,主键是设置的自增的,但是我们插入好数据库后,我们希望得到刚刚插入的数据的主键,mybatis可以实现这样的功能
    应用场景:
    员工与部门,当新员工进公司,该员工肯定属于某个部门,插入数据的时候,要告诉部门表,这个员工属于哪个部门

    数据库表

    mapper.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="UserDaoMapper">
    
        <!-- 插入statement 
            useGeneratedKeys:开启主键回写
            keyColumn:主键列名(既数据库表中的列名)
            keyProperty:主键对应的属性名(实体中的属性名)
            插入数据时,传过来的参数是一个对象,#{***}中的名字必须与对象中属性名一致
        -->
        <insert id="saveUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
            INSERT INTO tb_user (
                user_name,
                password,
                name,
                age,
                sex,
                birthday,
                created,
                updated
            )
            VALUES(
                #{userName},
                #{password},
                #{name},
                #{age},
                #{sex},
                #{birthday},
                NOW(),
                NOW()
            )
        </insert>
    </mapper>
    

    mybatis-config.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="jdbc.properties"  />
    
      <settings>
      <!-- 设置驼峰匹配 -->
        <setting name="mapUnderscoreToCamelCase" value="true" />
      </settings>
      <typeAliases>
        <!-- package 扫描该包下的类,别名就是类名-->
        <package name="cn.itcast.domain"/>
      </typeAliases>
        <environments default="development" >
            <environment id="development">
                <transactionManager type="JDBC" />
                <dataSource type="POOLED">
                    <!-- 指定驱动类 -->
                    <property name="driver" value="${jdbc.driverClass}" />
                    <!-- 指定连接地址 -->
                    <property name="url" value="${jdbc.url}" />
                    <!-- 指定数据库登录用户 -->
                    <property name="username" value="${jdbc.username}" />
                    <!-- 数据库密码 -->
                    <property name="password" value="${jdbc.password}" />
                </dataSource>
            </environment>
        </environments>
        <!-- 引入map文件 -->
        <mappers>
            <mapper resource="UserDaoMapper.xml"/>
        </mappers>
    </configuration>
    

    jdbc.properties文件

    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mybatis
    jdbc.username=root
    jdbc.password=123
    

    Test测试类

    public class UserDaoTest {
        private SqlSession sqlSession;
    
        @Before
        public void setUp() throws IOException {
            // 加载mybatis-config.xml文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            // 创建sqlSessionFactory的构造器
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            // 创建sqlSession工厂
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            // 通过工厂生成sqlSession
            sqlSession = sqlSessionFactory.openSession();
    
        }
        @Test
        /**
         * 插入用户信息
         * @throws IOException
         */
        public void inserUser() throws IOException {
            UserDao dao = new UserDaoImpl(sqlSession);
            User user =new User();
            user.setUserName("jiumozhi");
            user.setPassword("123456");
            user.setName("鸠摩智");
            user.setAge(30);
            user.setSex(1);
            user.setBirthday(new Date());
            dao.saveUser(user);
    
            System.out.println(user);
    
        }
    }
    

    dao层方法

    @Override
        public void saveUser(User user) {
            sqlSession.insert("UserDaoMapper.saveUser", user);
            sqlSession.commit();
            sqlSession.close();
        }
    

    展示结果


    image.png

    源作者:顾国玉
    原文:https://blog.csdn.net/u010452388/article/details/80822657

    相关文章

      网友评论

        本文标题:MyBatis 实现主键回写

        本文链接:https://www.haomeiwen.com/subject/ohoxoqtx.html