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