MyBatis的单表CRUD操作(基于代理Dao)

MyBatis的单表CRUD操作(基于代理Dao)

简要概括:我们使用MyBatis的目的就是简化CRUD操作的,使我们开发中只用注重sql的编写,其余的都交给MyBatis来处理就好。

1.MyBatis实现增加一条数据

  1. 持久层接口中编写增加一套数据的方法

    public interface UserDao {   
    	//保存用户
        void save(User user);
    }
    
  2. 在接口的映射配置文件中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.wang.dao.UserDao">  
        
    <!--保存用户-->
    <insert id="save" parameterType="com.wang.pojo.User">
    insert into user(username,password) values(#{username},#{password})
    </insert>
        
    </mapper>
    

    (1)这里第一次见的小伙伴,注意一下parameterType这个属性,这是表示方法中的参数类型,这里传入的参数是User类型,所以我这里写的是全类名。

    (2)之后还会有一些属性,遇到我都解释一下,这里不好举例子,下面的例子会一一说明。

    (3)这里还涉及到一个新的东西,#{ },这个代表的是占位符,就相当于我们之前学jdbc时候的?,这个其实就是著名的ognl表达式,这里就不介绍了。

  3. 测试类中编写测试程序检验一下

    由于后面都是测试方法,这里将公共的代码抽离出来

    	wInputStream in=null;
        SqlSessionFactory factory = null;
        SqlSession session = null;
        @Before
        public void init(){
            //读取配置文件
            try {
                in = Resources.getResourceAsStream("SqlMapConfig.xml");
            } catch (IOException e) {
                e.printStackTrace();
            }
            //创建工厂对象
            factory = new SqlSessionFactoryBuilder().build(in);
            //用SqlSessionFactory对象来创建SqlSession对象
            session = factory.openSession();
        }
        @After
        public void destroy(){
            session.commit();//事务提交
    
            session.close();
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    保存方法的测试程序如下:

    @Test
        public void test03(){
            UserDao dao = session.getMapper(UserDao.class);
            User user = new User();
            user.setUsername("wang");
            user.setPassword("123");
            dao.save(user);
        }
    

2.MyBatis中修改一条数据(根据id)

  1. 持久层接口中编写修改的方法

    public interface UserDao {   
        //根据id来修改对应的用户
        int updateUser(User user);
    }
    
  2. 在接口的映射配置文件中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.wang.dao.UserDao">  
    
    <!--更新用户-->
    <update id="updateUser" parameterType="com.wang.pojo.User">
    update user set username=#{username},password=#{password} where id=#{id}
    </update>
        
    </mapper>
    
  3. 测试类中编写测试程序检验一下

    @Test
    public void test04(){
       UserDao dao = session.getMapper(UserDao.class);
       User user = dao.findById(6);
       user.setUsername("来哥");
       dao.updateUser(user);
    }
    

3.MyBatis中删除一条数据(根据id)

  1. 持久层接口中编写删除的方法

    public interface UserDao {   
       //根据id来删除对应的用户
    	int deleteUser(int id);
    }
    
  2. 在接口的映射配置文件中配置

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.wang.dao.UserDao">   
    
    <!--删除用户-->
     <delete id="deleteUser" parameterType="int" >
         delete from user where id=#{id}
     </delete>
     </mapper>
    
  3. 测试类中编写测试程序检验一下

    @Test
    public void test05(){
        UserDao dao = session.getMapper(UserDao.class);
        dao.deleteUser(7);
    }
    

4.MyBatis的常用查询

这一块很重要,所有就放在博客的最后演示,这里涉及查询所有,查询一条数据,模糊查询三个部分,又会涉及到上面没有用的属性和方法。

  1. 查询表中的所有数据

    • 持久层接口中编写查询所有的方法

      public interface UserDao {   
          //查询所有
          List<User> findAll();
      }
      
    • 在接口的映射配置文件中配置

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.wang.dao.UserDao">
          <!--查询所有-->
          <select id="findAll" resultType="com.wang.pojo.User">
              select * from user
          </select>
          
       </mapper>
      

      这里有出现了一个新的属性resultType,这个属性用于指定结果集的类型,就是我们返回的类型。要是方法中有返回值,这里就要注明。

    • 测试类中编写测试程序检验一下

          @Test
          public void test01() throws Exception {
              //用SqlSession创建dao接口的代理对象
              UserDao dao = session.getMapper(UserDao.class);
              //用代理对象来调用查询所有方法
              List<User> all = dao.findAll();
              for (User user : all) {
                  System.out.println(user);
              }
          }
      
  2. 根据id查询一条数据

    • 持久层接口中编写查询所有的方法

      public interface UserDao {   
      //根据id查询用户
          User findById(int id);
      }
      
    • 在接口的映射配置文件中配置

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.wang.dao.UserDao">
          <!--根据id查询所有-->
          <select id="findById" resultType="com.wang.pojo.User" parameterType="int">
              select * from user where id = #{id}
          </select>
          
       </mapper>
      
    • 测试类中编写测试程序检验一下

          @Test
          public void test02(){
              UserDao dao = session.getMapper(UserDao.class);
              User user = dao.findById(1);
              System.out.println(user);
          }
      
  3. 模糊查询

    • 持久层接口中编写查询所有的方法

      public interface UserDao {   
          //根据用户名来模糊查询
          List<User> findByname(String name);
      }
      
    • 在接口的映射配置文件中配置

      第一种:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.wang.dao.UserDao">
      
      <!--对用户名进行模糊查询-->
          <select id="findByname" parameterType="string" resultType="com.wang.pojo.User">
              select * from user where username like '%${value}%'
          </select>
          
      </mapper>   
      

      这是第一种写法,'%${value}%',这又是本博客中第一次出现的新的知识点,这里就简单介绍一下,${}表示的是拼接sql串,在这里就是将parameterType传入的参数拼接在sql中且不进行jdbc类型转换,这里特别强调一下:如果parameterType传入的是单个简单类型值,${ }中只能写value,这又是我这里为什么写的是value了。

      这个对应的下面的测试第一种

      第二种:

      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.wang.dao.UserDao">
      
      <!--对用户名进行模糊查询-->
          <select id="findByname" parameterType="string" resultType="com.wang.pojo.User">
              select * from user where username like #{username}
          </select>
          
      </mapper>   
      

      这是站位符的方式,对应的测试是下面的第二种

    • 测试类中编写测试程序检验一下

      第一种:

          @Test
          public void test06(){
              UserDao dao = session.getMapper(UserDao.class);
              List<User> list = dao.findByname("泰");
              for (User user : list) {
                  System.out.println(user);
              }
          }
      

      第二种:

          @Test
          public void test06(){
              UserDao dao = session.getMapper(UserDao.class);
              List<User> list = dao.findByname("%泰%");
              for (User user : list) {
                  System.out.println(user);
              }
          }
      

总结:上面的是使用MyBatis的dao代理方式写单表的CRUD,后面我会更新多表的操作,觉得有帮助的给个关注+点赞。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值