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();
    }
    

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

  • 相关阅读:
    C#获取windos 登录用户信息
    像我这样的人
    只道情深,奈何缘浅(雪之轻裳搜集)
    如果我死了,还剩下什么(雪之轻裳)
    嫁给爱情 还是嫁给现实(搜集)
    排名前 16 的 Java 工具类
    java 获取当前屏幕截图
    转:零售数据观(一):如何花30分钟成为一个标签设计“达人”
    转:数据指标系列:电商数据分析指标体系总结V1.0
    转:领域模型中的实体类分为四种类型:VO、DTO、DO、PO
  • 原文地址:https://www.cnblogs.com/phantom576/p/11918512.html
Copyright © 2011-2022 走看看