zoukankan      html  css  js  c++  java
  • MyBatis实现CRUD操作

    1、namespace

    ​ 配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!

    2、select

    选择、查询语句

    • select标签是mybatis中最常用的标签之一
    • select语句有很多属性可以详细配置每一条SQL语句
      • SQL语句返回值类型。【完整的类名或者别名】
      • 传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
      • 命名空间中唯一的标识符
      • 接口中的方法名与映射文件中的SQL语句ID 一一对应
      • id:就是对应的namespace中的方法名
      • resultType:SQL语句执行的返回值类型 Class,基本数据类型
      • parameterType:参数类型

    根据id查询用户

    1. 在UserMapper中编写对应的接口

      public interface UserMapper {
          //根据id查询用户
          User getUserById(int id);
      }
      
    2. 在UserMapper.xml中编写对应的sql语句

      <!-- 根据id查询用户 -->
      <select id="getUserById" parameterType="int" resultType="com.jh.domain.User">
          select *
          from mybatis.user
          where id = #{id};
      </select>
      
    3. 在测试类中测试结果

      @Test
      public void getUserById() {
          SqlSession sqlSession = MyBatisUtils.getSqlSession();
          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
          User user = userMapper.getUserById(1);
          System.out.println(user);
          sqlSession.close();
      }
      

    根据用户名和密码查询用户

    假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

    • Map传递参数,直接在sql中取出key即可!【parameterType="map"】

    • 对象传递参数,直接在sql中取出属性即可!【parameterType="对应的对象类型"】

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

    多个参数使用map,或者注解

    方式一:直接在方法中传递参数

    1. 在接口方法的参数前加 @Param属性

      public interface UserMapper {
      	// 根据用户名和密码查询用户
          User getUserByNameAndPwd(@Param("name")String name,@Param("pwd")String pwd);
      }
      
    2. Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

      <select id="getUserByNameAndPwd" resultType="com.jh.domain.User">
          select *
          from mybatis.user
          where name = #{name}
            and pwd = #{pwd}
      </select>
      

    方式二:使用Map进行参数的传递

    1. 在接口方法中,参数直接传递Map;

      User selectUserByNameAndPwd(Map<String,Object> map);
      
    2. 编写sql语句的时候,需要传递参数类型,参数类型为map

      <select id="selectUserByNameAndPwd" resultType="com.jh.domain.User">
          select *
          from mybatis.user
          where name = #{userName}
          and pwd = #{userPassword}
      </select>
      
    3. 在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!

      Map<String, Object> map = new HashMap<String, Object>();
      map.put("userName","小明");
      map.put("userPassword","123456");
      User user = mapper.selectUserByNameAndPwd(map);
      

    总结:如果参数过多,我们可以考虑直接使用Map实现,如果参数比较少,直接传递参数即可

    3、insert

    使用insert标签进行插入操作,它的配置和select标签差不多!

    给数据库增加一个用户

    1. 在UserMapper接口中添加对应的方法

      public interface UserMapper {
          //insert 一个用户
          int addUser(User user);
      }
      
    2. 在UserMapper.xml中添加insert语句

      <insert id="addUser" parameterType="com.jh.domain.User">
          insert into mybatis.user(id, name, pwd)
          values (#{id}, #{name}, #{pwd});
      </insert>
      
    3. 测试代码

      @Test
      public void addUser() {
          SqlSession sqlSession = MyBatisUtils.getSqlSession();
          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
          int result = userMapper.addUser(new User(4, "小明", "123456"));
          System.out.println(result);
          // 提交事务,MyBatis默认不自动提交事务
          sqlSession.commit();// 重点!不写的话不会提交到数据库
          sqlSession.close();
      }
      

    注意:增、删、改操作需要提交事务!

    4、update

    使用update标签进行更新操作,它的配置和select标签差不多!

    修改用户的信息

    1. 在UserMapper接口中添加对应的方法

      public interface UserMapper {
          // 修改用户
          int updateUser(User user);
      }
      
    2. 在UserMapper.xml中添加insert语句

      <update id="updateUser" parameterType="com.jh.domain.User">
          update mybatis.user
          set name = #{name},
          pwd  = #{pwd}
          where id = #{id};
      </update>
      
    3. 测试代码

      @Test
      public void updateUser() {
          SqlSession sqlSession = MyBatisUtils.getSqlSession();
          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
          int result = userMapper.updateUser(new User(4, "修改后", "123456"));
          System.out.println(result);
          // 提交事务,MyBatis默认不自动提交事务
          sqlSession.commit();// 重点!不写的话不会提交到数据库
          sqlSession.close();
      }
      

    5、delete

    使用delete标签进行删除操作,它的配置和select标签差不多!

    根据id删除一个用户

    1. 在UserMapper接口中添加对应的方法

      public interface UserMapper {
          // 删除一个用户 
          int deleteUser(int id);
      }
      
    2. 在UserMapper.xml中添加insert语句

      <delete id="deleteUser">
          delete
          from mybatis.user
          where id = #{id};
      </delete>
      
    3. 测试代码

      @Test
      public void updateUser() {
          SqlSession sqlSession = MyBatisUtils.getSqlSession();
          UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
          int result = userMapper.deleteUser(4);
          System.out.println(result);
          // 提交事务,MyBatis默认不自动提交事务
          sqlSession.commit();// 重点!不写的话不会提交到数据库
          sqlSession.close();
      }
      

    6、总结

    • 所有的增删改操作都需要提交事务!
    • 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
    • 有时候根据业务的需求,可以考虑使用map传递参数!
    • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!

    7、分析错误

    • 标签不要匹配错
    • resource绑定mapper,需要使用路径!
    • 程序配置文件必须符合规范!
    • NullPointserException,没有注册到资源!
    • 输出的xml文件中存在乱码问题!
    • maven资源没有导出问题!

    7、模糊查询

    1. Java代码执行的时候,传递sql通配符%%

      list<name> names = mapper.selectlike("%李%");
      
    2. 在sql拼接中使用通配符!

      <select id=”selectlike”>
          select * from foo where bar like "%"#{value}"%"
      </select>
      
    懂不懂,都是收获
  • 相关阅读:
    webstorm
    web大文件上传(web应用---SSH框架)
    Webuploader 大文件分片上传
    百度Webuploader 大文件分片上传(.net接收)
    java使用WebUploader做大文件的分块和断点续传
    大文件上传插件webupload插件
    使用Webuploader大文件分片传输
    使用原生Java Web来实现大文件的上传
    Java实现浏览器端大文件分片上传
    怎样使用word2013发布csdn博客
  • 原文地址:https://www.cnblogs.com/paidaxing0623/p/14240016.html
Copyright © 2011-2022 走看看