zoukankan      html  css  js  c++  java
  • Mybatis的CRUD

    3、CRUD

    1、namespace

    namespace中的包名要和 Dao/mapper 接口的包名一致!

    2、select

    选择,查询语句;

    • id : 就是对应的namespace中的方法名;
    • resultType:Sql语句执行的返回值!
    • parameterType : 参数类型!
    1. 编写接口

      //根据ID查询用户
      User getUserById(int id);
      
    2. 编写对应的mapper中的sql语句

      <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
              select * from mybatis.user where id = #{id}
      </select>
      
      
    3. 测试

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

    3、Insert

        <!--对象中的属性,可以直接取出来-->
        <insert id="addUser" parameterType="com.kuang.pojo.User">
            insert into mybatis.user (id, name, pwd) values (#{id},#{name},#{pwd});
        </insert>
    
    @Test
    	public void addUserTest() {
    		SqlSession sqlSession = MybatisUtils.getSqlSession();
    
    		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    		int res = userMapper.addUser(new User(4,"hhh","123"));
    		if (res > 0) {
    			System.out.println("插入成功");
    		}
    		//
    		sqlSession.commit();
    		sqlSession.close();
    	}
    

    4、update

        <update id="updateUser" parameterType="com.kuang.pojo.User">
            update mybatis.user set name=#{name},pwd=#{pwd}  where id = #{id} ;
        </update>
    
    

    5、Delete

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

    注意点:

    • 增删改需要提交事务!

    6、分析错误

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

    7、万能Map

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

    若传入的是User对象,构造方法有很多参数 如果属性过多,你的sql语句赋值就会很长

    传入Map的情况,values是通过key,key可以随便起,不像User被字段所约束。

        //万能的Map
        int addUser2(Map<String,Object> map);
    
    
        <!--对象中的属性,可以直接取出来    传递map的key-->
        <insert id="addUser" parameterType="map">
            insert into mybatis.user (id, pwd) values (#{userid},#{passWord});
        </insert>
    
        @Test
        public void addUser2(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
    
            Map<String, Object> map = new HashMap<String, Object>();
    
            map.put("userid",5);
            map.put("passWord","2222333");
    
            mapper.addUser2(map);
    
            sqlSession.close();
        }
    
    

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

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

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

    多个参数用Map,或者注解!

    8、思考题

    模糊查询怎么写?

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

      List<User> userList = mapper.getUserLike("%李%");
      
    2. 在sql拼接中使用通配符!这种情况可能会有sql注入问题

      select * from mybatis.user where name like "%"#{value}"%"
      
  • 相关阅读:
    json编解码
    Grok 正则捕获
    logstash date插件介绍
    logstash 字段类型转换后 需要刷新
    logstash 防止实际处理时间跟事件产生时间略有偏差
    导入旧数据需要 使用date插件
    nginx和tomcat的响应时间
    解决kibana 4 关于响应时间的问题
    go 可以开发桌面应用
    windows下go语言环境
  • 原文地址:https://www.cnblogs.com/yhnCoder/p/13619954.html
Copyright © 2011-2022 走看看