CRUD(增删改查)

本文介绍了Mybatis中进行CRUD操作的基本步骤和注意事项,包括namespace的配置、select标签的使用、错误分析及解决建议。强调了namespace的包名应与Dao接口一致,select标签的id、resultType和paramType属性的设置,以及增删改操作中事务的提交。同时提醒注意避免标签错误和资源绑定的路径问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CRUD

1、namespace的一些概念和使用

namespace中的包名一定要和Dao层中的接口名一致,不然容易爆以下的错误。

org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the MapperRegistry.

	at org.apache.ibatis.binding.MapperRegistry.getMapper(MapperRegistry.java:47)
	at org.apache.ibatis.session.Configuration.getMapper(Configuration.java:779)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.getMapper(DefaultSqlSession.java:291)
	at Test2.test2(Test2.java:13)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

2、select

选择查询语言(主要是Dao层下面的xml文件)

  • id:就是Dao层接口中方法的名字,主要功能是让sql工厂知道调用哪个方面

  • resultType:sql语句主要是返回值类型

  • parameType:参数的类型(这个主要是根据参数,比如说Dao层中一个接口的一个方法为User userGetById(int id);这个时候就要用参数这个类型,输入参数)

        //根据参数返回用户值,这个是在Dao层里面的一个接口,注意方法名,参数和返回值
        User getUserById(int id);
    
        <select id="getUserById" parameterType="int" resultType="com.kuang.pojo.User">
            select * from mybatis.user where id = #{id}
        </select>
    <!--这个是在Dao层下面的一个xml文件里的,注意这个参数是如何写的,#{}里面的id和接口中的参数名是一样的-->
    
            SqlSession sqlSession = MabatisUtils.getSqlSession();
    		//记住是接口名.class,不是别的xml文件名.class
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            User userById = mapper.getUserById(1);
            System.out.println(userById);
            sqlSession.close();
    //这个主要是测试里面使用的方法和调用,记住这样的一个模式
    
  • 一个方法对应一个sql语句

  • Insert语句插入的方法和过程

        //插入一个对象,一般来说插入对象是没有返回值的,所以可以将返回值弄成void
        int InsertUser(User user);
    
        <!--对象中的属性可以直接取出来,不需要User.id等操作-->
        <insert id="InsertUser" parameterType="com.kuang.pojo.User">
            insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd})
        </insert>
    
            SqlSession sqlSession = MabatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
    		//注意以下这几点
            User user = new User(5,"jinyu","123");
    		//这个i可以验证是否插入成功,成功1,失败0,所以可以使用i>0进行判断是否插入成功
            int i = mapper.InsertUser(user);
            System.out.println(i);
    		//增删改查,一定要记住是否提交,一定一定要注意这个不然可能无法提交东西
    		sqlSession.commit();
            sqlSession.close();
    
  • 修改一个数据的方法和过程

        //修改一个对象
        int updateUser(User user);
    
        <!--                                -->
        <update id="updateUser" parameterType="com.kuang.pojo.User">
            update mybatis.user set name = #{name} where id = #{id}
        </update>
    
            SqlSession sqlSession = MabatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            User user = new User(5,"金宇","123");
            int i = mapper.updateUser(user);
            System.out.println(i);
    		//注意提交事务
            sqlSession.commit();
            sqlSession.close();
    
  • 删除一个对象的方法

        //删除一个用户
        int deleteUser(int id);
    
        <!--删除一个用户-->
        <delete id="deleteUser" parameterType="int">
            delete  from mybatis.user where id =#{id}
        </delete>
    
            SqlSession sqlSession = MabatisUtils.getSqlSession();
            UserDao mapper = sqlSession.getMapper(UserDao.class);
            int i = mapper.deleteUser(5);
            System.out.println(i);
            sqlSession.commit();
            sqlSession.close();
    

注意:增删改一定要提交事务

3、分析错误和指导

  • 标签不要写错
  • resource中绑定xml需要路径
  • 读错从后往前读
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值