MyBatis 實現主鍵回寫

當我們向數據庫插入數據時,主鍵是設置的自增的,但是我們插入好數據庫後,我們希望得到剛剛插入的數據的主鍵,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();
    }

展示結果



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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章