美文网首页
3.平凡之路-传统模式添加操作

3.平凡之路-传统模式添加操作

作者: 胖先森 | 来源:发表于2017-08-25 10:11 被阅读0次

回顾: 上节课我们完成了MyBatis的环境搭建
核心配置文件
映射文件
API的执行过程
如何执行定制的SQL语句

我们测试的是"死"的数据,那么下面我们使用容器传递动态的数据

添加操作传递数据专题

1.通过Map传递数据

  • 映射文件代码
 <!--  <insert id="add02" 
    parameterType="java.util.Map"></insert> -->
  <insert id="add02" 
    parameterType="map">
    INSERT INTO skill  (skill_name,num) 
        VALUES 
     (#{shxt},#{number})
    </insert>

parameterType : 传递参数数据的类型 java.util.Map或者MyBatis提供额内置类型映射map
#{map中的Key}获取对应的值,并且进行了预处理

  • Java测试代码
public class 动态数据之通过Map传递数据 {
    public static void main( String[] args ) {
        SqlSession sqlSession = null;
        try {
            //1.读取核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建SqlSession工厂(SqlSessionFactory) 
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //3.获取SqlSession 
            //****** SqlSession完成所有的持久化操作CRUD
            sqlSession = sqlSessionFactory.openSession();
            //4.关键步骤: 定位执行SQL语句
            //****如何定位  (namespace+"."+id)

            Map<String, Object> map = new HashMap<String, Object>();
            map.put("shxt", "CSS");
            map.put("number", 66);

            int row = sqlSession.insert("shxt.cy42.mss.add02",map);
            //5.针对于CUD操作需要手动提交事务
            sqlSession.commit();
            System.out.println("影响的行数:"+row);
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
            //6.关闭资源
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }

}
  • 图解说明


    map传递数据

2.通过自定义Java类传递数据

  • 自定义Java类
public class Skill {

    private Integer skillId;
    private String skillName;
    private Integer skillNumber;
       //省略getter和setter方法
}
  • 映射文件代码
    <insert id="add03" 
    parameterType="com.shxt.model.Skill">
    INSERT INTO skill  (skill_name,num) 
        VALUES 
     (#{skillName},#{skillNumber})
    </insert>

parameterType:如果不是Java内容类型,可以设置自定义类型的全路径,后面我们也可以
设置自定义别名
#{Java类中属性}获取对应的值

  • Java代码测试
public class 动态数据之通过Skill持久化类传递数据 {
    public static void main( String[] args ) {
        SqlSession sqlSession = null;
        try {
            //1.读取核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建SqlSession工厂(SqlSessionFactory) 
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //3.获取SqlSession 
            //****** SqlSession完成所有的持久化操作CRUD
            sqlSession = sqlSessionFactory.openSession();
            //4.关键步骤: 定位执行SQL语句
            //****如何定位  (namespace+"."+id)


            Skill s = new Skill();
            s.setSkillName("jquery");
            s.setSkillNumber(99);

            int row = sqlSession.insert("shxt.cy42.mss.add03",s);//传递数据哟
            //5.针对于CUD操作需要手动提交事务
            sqlSession.commit();
            System.out.println("影响的行数:"+row);
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
            //6.关闭资源
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }

}

  • 图解说明


    使用自定义Java类传递数据

3.关联对象

  • 自定义Java类
    Teacher.java
public class Teacher {
    private Integer id;
    private String name;
       //省略getter和setter方法
}

Skill.java

public class Skill {

    private Integer skillId;
    private String skillName;
    private Integer skillNumber;

    //关联对象
    private Teacher teacher;
}
  • 映射文件代码
    <insert id="add04" 
    parameterType="com.shxt.model.Skill">
    INSERT INTO skill  (skill_name,num,fk_teacher_id) 
        VALUES 
     (#{skillName},#{skillNumber},#{teacher.id})
    </insert>

#{teacher.id}关联对象使用"."运算符

  • Java测试代码
public class 动态数据之保存技能同时需要保存老师ID {
    public static void main( String[] args ) {
        SqlSession sqlSession = null;
        try {
            //1.读取核心配置文件
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //2.创建SqlSession工厂(SqlSessionFactory) 相当于 Connection
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
            //3.获取SqlSession 相当于 执行SQL语句对象PreparedStament预处理对象
            //****** SqlSession完成所有的持久化操作CRUD
            sqlSession = sqlSessionFactory.openSession();
            //4.关键步骤: 定位执行SQL语句
            //****如何定位  (namespace+"."+id)


            Skill s = new Skill();
            s.setSkillName("MyBatis");
            s.setSkillNumber(100);
            //假设建立一个老师
            Teacher t = new Teacher();
            t.setId(-999);
            t.setName("胖先森");
            //建立联系
            s.setTeacher(t);


            int row = sqlSession.insert("shxt.cy42.mss.add04",s);
            //5.针对于CUD操作需要手动提交事务
            sqlSession.commit();
            System.out.println("影响的行数:"+row);
        } catch (IOException ex) {
            ex.printStackTrace();
        }finally {
            //6.关闭资源
            if(sqlSession!=null){
                sqlSession.close();
            }
        }
    }

}

  • 图解说明


    关联对象

4.返回自增长主键设置

  • 映射文件
    <!-- 添加返回主键设置 -->
    <insert id="add05" 
    parameterType="com.shxt.model.Skill" 
    useGeneratedKeys="true" 
    keyProperty="skillId">
    
    INSERT INTO skill  (skill_name,num) 
        VALUES 
     (#{skillName},#{skillNumber})
    </insert>

keyProperty 将自增长的主键值赋值给skillId属性

相关文章

  • 3.平凡之路-传统模式添加操作

    回顾: 上节课我们完成了MyBatis的环境搭建核心配置文件映射文件API的执行过程如何执行定制的SQL语句 我们...

  • 10.平凡之路-传统模式和接口代理模式

    在我之前的过学习过程中,我们一直使用的传统模式,由自己去完成接口对应的实现类,这样无形中增加了很多的代码,因此My...

  • python文件操作

    文件操作 打开、操作、关闭 需要添加模式,r表示读模式,w表示写模式,且读的模式下只能读,写的模式下只能写,这里的...

  • 单例模式

    1.传统懒汉模式 1.1 小栗子 1.2 测试 2.对传统懒汉模式的优化 2.1 小栗子 2.2 测试 3.传统饥...

  • centos7添加/删除用户操作

    centos添加/删除用户操作 进入root模式下 添加用户adduser 给新用户添加密码passwd 会显示...

  • 【第5天】python全栈从入门到放弃

    1.文件操作r模式 2.文件操作w模式 该模式(w)不是追加,会清空掉文件之前的内容,重新写内容 3.文件操作a模...

  • 继承

    继承发展史 1.传统形式-->原型链 2.借用构造函数 3.共享原型 4.圣杯模式(就比上面多添加了F) 即使被n...

  • Java IO与NIO浅谈

    一、传统IO模式下的文件读取传统的文件IO操作都是调用OS提供的底层标准IO操作读取函数read()、write(...

  • CGLib - 另一种动态代理的实现方式

    代理模式 代理模式:是设计模式(Design Pattern)的一种,旨在通过代理为某些操作添加额外的处理,比如涉...

  • OC新建项目流程

    设置CocoPod,MVC模式 3.添加pch文件 向项目中添加新文件,在Other中选择PCH Filepch....

网友评论

      本文标题:3.平凡之路-传统模式添加操作

      本文链接:https://www.haomeiwen.com/subject/sgtudxtx.html