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需要路徑
- 讀錯從後往前讀