需求:user对象插入到数据库后,新记录的主键要通过user对象返回,通过user获取主键值。
解决思路: 通过LASTINSERTID()获取刚插入记录的自增主键值,在insert语句执行后,执行select LASTINSERTID()就可以获取自增主键。
<!-- 插入用户
selectKey:用于主键的返回
在insert语句执行之后执行select LAST_INSERT_ID()就能获取到自增主键
order:selectKey执行顺序,相对于insert而言
keyProperty:将主键值赋值给那个属性
-->
<insert id="insertUser" parameterType="com.mybatis.po.User">
<selectKey order="AFTER" resultType="int" keyProperty="id">
select LAST_INSERT_ID()
</selectKey>
insert into user(username, birthday, sex, address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
使用mysql的uuid机制生成主键:Before**
使用uuid生成主键的好处是不考虑数据库移植后主键冲突问题。
实现思路: 先查询uuid得到主键,将主键设置到user对象中,将user对象插入数据库。
实现 oracle数据库主键返回,如何做??Before** oracle没有自增主键机制,使用序列完成主键生成。
实现思路: 先查询序列得到主键,将主键设置到user对象中,将user对象插入数据库。
<!--
用户更新
要求必须有主键
-->
<update id="updateUser" parameterType="com.mybatis.po.User">
update user set username=#{username}, birthday=#{birthday}, sex=#{sex}, address=#{address}
where id=#{id}
</update>
@Test
//更新用户
public void updateUser() {
//建立sqlSession
SqlSession session = sessionFactory.openSession();
//创建插入的数据对象
User user = new User();
user.setId(31);
user.setUsername("ladygaga");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("不要问我从哪里来");
try {
session.update("test.updateUser", user);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭sqlSession
session.commit();
session.close();
}
System.out.println("更新用户的id" + user.getId());
}
<select id="findUserById" parameterType="int" resultType="com.mybatis.po.User">
select * from user where id=#{id}
</select>
@Test
//根据id查询用户,得到单条记录
public void TestFindByid() {
//建立sqlSession
SqlSession session = sessionFactory.openSession();
try {
user = session.selectOne("test.findUserById", 1);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭sqlSession
session.close();
}
System.out.println(user);
}
<!-- 删除用户-->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
@Test
//删除用户
public void testDelete() {
//建立sqlSession
SqlSession session = sessionFactory.openSession();
try {
session.delete("test.deleteUser", 30);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭sqlSession
session.commit();
session.close();
}
}
企业开发进行技术选型 ,考虑mybatis与hibernate适用场景。
总之,企业在技术选型时根据项目实际情况,以降低成本和提高系统 可维护性为出发点进行技术选型。