• 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 注入的问题

  • 相关阅读:
    刚听完CSDN总裁蒋涛先生的学术报告
    WinForm下屏幕截图程序的实现
    .NET4.5 Async 与 Async Targeting Pack区别
    WP8中的Tiles
    WP8中调用APP的方式
    安装Win8后必做的优化
    如何将项目从WP7升级到WP8
    ActiveWriter集成到VS.NET的NHibernate(ActiveRecord)对象可视化设计工具
    概述CSLA.NET 3.6 (Overview of CSLA .NET 3.6 for Windows and Silverlight)
    SQL Server BI Step by Step 1 准备
  • 原文地址:https://www.cnblogs.com/lxsfve/p/13693587.html
Copyright © 2020-2023  润新知