• Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】


    一、使用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);
        }
        
    
    }
  • 相关阅读:
    虚拟机安装配置
    大整数加法 面试题
    结构体
    操作文件
    Gcd HDU
    牛客练习赛47 A DongDong破密码 (异或性质,递推)
    ACM常用之 异或运算的性质。
    Wannafly挑战赛22 C 多项式(大数,多项式极限)
    大数全能模板
    Wannafly挑战赛22 D 整数序列 (线段树维护三角函数值)
  • 原文地址:https://www.cnblogs.com/renxiaoren/p/5242727.html
Copyright © 2020-2023  润新知