• ##Mybatis框架之—— 基于代理 Dao 实现 CRUD 操作


    Mybatis框架之—— 基于代理 Dao 实现 CRUD 操作

    • 使用要求:
      1、持久层接口和持久层接口的映射配置必须在相同的包下
      2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名
      3、SQL 语句的配置标签<select>,<insert>,<update>,<delete>的 id 属性必须和持久层接口的方法名相同。
      ##1,在持久层接口中添加,(根据id查询),(新增),(删除),(修改)方法
    /**
    * 根据 id 查询
    * @param userId
    * @return
    */
    User findById(Integer userId);
    /**
    * 保存用户
    * @param user
    * @return 影响数据库记录的行数
    */
    int saveUser(User user);
    /**
    * 更新用户
    * @param user
    * @return 影响数据库记录的行数
    */
    int updateUser(User user);
    /**
    * 根据 id 删除用户
    * @param userId
    * @return
    */
    int deleteUser(Integer userId);

      ##2,在用户的映射文件中配置

    <!-- 根据 id 查询 -->
    <select id="findById" resultType="com.itheima.domain.User" parameterType="int">
      select * from user where id = #{uid}
    </select>
    <!-- 保存用户-->
    <insert id="saveUser" parameterType="com.itheima.domain.User">
      insert into user(username,birthday,sex,address) 
    values(#{username},#{birthday},#{sex},#{address})
    </insert>
    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.itheima.domain.User">
      update user set username=#{username},birthday=#{birthday},sex=#{sex},
    address=#{address} where id=#{id}
    </update>
    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="java.lang.Integer">
      delete from user where id = #{uid}
    </delete>
      resultType 属性:用于指定结果集的类型。
      parameterType 属性:用于指定传入参数的类型。
      sql 语句中使用#{}字符:它代表占位符,相当于原来 jdbc 部分所学的?,都是用于执行语句时替换实际的数据。具体的数据是由#{}里面的内容决定的。
     
      #{}中内容的写法:由于我们保存方法的参数是 一个 User 对象,此处要写 User 对象中的属性名称。
    它用的是 ognl 表达式。
      ognl 表达式:它是 apache 提供的一种表达式语言全称是:Object Graphic Navigation Language 对象图导航语言,它是按照一定的语法格式来获取数据的。
      #{user.username}它会先去找 user 对象,然后在 user 对象中找到 username 属性,并调用getUsername()方法把值取出来。但是我们在 parameterType 属性上指定了实体类名称,所以可以省略 user.而直接写 username。

      ##3,测试方法:

    public class MybastisCRUDTest {
      private InputStream in ;
      private SqlSessionFactory factory;
      private SqlSession session;
      private IUserDao userDao;
      @Test
      public void testFindOne() {
        //6.执行操作
        User user = userDao.findById(41);
        System.out.println(user);
      }
      @Before//在测试方法执行之前执行
      public void init()throws Exception {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建构建者对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.创建 SqlSession 工厂对象
        factory = builder.build(in);
        //4.创建 SqlSession 对象
        session = factory.openSession();
        //5.创建 Dao 的代理对象
        userDao = session.getMapper(IUserDao.class);
      }
      @After//在测试方法执行完成之后执行
      public void destroy() throws Exception{
        session.commit();
        //7.释放资源
        session.close();
        in.close();
      }
    }

      保存数据

    @Test
    public void testSave(){
      User user = new User();
      user.setUsername("modify User property");
      user.setAddress("北京市顺义区");
      user.setSex("男");
      user.setBirthday(new Date());
      System.out.println("保存操作之前:"+user);
      //5.执行保存方法
      userDao.saveUser(user);
      System.out.println("保存操作之后:"+user);
    }
      切记:session.commit();
      更改数据:
    @Test
    public void testUpdateUser()throws Exception{
      //1.根据 id 查询
      User user = userDao.findById(52);
      //2.更新操作
      user.setAddress("北京市顺义区");
      int res = userDao.updateUser(user);
      System.out.println(res);
    }

      删除数据:

    @Test
    public void testDeleteUser() throws Exception {
      //6.执行操作
      int res = userDao.deleteUser(52);
      System.out.println(res);
    }

    二,还有一个模糊查询:

    /**
    * 根据名称模糊查询
    * @param username
    * @return
    */
    List<User> findByName(String username);

    在映射配置文件中的配置:

    <!-- 根据名称模糊查询 -->
    <select id="findByName" resultType="com.itheima.domain.User" parameterType="String">
       select * from user where username like #{username}
    </select>

    测试:

    @Test
     public void testFindByName(){
         //5.执行查询一个方法
         List<User> users = userDao.findByName("%王%");
         for(User user : users){
         System.out.println(user);
         }
     }
  • 相关阅读:
    ArduinoYun教程之ArduinoYun硬件介绍
    Nmap扫描教程之基础扫描详解
    Nmap扫描教程之Nmap基础知识
    Nmap扫描教程之DNS服务类
    Nmap扫描教程之网络基础服务DHCP服务类
    Xamarin iOS教程之自定义视图
    Xamarin iOS教程之警告视图
    Xamarin iOS教程之页面控件
    使用光学鼠标传感器实现旋转(或线性)测量(转)
    基于STM32的uCOS-II移植详解
  • 原文地址:https://www.cnblogs.com/liurui-bk517/p/11305199.html
Copyright © 2020-2023  润新知