1.查询

创建接口

public interface CustomerMapper {

    Customer getCustomerById(int id);
    List<Customer> selectAll();
}

配置文件中添加sql语句

<select id="getCustomerById" resultType="customer">
        select * from customer where id=#{id}
    </select>
    <select id="selectAll" resultType="customer">
       select * from customer
    </select>
2.新增

接口中写一个方法

int saveCustomer(Customer customer);

配置文件中编写sql
MyBatis实现增删改查_数据

<insert id="saveCustomer"  parameterType="customer">
    insert into customer(name,phone,email,level) values(#{name},#{phone},#{email},#{level})
</insert>

接口中返回值是int类型,我们无需在xml中管这个返回值,默认就有的,修改和删除也是一样的。

3.修改

接口中创建方法

int updateCustomerById(Customer customer);

配置文件中编写sql

<update id="updateCustomerById" parameterType="customer">
    update customer set name=#{name},phone=#{phone},email=#{email},level=#{level}
       where id=#{id}
</update>
4.删除

接口中创建方法

int deleteById(int id);

配置文件中编写sql

<delete id="deleteById" parameterType="int">
    delete from customer where id=#{id}
</delete>

总结:
1、新增 insert , 修改 update , 删除 delete , 查询使用 select 标签
2、新增,修改,删除都需要进行事务的提交才能更新数据。
3、新增,修改,删除 都默认会有一个int类型的返回值,如果想使用这个返回值只需要接口中返回值是int即可。
4、parameterType 就是接口中的参数,类型一定要一致
5、resultType 就是接口中的返回值类型,如果接口的返回值是List集合,此处不需要写成List,而是写list集合中泛型的类型

5.如何获取自增的id值

如果主键是自增的,我如何保存完数据之后就知道该数据在数据库中的id是多少呢?
如何在新增完数据之后,就能拿到新数据在数据库中的id值呢,需要在配置文件中多如下配置:

<selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
            select last_insert_id()
 </selectKey>

原理是通过执行mysql 中的一个内置函数 last_insert_id() 查询到最后一个数据的id.
keyColumn 指的是数据库中的字段 id
keyProperty 指的是实体中的字段 id
resultType 返回值类型 int
order 只有两个值 BEFORE AFTER 因为id是数据保存之后才会得出一个的id,所有类型是After

代码演示

<insert id="insertCustomer" parameterType="customer">
        <selectKey keyColumn="id" keyProperty="id" resultType="int" order="AFTER">
            select last_insert_id()
        </selectKey>
        insert into customer(name,phone,email,level) values(#{name},#{phone},#{email},#{level})
    </insert>

测试代码:

@Test
    public void testInsert2() throws IOException {

        SqlSession sqlSession = sessionFactory.openSession();
        CustomerMapper customerMapper = sqlSession.getMapper(CustomerMapper.class);
        Customer customer = new Customer();
        customer.setName("老闫");
        customer.setPhone("18137884406");
        customer.setEmail("838700991@qq.com");
        customer.setLevel("年卡会员");
        int result = customerMapper.insertCustomer(customer);
        System.out.println(result);
        System.out.println("保存数据之后,新数据在数据库中的id="+customer.getId());
        //记得提交事务,否则数据不保存
        sqlSession.commit();
        sqlSession.close();
    }
6.查询数据时数据库中的字段和实体中的字段不一致,查询不出来,怎么解决?

Customer{id=14, name='刘晓磊', phone='18634455554', email='343223ddddd2@qq.com', level='年卡用户', createTime=null, endTime=null}
需要使用resultMap == 专门解决实体中的属性和数据库中的字段不一致的问题

<resultMap id="customerMap" type="customer">
        <!--id 表示该列是一个主键-->
        <id property="id" column="id"></id>
        <result property="createTime" column="create_time"/>
        <result property="endTime" column="end_time"/>
    </resultMap>

1、resultMap中的id一般随便写,type就是实体的全路径,可以使用别名。
2、里面的标签 主键使用id标签,普通字段使用 result标签
3、标签里面的property 指的是实体中的属性,column指的是数据库中的字段。
4、只需要编写属性和列不一致的字段即可,无需都写出来

使用的时候,记得resultType 换成 resultMap即可
MyBatis实现增删改查_字段_02