MyBatis(三)实现增删改查

一、使用代码的方式实现增删改查

1.1 MyBatis实现新增

  1. 在mybatis中默认是关闭了JDBC的自动提交功能

    1. 每一个 SqlSession 默认都是不自动提交事务。
    2. session.commit() 提交事务
    3. openSession(true);自动提交。setAutoCommit(true);
  2. mybatis底层是对 JDBC 的封装。

    1. JDBC 中 executeUpdate() 执行新增,删除,修改的 SQL 返回值 int,表示受影响的行数。
    2. mybatis 中 标签没有 resultType 属性,认为返回值都是 int
  3. 在 openSession() 时 MyBatis 会创建一SqlSession时同时创建一个 Transaction (事务对象),同时 autoCommit 都为 false

    • 如果出现异常,应该session.rollback()回滚事务。
  4. java代码

    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    // 使用工厂模式
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // 生产session
    SqlSession session = factory.openSession();
    // 添加
    User user = new User();
    user.setName("赵六");
    user.setAge(23);
    int index = session.insert("com.yzq.mapper.UserMapper.insertUser", user);
    if (index > 0) {
    System.out.println("添加成功");
    }else {
    System.out.println("添加失败");
    }
    // 事务提交
    session.commit();
    session.close();
    
  5. mapper.xml代码

    <insert id="insertUser" parameterType="User" >
    	insert into user values(default,#{name},#{age})
    </insert>
    

1.2 MyBatis实现修改

  1. java代码

    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    // 使用工厂模式
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // 生产session
    SqlSession session = factory.openSession();
    // 修改
    User user = new User();
    user.setId(4);
    user.setName("tom");
    int index = session.insert("com.yzq.mapper.UserMapper.updateUser", user);
    if (index > 0) {
    System.out.println("修改成功");
    }else {
    System.out.println("修改失败");
    }
    // 事务提交
    session.commit();
    session.close();
    
  2. mapper.xml中代码

    <update id="updateUser" parameterType="User">
    		update user set
    		 name = #{name} 
    		 where id=#{id}
    </update>
    

1.3 MyBatis实现删除

  1. java代码

    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    // 使用工厂模式
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // 生产session
    SqlSession session = factory.openSession();
    // 删除
    User user = new User();
    user.setId(4);
    int index = session.insert("com.yzq.mapper.UserMapper.deleteUser", user);
    if (index > 0) {
    System.out.println("删除成功");
    }else {
    System.out.println("删除失败");
    }
    // 事务提交
    session.commit();
    session.close();
    
  2. mapper.xml中代码

    <delete id="deleteUser" parameterType="int">
    	delete from user where id = #{0}
    </delete>
    

1.4 MyBatis实现查询

  1. mapper.xml中代码

    <select id="selectUser" resultType="User">
    	select * from user
    </select>
    
  2. java代码实现

    InputStream is = Resources.getResourceAsStream("mybatis.xml");
    // 使用工厂模式
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
    // 生产session
    SqlSession session = factory.openSession();
    // 查询
    List<User> list = session.selectList("com.yzq.mapper.UserMapper.selectUser");
    for (User user : list) {
    	System.out.println(user);
    }
    session.close();
    

1.5 三种查询方式

  1. selectList() 返回值为 List<resultType 属性控制>

    1. 适用于查询结果都需要遍历的需求

      List<Flower> list = session.selectList("a.b.selAll"); 
      for (Flower flower : list) {
          System.out.println(flower.toString()); 
      }
      
  2. .selectOne() 返回值 Object

    1. 适用于返回结果只是变量或一行数据时

      int count = session.selectOne("a.b.selById"); System.out.println(count);
      
  3. .selectMap() 返回值 Map

    1. 适用于需要在查询结果中通过某列的值取到这行数据的需求

    2. Map<key,resultType 控制>

      Map<Object, Object> map = session.selectMap("a.b.c", "name123"); 
      System.out.println(map);
      

二、使用注解的形式实现增删改查

2.1关于MyBatis的注解

  1. 注解:为了简化配置文件

  2. MyBatis的注解简化mapper.xml文件

    1. 如果涉及动态SQL依然使用mapper.xml
  3. mapper.xml和注解可以共存。

  4. 使用注解时mybatis.xml中使用

   <package/>
   <mapper class=""/>

2.2 实现查询

@Select("select * from teacher")
List<Teacher> selectAll();

2.3 实现新增

@Insert("insert into teacher value(default,#{name})")
int insertTeacher(Teacher teacher);

2.4 实现修改

@Update("update teacher set name=#{name} where id=#{id}")
int updateTeacher(Teacher teacher);

2.5 实现删除

@Delete("delete from teacher where id=#{0}")
int deleteTeacher(int id);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值