• mybatis3.1-[topic-16-17]-映射文件_增删改查_insert_获取自增主键的值


    笔记要点
    出错分析与总结

    /**测试第16章的增,删,改 的内容
     *  错误1: <insert id="addEmp" parameterType="com.bean.Employee">  ,注意选取数据类型是parameterType,不是Map
     *  错误2: 按顺序查找全部数据,但是delete清楚数据后, id自增变量不是从零开始的;所以自己的while循环不好!
     *  ---------
     *  1. mybatis 支持允许增删改查,直接定义如下类型: Integer/long/boolean类型
     *  2. 手动提交即可, openSession.commit();
     *  3.
     */


    工程组织

    EmployeeMapper.xml   (加入 增,删,改 的sql映射语句的内容)
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.dao.EmployeeMapper">
        <!--
         namespace: 名称空间
        id: 唯一标识
        resultType:返回值类型
        #{id} : 从传递过来的参数中取出id值
        public Employee getEmpById(Integer id);
        -->
        <select id="getEmpById" resultType="com.bean.Employee" databaseId="mysql">
            select * from tbl_employee where id = #{id}
        </select>
    
        <!--
            public void addEmp(Employee employee);
            parameterType : 参数类型,可以省略;
            mysql支持自增主键,自增主键的获取:mybatis也是利用statement.getGeneratedKeys()
            调用方法: 在标签中添加即可: useGeneratedKeys="true";
        -->
        <insert id="addEmp" parameterType="com.bean.Employee"
            useGeneratedKeys="true" keyProperty="id">
            insert into tbl_employee(last_name,email,gender)
            values (#{lastName},#{email},#{gender})
        </insert>
        <!--public void updateEmp(Employee employee);-->
        <update id="updateEmp" >
              update tbl_employee
              set last_name=#{lastName},email=#{email},gender=#{gender}
              where id=#{id}
        </update>
        <!--public void deleteEmpById(Integer id);-->
        <delete id="deleteEmpById">
            delete from tbl_employee where id=#{id}
        </delete>
    </mapper>

    EmployeeMapper.java   [com.dao 下的]

    package com.dao;
    import com.bean.*;
        //接口式编程! namespace: 名称空间,指定为接口名字;
    public interface EmployeeMapper {
        public Employee getEmpById(Integer id);
                //添加返回值类型,表示mybatis的会话状态是true或者false
        public boolean addEmp(Employee employee);
        public boolean updateEmp(Employee employee);
        public boolean deleteEmpById(Integer id);
    }

    class test_tp16  测试类  [com.test下的]

    package com.test;
    import com.bean.Employee;
    import com.dao.EmployeeMapper;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    
    /**测试第16章的增,删,改 的内容
     *  错误1: <insert id="addEmp" parameterType="com.bean.Employee">  ,注意选取数据类型是parameterType,不是Map
     *  错误2: 按顺序查找全部数据,但是delete清楚数据后, id自增变量不是从零开始的;所以自己的while循环不好!
     *  ---------
     *  1. mybatis 支持允许增删改查,直接定义如下类型: Integer/long/boolean类型
     *  2. 手动提交即可, openSession.commit();
     *  3.
     */
    public class test_tp16 {
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(inputStream);
        }
        @Test
        public void test03() throws IOException{
            //默认是不自动提交数据的,需要我们自己手动提交
            SqlSession openSession = getSqlSessionFactory().openSession();
    
            try {
                EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
                //1-1 测试:增加一条记录
             //  Employee employee1 = new Employee(null, "jerry", "jerry@163.com", "0");
           //     mapper.addEmp(employee1);
                //1-1-1 测试自增:增加一条记录
                  Employee employee1 = new Employee(null, "葫芦娃", "葫芦娃@163.com", "0");
                  mapper.addEmp(employee1);
                //1-2 测试; 更新一号的名字为 jerry,性别为1
    //            Employee employee = new Employee(1, "jerry", "jerry@163.com", "1");
    //            mapper.updateEmp(employee);
                //1-3 测试删除,删除第二号的员工
             //   boolean b= mapper.deleteEmpById(2);
             //   System.out.println(b);
                //1-4 测试; 按顺序查找全部数据,
                Employee employee;
                int i=1;
                while ((employee = mapper.getEmpById(i))!=null){
                    i++;
                    System.out.println(employee);
                }
                //2.手动提交
                openSession.commit();
            } finally {
                openSession.close();
            }
        }
    }
  • 相关阅读:
    (todo)数组名 有存储空间吗?
    c和指针 指针数组 关于指针数组
    c面试题 来自android手机 1/6
    c 和指针 二维数组赋予一维数组指针 数组长度 数组与指针长度区别
    c语言优先级面试小结
    hxf 每晚 宏 不用大于小于 求大小
    DelphiX中的DXSprite单元中涉及到修改
    在java开发过程中,添加表时,需要配置一下的目录和文件。
    代码生成器cs的注册方法.
    将一个字符串映射为一个Delphi页面控件属性名
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/10033665.html
Copyright © 2020-2023  润新知