【Mybatis系列】Mybatis增删改查

古城微笑少年丶 2022-11-30 12:48 399阅读 0赞

增:Insert

添加数据记录,id有两种不同的方式

  • 方式一:id自增长

    1. 如果使用自增长我们的数据库表的设计要保证id默认为自增长

    INSERT INTO user values(#{id},#{name},#{pwd})
  1. @Test
  2. public void InsertUser(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  5. mapper.addUser(new User("哈哈","1233"));
  6. //提交事务
  7. sqlSession.commit();
  8. sqlSession.close();
  9. }

在增的过程中我们需要提交事务,sqlSession.commit(),如果不提交事务,那么是无法插入的

  • 方式二:Java代码传进来ID,这个ID可以是一个UUID,也可以是自定义的

使用UUID我们一般使用Mysql自带的UUID函数

整体思路: 先调用MySql的UUID函数,获取到一个UUID,将这个UUID赋值给对象的ID属性,然后再去执行sql语句

  1. <insert id=addUser parameterType="User">
  2. <selectkey resultType="java.lang.string" keyProperty="id" order="BEFORE">
  3. select uuid();
  4. </selectkey>
  5. insert into user(id,username,address) values (#{id},#{name},#{pwd})
  6. </insert>
  1. selectKey:表示查询key
  2. keyProperty:表示将查询的结果赋值给传递进来的User对象的id属性
  3. order:表示执行的时机,Before表示这个查询操作要在insert之前执行

Java代码:

  1. @Test
  2. public void InsertUser(){
  3. SqlSession sqlSession = MybatisUtils.getSqlSession();
  4. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  5. mapper.addUser(new User("哈哈","1233"));
  6. //提交事务
  7. sqlSession.commit();
  8. sqlSession.close();
  9. }

删:

需求: 通过id删除一个用户信息

  1. //根据id删除用户
  2. int deleteUser(int id);
  3. <delete id="deleteUser" parameterType="int">
  4. delete from user where id = #{id}
  5. </delete>
  6. @Test
  7. public void testDeleteUser() {
  8. SqlSession session = MybatisUtils.getSession();
  9. UserMapper mapper = session.getMapper(UserMapper.class);
  10. int i = mapper.deleteUser(5);
  11. System.out.println(i);
  12. session.commit(); //提交事务,重点!不写的话不会提交到数据库
  13. session.close();
  14. }

改:Update 和删除的使用方法类似

查:Select

需求:根据id查询用户信息

1、在UserMapper中添加对应方法

  1. public interface UserMapper {
  2. //查询全部用户
  3. List<User> selectUser();
  4. //根据id查询用户
  5. User selectUserById(int id);
  6. }

2、在UserMapper.xml中添加Select语句

  1. <select id="selectUserById" resultType="com.kuang.pojo.User">
  2. select * from user where id = #{id}
  3. </select>

3.在测试类中进行测试:

  1. @Test
  2. public void tsetSelectUserById() {
  3. SqlSession session = MybatisUtils.getSession(); //获取SqlSession连接
  4. UserMapper mapper = session.getMapper(UserMapper.class);
  5. User user = mapper.selectUserById(1);
  6. System.out.println(user);
  7. session.close();
  8. }

当参数过多的时候使用Map

例如:根据密码和用户名来查询用户信息

1.在接口方法中直接传递Map

  1. User selectUserByNP2(Map<String,Object> map);

2.编写sql语句的时候,需要传递参数类型,参数类型为map

  1. <select id="selectUserByNP2" parameterType="map"resultType="com.kuang.pojo.User">
  2. select * from user where name = #{username} and pwd = #{pwd}
  3. </select>

3.Java中的代码

  1. Map<String, Object> map = new HashMap<String, Object>();
  2. map.put("username","小明");
  3. map.put("pwd","123456");
  4. User user = mapper.selectUserByNP2(map);

总结: 所有的增删改操作都需要提交事务

  1. 接口的所有普通参数,尽量都加上@Param参数
  2. 有时候根据业务的需求,可以考虑使用map传递参数

扩展:

20200824163831346.png

我们的resultType引用的是一个实体类型,这样写比较长,我们如何给实体起一个别名?

方式一:

  1. <typeAliases>
  2. <typeAlias type="com.kuang.pojo.User" alias="User"/>
  3. </typeAliases>

方式二:

  1. @Alias("user")
  2. public class User {
  3. ...
  4. }

这样配置之后我们可以在任何地方将 com.kuang.pojo.User 替换为 User

发表评论

表情:
评论列表 (有 0 条评论,399人围观)

还没有评论,来说两句吧...

相关阅读