MyBatis 实现主键回写
2019-05-04 本文已影响1人
Java成长之路
当我们向数据库插入数据时,主键是设置的自增的,但是我们插入好数据库后,我们希望得到刚刚插入的数据的主键,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