zoukankan      html  css  js  c++  java
  • 使用Mybatis实现基本操作CRUD

    1、基于上篇内容的扩展 还是使用上次的数据库 上次创建的user表
    2、创建maven工程 并且导入相应的jar包的坐标
    3、创建user类 并且将属性和数据库中的各个相应列名对应 并且提供它的setter和getter方法 以及toString方法
    4、编写dao接口 在里面提供相应的抽象方法
    5、编写IUserDao.xml配置文件 该文件放置resources目录下的相应文件夹下 文件夹与main/java中的文件夹相对应
    6、编写主配置文件 里面配置数据库的相关信息 配置映射文件的相关信息
    7、编写测试类 进行测试
    本章所有的内容都是基于这个步骤 其中1 2 3 都是相同的不再做任何赘述
    一、查询
    (1)在dao接口中提供这样一个抽象方法
    /*
    * 根据id查询用户
    * */
    public User findById(Integer id);
    (2)根据用户id实现查询的操作 在IUserDao.xml中添加如下配置

    这里的parameterType表示的是参数的类型 这里是整数类型 所以可以写int java.lang.Integer等都行 另外resultType表示返回值类型 这里返回的是User类型
    另外解释以下#{} 这个代表的是占位符 相当于原来的? 这里的数据类型是基本类型 所以{}里面的内容可以随便写
    (3)主配置文件中还是基于上篇文章中的配置

    (4)编写测试类
    public void testFindById() throws Exception {
    //1、读取配置文件
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2、创建sqlsessionFatory
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(inputStream);
    //3、生产sqlsession对象
    SqlSession session = sessionFactory.openSession();
    //4、创建接口代理类对象
    IUserDao mapper = session.getMapper(IUserDao.class);
    System.out.println(mapper);
    //5、调用方法
    User user = mapper.findById(42);
    System.out.println(user);
    //6、关闭资源
    inputStream.close();
    session.close();
    }
    测试结果输出:
    User{id=42, username='大王', birthday=Fri Mar 02 15:09:37 CST 2018, sex='女', address='上海'}

    二、插入
    新增一个用户
    1、在dao接口类中添加一个新的方法
    /*
    * 添加新的用户
    * */
    public void saveUser(User user);
    2、在映射文件中进行配置

    <insert id="saveUser" parameterType="com.itheima.domain.User">
        INSERT INTO user(username,birthday,sex,address) VALUES(#{username},#{birthday},#{sex},#{address});
    </insert>
    

    这里因为操作的是一个对象 所以这里我们使用ognl表达式 所以这里的占位符要写对象中的属性名 另外这里指明了参数的类型是User类型 所以我们不用写#{user.username}这种形式 只需要进行简写#{username}
    3、进行测试
    public void testSaveUser() throws Exception {
    //1、读取配置文件
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2、创建sqlsessionFatory
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(inputStream);
    //3、生产sqlsession对象
    SqlSession session = sessionFactory.openSession();
    //4、创建接口代理类对象
    IUserDao mapper = session.getMapper(IUserDao.class);
    System.out.println(mapper);

        User user = new User();
        user.setUsername("申公豹");
        user.setSex("男");
        user.setBirthday(new Date());
        user.setAddress("封神榜");
        //5、调用方法
        mapper.saveUser(user);
        //6、关闭资源
        inputStream.close();
        session.close();
    }
    

    测试完成之后:刷新数据库 发现没有 插入进去

    看到控制台上有这句话 Setting autocommit to false on JDBC Connection 这是将自动提交事务改变成了手动提交事务 所以在进行增删改的操作的时候 我们必须进行手动提交事务
    所以我们在测试类中资源释放之前加上session.commit()这句话就可以提交事务了
    修改完后测试的结果:刷新数据库

    三、更新用户
    (1)在接口中加入相应得抽象方法
    /*
    * 更新用户
    * */
    public void updateUser(User user);
    (2)添加映射配置文件

    <insert id="updateUser" parameterType="com.itheima.domain.User">
        update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} WHERE id=#{id}
    </insert>
    

    (3)添加测试方法
    @Test
    public void testUpdateUser() throws Exception {
    //1、读取配置文件
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2、创建sqlsessionFatory
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(inputStream);
    //3、生产sqlsession对象
    SqlSession session = sessionFactory.openSession();
    //4、创建接口代理类对象
    IUserDao mapper = session.getMapper(IUserDao.class);
    System.out.println(mapper);

        User user = mapper.findById(42);
        user.setAddress("大黑洞");
        mapper.updateUser(user);
        session.commit();
        //6、关闭资源
        inputStream.close();
        session.close();
    }
    

    测试结果 刷新数据库

    四、删除
    (1)在接口中添加方法
    /*
    * 根据id删除用户
    * */
    public void deleteUser(Integer id);
    (2)配置映射文件

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

    (3)测试
    @Test
    public void testDeleteUser() throws Exception {
    //1、读取配置文件
    InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //2、创建sqlsessionFatory
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    SqlSessionFactory sessionFactory = builder.build(inputStream);
    //3、生产sqlsession对象
    SqlSession session = sessionFactory.openSession();
    //4、创建接口代理类对象
    IUserDao mapper = session.getMapper(IUserDao.class);
    System.out.println(mapper);

        mapper.deleteUser(42);
        session.commit();
        //6、关闭资源
        inputStream.close();
        session.close();
    }
    

    测试结果:数据库中没有那条数据了

  • 相关阅读:
    io学习
    asp.net文件上传进度条研究
    asp.net页面中的Console.WriteLine结果如何查看
    谨慎跟随初始目的不被关联问题带偏
    android 按钮特效 波纹 Android button effects ripple
    安卓工作室 日志设置
    安卓工作室 文件浏览器 android studio File browser
    一个新的Android Studio 2.3.3可以在稳定的频道中使用。A new Android Studio 2.3.3 is available in the stable channel.
    新巴巴运动网上商城 项目 快速搭建 教程 The new babar sports online mall project quickly builds a tutorial
    码云,git使用 教程-便签
  • 原文地址:https://www.cnblogs.com/phantom576/p/11918512.html
Copyright © 2011-2022 走看看