1、Mybatis的基础配置
https://blog.youkuaiyun.com/qq_43163943/article/details/110261144
2、Mybatis自增主键的实现
执行顺序是先插入,再查询主键
1)mysql中的自增主键返回的语法
insert into user(username,password,salt,phone,created,last_login_time,status)
VALUES('xxx','xxx','xxx','xxx','2020-10-10','2020-10-10',1);
SELECT LAST_INSERT_ID();
SELECT LAST_INSERT_ID():表示返回插入语句的主键id。
2)Mybatis中的实现
User.xml
<!-- 插入数据-->
<insert id="insertUser" parameterType="com.gxa.pojo.User">
-- selectKey:表示实现主键返回
-- keyColumn:数据库表中主键对应的一列
-- keyProperty:表示pojo中对应的主键列
-- order:设置是在insert语句之前执行还是之后执行,AFTER表示之后,BEFORE表示之前
-- resultType:表示返回的id类型
<selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="long">
select last_insert_id()
</selectKey>
insert into user(username,password,salt,phone,created,last_login_time,status)
values(#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
</insert>
测试类
@Test
public void testInsert() {
//4、获得sqlSession
SqlSession sqlSession = sqlSessionFactorybuild.openSession();
//username,password,salt,phone,created,last_login_time,status
User user = new User(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
sqlSession.insert("insertUser", user);
sqlSession.commit();
System.out.println(user.getId());
}
注意:如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去
3、Mysql使用uuid生成主键
执行顺序是先通过uuid生成主键,然后再插入
1)Mysql中生成uuid语法
select UUID():生成一个全球唯一的编号
insert into user2(username,password,salt,phone,created,last_login_time,status)
VALUES('xxx','xxx','xxx','xxx','2020-10-10','2020-10-10',1);
SELECT UUID();
User.xml
<!-- 插入数据-->
<insert id="insertUserIdUUID" parameterType="com.gxa.pojo.User2">
-- selectKey:表示实现主键返回
-- keyColumn:数据库表中主键对应的一列
-- keyProperty:表示pojo中对应的主键列
-- order:设置是在insert语句之前执行还是之后执行,AFTER表示之后,BEFORE表示之前
-- resultType:表示返回的id类型
<selectKey keyColumn="id" keyProperty="id" order="BEFORE" resultType="string">
select UUID()
</selectKey>
insert into user2(id,username,password,salt,phone,created,last_login_time,status)
values(#{id},#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
</insert>
测试类
@Test
public void testInsertUserIdUUID() {
//4、获得sqlSession
SqlSession sqlSession = sqlSessionFactorybuild.openSession();
//username,password,salt,phone,created,last_login_time,status
User2 user = new User2(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
//如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去
sqlSession.insert("insertUserIdUUID", user);
sqlSession.commit();
System.out.println(user.getId());
}
注意:使用uuid当主键,id的类型应该为String类型
4、Mysql自增主键的简化版
User.xml
<!-- 插入数据-->
<!-- useGeneratedKeys:表示是否返回自增的id,true表示“是”
keyProperty:表示给哪个属性赋值,与pojo中的id一致-->
<insert id="insertUser2" parameterType="com.gxa.pojo.User" useGeneratedKeys="true" keyProperty="id">
insert into user(username,password,salt,phone,created,last_login_time,status)
values(#{username},#{password},#{salt},#{phone},#{created},#{lastLoginTime},#{status})
</insert>
测试类
@Test
public void testInsert2() {
//4、获得sqlSession
SqlSession sqlSession = sqlSessionFactorybuild.openSession();
//username,password,salt,phone,created,last_login_time,status
User user = new User(null, "哈哈哈", "123123", "xxxx", "qqqqq", new Date(), new Date(), 1);
//如果传的是地址,mybatis查询出了自增的主键,会自动将查询出来的值设置进去
sqlSession.insert("insertUser2", user);
sqlSession.commit();
System.out.println(user.getId());
}