【Mybatis系列】Mybatis增删改查

增:Insert

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

  • 方式一:id自增长

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

<insert id="addUser" parameterType="com.kuang.pojo.User">
      INSERT INTO user values(#{id},#{name},#{pwd})
    </insert>
 @Test
    public void InsertUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User("哈哈","1233"));

        //提交事务
        sqlSession.commit();
        sqlSession.close();


    }

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

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

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

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

<insert id=addUser parameterType="User">

    <selectkey resultType="java.lang.string" keyProperty="id" order="BEFORE">
        select uuid();
        
    </selectkey>

    insert into user(id,username,address) values (#{id},#{name},#{pwd})
</insert>
  1. selectKey:表示查询key
  2. keyProperty:表示将查询的结果赋值给传递进来的User对象的id属性
  3. order:表示执行的时机,Before表示这个查询操作要在insert之前执行

Java代码:

 @Test
    public void InsertUser(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();

        UserMapper mapper=sqlSession.getMapper(UserMapper.class);
        mapper.addUser(new User("哈哈","1233"));

        //提交事务
        sqlSession.commit();
        sqlSession.close();


    }

删:

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

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

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

查:Select

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

1、在UserMapper中添加对应方法

public interface UserMapper {
   //查询全部用户
   List<User> selectUser();
   //根据id查询用户
   User selectUserById(int id);
}

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

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

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

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

当参数过多的时候使用Map

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

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

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

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

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

3.Java中的代码

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

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

           接口的所有普通参数,尽量都加上@Param参数

           有时候根据业务的需求,可以考虑使用map传递参数

扩展:

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

方式一:

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

方式二:

@Alias("user")
public class User {
  ...
}

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

猜你喜欢

转载自blog.csdn.net/qq_30631063/article/details/108201694
今日推荐