• 【Mybatis】(二)增删改查功能


    (二)增删改查

    1.namespace

      UserMapper中namespace的包名要和Dao/Mapper接口的包名一致

    <mapper namespace="dao.UserDao">
    

    2.MyBatis使用事务

    • mybatis默认开启事务(若在mybatis的配置文件中,transactionManager标签的type设为jdbc的话),也就是mybatis默认关闭自动提交。

    • 若要对数据库进行修改操作,必须调用sqlSession.commit()方法。

      参考:https://www.cnblogs.com/-beyond/p/10130300.html


    3.语句参数

    • id对应绑定接口的方法
    • resultType对应返回类型中的泛型
    • parameterType对应参数类型

    4.流程(insert举例)

    • 在UserDao.java接口中添加方法

      //插入一个用户
      int addAUser(User user);
      
    • 在UserMapper.xml中添加sql语句

      <!--#后的变量名是对象的属性名-->
      <insert id="addAUser" parameterType="pojo.User">
      	insert into mybatiss.user values (#{id},#{name},#{pwd});
      </insert>
      
    • 写测试方法

      //增删改查需要提交事务
          @Test
          public void addAUser() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
              UserDao userDao = sqlSession.getMapper(UserDao.class);
              int rs = userDao.addAUser(new User(4, "小蓝", "123"));
      
              if (rs > 0)
                  System.out.println("插入成功");
      
              //提交事务
              sqlSession.commit();
      
              sqlSession.close();
          }
      

    5.代码

    • UserDao

      package dao;
      
      public interface UserDao {
          //查询所有用户列表
          List<User> getUserList();
      
          //根据id查询用户
          User getUserById(int id);
      
          //插入一个用户
          int addAUser(User user);
      
          //修改用户
          int updateUser(User user);
      
          //删除用户
          int deleteUser(int id);
      }
      
    • UserMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      
      <!--namespace绑定一个对应的Dao接口-->
      <mapper namespace="dao.UserDao">
          <!--id对应绑定接口的方法,resultType对应返回类型中的泛型,parameterType对应参数类型-->
          <select id="getUserList" resultType="pojo.User">
              select * from mybatiss.user
          </select>
      
          <!--#取参数值-->
          <select id="getUserById" parameterType="int" resultType="pojo.User">
              select * from mybatiss.user where id = #{id}
          </select>
      
          <!--#后的变量名是对象的属性名-->
          <insert id="addAUser" parameterType="pojo.User">
               insert into mybatiss.user values (#{id},#{name},#{pwd});
          </insert>
      
          <update id="updateUser" parameterType="pojo.User">
               update mybatiss.user set name=#{name},pwd=#{pwd} where id=#{id};
          </update>
      
          <delete id="deleteUser" parameterType="int">
              delete from mybatiss.user where id =#{id};
          </delete>
      </mapper>
      
    • UserDaoTest

      package dao;
      
      public class UserDaoTest {
      
          @Test
          public void test() {
              //获得SqlSession对象
              SqlSession sqlSession = MybatisUtils.getSqlSession();
      
              //getMapper
              UserDao mapper = sqlSession.getMapper(UserDao.class);
              List<User> userList = mapper.getUserList();
      
              for (User user : userList) {
                  System.out.println(user);
              }
      
              //关闭sqlSession
              sqlSession.close();
          }
      
          @Test
          public void getUseById() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
      
              UserDao userDao = sqlSession.getMapper(UserDao.class);
              User user = userDao.getUserById(2);
              System.out.println(user);
      
              sqlSession.close();
          }
      
          //增删改查需要提交事务
          @Test
          public void addAUser() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
              UserDao userDao = sqlSession.getMapper(UserDao.class);
              int rs = userDao.addAUser(new User(4, "小蓝", "123"));
      
              if (rs > 0)
                  System.out.println("插入成功");
      
              //提交事务
              sqlSession.commit();
      
              sqlSession.close();
          }
      
          @Test
          public void updateUser() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
              UserDao userDao = sqlSession.getMapper(UserDao.class);
              int rs = userDao.updateUser(new User(4, "小蓝", "321"));
      
              if (rs > 0)
                  System.out.println("修改成功");
      
              //提交事务
              sqlSession.commit();
      
              sqlSession.close();
          }
      
          @Test
          public void deleteUser() {
              SqlSession sqlSession = MybatisUtils.getSqlSession();
              UserDao userDao = sqlSession.getMapper(UserDao.class);
              int rs = userDao.deleteUser(4);
      
              if (rs > 0)
                  System.out.println("删除成功");
      
              //提交事务
              sqlSession.commit();
      
              sqlSession.close();
          }
      
      }
      

    6.注意

    • 增删改查需要提交事务
    • resource绑定mapper,需要使用路径/

    7.万能Map

      当实体类或数据库中表的字段过多时,应当考虑使用Map。

      UserDao

    //只修改用户的部分信息
        int updateUser2(Map<String,Object> map);
    

      UserMapper.xml

     <!--#后的变量名为map的key-->
        <update id="updateUser2" parameterType="map">
             update mybatiss.user set pwd=#{userPwd} where id=#{userId};
        </update>
    

      UserDaoTest

     @Test
        public void updateUser2() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserDao userDao = sqlSession.getMapper(UserDao.class);
    
            Map<String,Object> map = new HashMap<>();
            map.put("userId",1);
            map.put("userPwd","555");
    
            int rs = userDao.updateUser2(map);
            if (rs > 0)
                System.out.println("修改成功");
    
            //提交事务
            sqlSession.commit();
            sqlSession.close();
        }
    

      *Map传递参数,直接在sql中取出key即可。

      对象传递参数,直接在sql中取对象的属性即可。

      只有一个基本类型参数的情况下,可以直接在sql中取到。

      多个参数用Map,或注解


    8.模糊查询

      1.传递通配符% %

      UserDao

    //模糊查询用户
    List<User> getUsersLike(String value);
    

      UserMapper.xml

    <select id="getUsersLike" parameterType="String" resultType="pojo.User">
         select * from mybatiss.user where name like #{value}
    </select>
    

      UserDaoTest

    @Test
        public void getUsersLike() {
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserDao userDao = sqlSession.getMapper(UserDao.class);
    
            List<User> userList = userDao.getUsersLike("%绿%");
            for (User user : userList) {
                System.out.println(user);
            }
    
            sqlSession.close();
        }
    
  • 相关阅读:
    2020软件工程作业01
    2020软件工程个人作业06——软件工程实践总结作业
    2020软件工程作业05
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程02




  • 原文地址:https://www.cnblogs.com/musecho/p/14280561.html
Copyright © 2020-2023  润新知