zoukankan      html  css  js  c++  java
  • mybatis (二) CRUD 操作

    mybatis (二) CRUD 操作

    所有操作的步骤就是 在mapper接口中写方法,在对应的xml中填写 相应的语句 或者使用注解来实现

    1.增加

    1.1 在接口中编写方法

    /**
     * 添加一个用户
     *
     * @param userK
     * @return int
     * @author 小小的梦想丶
     * @date 2020/09/17 19:55:13
     */
    int addUser(UserK userK)
    

    1.2 使用注解或者xml配置写sql

    <insert id="addUser">
        insert into mybatis.user_k values (id=#{id,jdbcType=INTEGER},
        name=#{name,jdbcType=VARCHAR},pwd=#{pwd,jdbcType=VARCHAR})
    </insert>
    

    其中需要注意的点是 id 需要和接口中方法的名字对应

    1.3 测试

    SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserKMapper mapper = sqlSession.getMapper(UserKMapper.class);
        //因为 id 在数据库设计的是自增 所以 这里写null
        UserK userK = new UserK(null, "haha", "haha");
        int i = mapper.addUser(userK);
        System.out.println(i);
    

    2.删除

    2.1 编写接口

    int deleteUserK(Integer id);

    2.2通过注解 编写sql

    @Delete("delete from mybatis.user_k uk where id=#{id} ")

    2.3测试

    int i = mapper.deleteUserK(1);
    

    3.改

    3.1编写接口

    int updateUserK(UserK1 userK1);

    3.2 编写xml配置

    <update id="updateUserK">
        update mybatis.user_k
        set pwd = #{pwd}
        where id=#{id};
    </update>			
    

    3.3测试

    UserK1 userK1 = new UserK1(3, null, "123456");
        mapper.updateUserK(userK1);
    

    4.查询

    4.1 编写接口

    /**
     * 查询所有的用户
     *
     * @param
     * @return java.util.List<com.qlx.pojo.UserK1>
     * @author 小小的梦想丶
     * @date 2020/09/18 10:41:10
     */
    @Select("select * from mybatis.user_k uk ")
    List<UserK1> queryAllUserK1();
    
    /**
     * 根据id  来查用户信息
     *
     * @param id
     * @return com.qlx.pojo.UserK1
     * @author 小小的梦想丶
     * @date 2020/09/18 10:55:49
     */
    UserK1 getUserK1ById(Integer id);
    

    4.2 编写xxxMapper.xml 或者使用注解

    其中 查询所有的用户我们使用注解根据 id 查询用户我们使用xml配置的方式来使用

    <select id="getUserK1ById" resultType="com.qlx.pojo.UserK1">
        select * from mybatis.user_k uk where id=#{id}
    </select>
    

    4.3 测试demo

    public class demo {
        //这里通过工具类  获取sqlSession 
    SqlSession sqlSession = MyBatisUtils1.getSqlSession();
    UserK1Mapper mapper = sqlSession.getMapper(UserK1Mapper.class);
    
    @Test
    public void testQueryAllUserK1() {
        List<UserK1> userK1s = mapper.queryAllUserK1();
        userK1s.forEach(System.out::println);
    }
    
    @Test
    public void testGetUserK1ById() {
        UserK1 userK1ById = mapper.getUserK1ById(1);
        System.out.println(userK1ById);
    }
    }
    

    我们可以通过日志 来 查看 执行的sql语句 和结果

    //这是查询所有用户的信息的结果
    Opening JDBC Connection
    Created connection 1847637306.
    ==>  Preparing: select * from mybatis.user_k uk
    ==> Parameters: 
    <==    Columns: id, name, pwd
    <==        Row: 1, 张三, 123456
    <==        Row: 2, 李四, 123456
    <==        Row: 3, 哈哈, 78954
    <==      Total: 3
    UserK1(id=1, name=张三, pwd=123456)
    UserK1(id=2, name=李四, pwd=123456)
    UserK1(id=3, name=哈哈, pwd=78954)
    
    //这是根据查询用户信息的结果
    Opening JDBC Connection
    Created connection 22600334.
    ==>  Preparing: select * from mybatis.user_k uk where id=?
    ==> Parameters: 1(Integer)
    <==    Columns: id, name, pwd
    <==        Row: 1, 张三, 123456
    <==      Total: 1
    UserK1(id=1, name=张三, pwd=123456)
    

    5. Map

    在插入一个用户的时候 insert into mybatis.user_k(id, name, pwd) VALUES (id=#{id},name=#{name},pwd=#{pwd}) 其中有很多的的字段,如果字段太多我们也不可能都写出来, 解决办法就是使用Map 来解决

    5.1 编写接口

      int addUserK2(Map<String, Object> map);
    

    5.2 编写 xml

    <!--因为  #{这里的字段可以随便起名字  不必要和实体类和数据库中的一致}-->
    <insert id="addUserK2" parameterType="map">
        insert into mybatis.user_k(id,name, pwd) VALUES (id=#{userkid},name=#{userkname},pwd=#{userkpwd})
    </insert>
    

    5.3测试

    @Test
    public void testAddUserK2() {
        HashMap<String, Object> map = new HashMap<>();
        map.put("id", 16);
        map.put("userkname", "userkname");
        map.put("userkpwd", "userkpwd");
        int i = mapper.addUserK2(map);
        System.out.println(i);
    }
    

    Map传递参数,直接在sql中取出key即可 parameterType=“map”

    对象传递参数,直接在sql中取对象的属性即可 parameterType=“Object”

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

    6.模糊查询

    6.1 第一种

    /**
     * 查询所有姓李的
     *
     * @param
     * @return java.util.List<com.qlx.pojo.UserK1>
     * @author 小小的梦想丶
     * @date 2020/09/18 21:05:41
     */
    List<UserK1> queryUserkLike(String value);
    
    <select id="queryUserkLike" resultType="com.qlx.pojo.UserK1">
        select *
        from mybatis.user_k uk
        where name like #{value}
    </select>
    

    在测试的时候 我们通过 手动 拼接 %李% 也可以查询出来

    @Test
    public void testQueryUserKLike() {
        List<UserK1> userK1s = mapper.queryUserkLike("%李%");
        userK1s.forEach(System.out::println);
    }
    

    查询结果:

    Opening JDBC Connection
    Created connection 1021436681.
    ==>  Preparing: select * from mybatis.user_k uk where name like ?
    ==> Parameters: %李%(String)
    <==    Columns: id, name, pwd
    <==        Row: 2, 李四, 123456
    <==        Row: 4, 李五, null
    <==      Total: 2
    UserK1(id=2, name=李四, pwd=123456)
    UserK1(id=4, name=李五, pwd=null)
    

    6.2 第二种方法

     List<UserK1> queryUserkLike2(String value);
    
    <select id="queryUserkLike2" resultType="com.qlx.pojo.UserK1">
        select *
        from mybatis.user_k
        where user_k.name like "%"#{value}"%"
    </select>
    
    @Test
    public void testQueryUserKLike2() {
        List<UserK1> userK1s = mapper.queryUserkLike2("李");
        userK1s.forEach(System.out::println);
    }
    

    同样可以得到 相同的结果 ,但是可能存在 sql 注入的问题

  • 相关阅读:
    LA 2038 Strategic game(最小点覆盖,树形dp,二分匹配)
    UVA 10564 Paths through the Hourglass(背包)
    Codeforces Round #323 (Div. 2) D 582B Once Again...(快速幂)
    UVALive 3530 Martian Mining(贪心,dp)
    UVALive 4727 Jump(约瑟夫环,递推)
    UVALive 4731 Cellular Network(贪心,dp)
    UVA Mega Man's Mission(状压dp)
    Aizu 2456 Usoperanto (贪心)
    UVA 11404 Plalidromic Subsquence (回文子序列,LCS)
    Aizu 2304 Reverse Roads(无向流)
  • 原文地址:https://www.cnblogs.com/lxsfve/p/13693587.html
Copyright © 2011-2022 走看看