一、使用Mybatis对表进行CRUD操作------基于XML的实现
1、定义SQL的映射文件
2、在conf.xml中进行注册。
2、创建测试类
【具体过程参考:Mybatis的学习总结一】
二、使用Mybatis对表进行CRUD操作----基于注解的实现
1、定义SQL映射的注解接口
ITaskMapper接口代码如下:
package com.cn.mybatis.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.cn.mybatis.model.EdiTestTask; public interface ITaskMapper { @Insert("INSERT into edi_test_task(task_id,task_name,task_type,task_owner) values(#{task_id},#{task_name},#{task_type},#{task_owner})") public int addTask(EdiTestTask editt); @Update("UPDATE edi_test_task set task_name=#{task_name},task_type=#{task_type}, task_owner=#{task_owner} where task_id=#{task_id}") public int updateTask(EdiTestTask editt); @Delete("delete from edi_test_task where task_id =#{taskId} ") public int deleteTask(String taskId); @Select("select * from edi_test_task where task_id=#{taskId}") public EdiTestTask getTaskById(String taskId); @Select("select * from edi_test_task") public List<EdiTestTask> getAllTasks(); }
注意:我们不需要针对ITaskMapper接口去编写具体的实现类代码,这个具体的实现类由MyBatis帮我们动态构建出来,我们只需要直接拿来使用即可。
2、在配置文件conf.xml中注册以上接口:
<mappers> <mapper resource="com/cn/mybatis/mapper/taskMapper.xml"/> <mapper class="com.cn.mybatis.mapper.ITaskMapper"/> </mappers>
3、创建单元测试类:TestTaskCRUD.class
package com.cn.mybatis.test; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import com.cn.mybatis.common.MybatisUtil; import com.cn.mybatis.mapper.ITaskMapper; import com.cn.mybatis.model.EdiTestTask; public class TestTaskCRUD { @Test public void testAdd(){ SqlSession ss=MybatisUtil.getSqlSession(); ITaskMapper mapper=ss.getMapper(ITaskMapper.class); EdiTestTask editt=new EdiTestTask(); editt.setTask_id("333"); editt.setTask_name("name"); editt.setTask_owner("owner"); editt.setTask_type("32"); int add=mapper.addTask(editt); ss.commit(); ss.close(); System.out.println("新增行数:"+add); } @Test public void testBupdate(){ SqlSession ss=MybatisUtil.getSqlSession(true); ITaskMapper mapper=ss.getMapper(ITaskMapper.class); EdiTestTask editt=new EdiTestTask(); editt.setTask_id("333"); editt.setTask_name("wangrs2"); editt.setTask_owner("owner2"); editt.setTask_type("322"); int update=mapper.updateTask(editt); ss.close(); System.out.println("更新行数:"+update); } @Test public void testCselect() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{ SqlSession ss=MybatisUtil.getSqlSession(); ITaskMapper mapper=ss.getMapper(ITaskMapper.class); EdiTestTask editt=mapper.getTaskById("333"); if(editt!=null){ Field[] fields=editt.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { String name=fields[i].getName(); name=name.substring(0,1).toUpperCase()+name.substring(1); String type=fields[i].getGenericType().toString(); Method m=editt.getClass().getMethod("get"+name); if(type.equals("int")||type.equals("class java.lang.Integer")){ int val=(Integer)m.invoke(editt); System.out.println("name:"+name+"————value:"+val); } if(type.equals("class java.lang.String")){ String value=(String)m.invoke(editt); System.out.println("name:"+name+"————value:"+value); } } } } @Test public void testDel(){ SqlSession ss=MybatisUtil.getSqlSession(true); ITaskMapper mapper=ss.getMapper(ITaskMapper.class); String taskId="333"; int del=mapper.deleteTask(taskId); ss.close(); System.out.println("已删除的行数:"+del); } }
公用的工具类:MybatisUtil 【获得SQLSession】 代码如下:
package com.cn.mybatis.common; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MybatisUtil { public static SqlSessionFactory getSqlSessionFactory(){ String reources="conf.xml"; InputStream is=MybatisUtil.class.getClassLoader().getResourceAsStream(reources); SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(is); return ssf; } public static SqlSession getSqlSession(){ SqlSession ss=MybatisUtil.getSqlSessionFactory().openSession(); return ss; } /*** * 获取SQLSession * @param isAutoCommint * true:表示创建的SQLSession对象在执行完SQL之后会自动提交事务 * false:表示创建SQLSession对象在执行完SQL之后不会自动提交事务,这时需要我们手动调用sql.commit()来提交事务 * @return */ public static SqlSession getSqlSession(boolean isAutoCommint){ return getSqlSessionFactory().openSession(isAutoCommint); } }