Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)

简介: Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)

2.3.2 delete标签

功能:

定义删除sql语句

用法案例:

使用delete标签在数据库中删除员工编号为4的数据

①在EmployeeMapper接口中先定义删除数据的方法

代码示例如下:

//删除员工(根据员工编号删除对应的员工信息)
public void deleteEmployee(int empId);

②在上述接口对应的映射文件中使用delete标签

代码示例如下:

<delete id="deleteEmployee">
    delete from tbl_employee
    where id= #{empId}
</delete>

③测试

代码示例如下:

@Test
public void testDeleteEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //删除员工编号为4的员工信息
        employeeMapper.deleteEmployee(4);
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.3.3 update标签

功能:

定义修改sql语句

用法案例:

使用update标签修改员工编号为2的相关员工数据

修改前的数据:

①在EmployeeMapper接口中先定义修改数据的方法

代码示例如下:

//修改员工数据
public void updateEmployee(Employee employee);

②在上述接口对应的映射文件中使用update标签

代码示例如下:

<update id="updateEmployee">
    update tbl_employee
    set email=#{email} , salary=#{salary}
    where id=#{id}
</update>

③测试

@Test
public void testUpdateEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        //通过调用代理对象去执行删除,这点和当初在Dao层新建接口,接口的实现类去实现删除的功能很像,代理对
        //象就相当于当初接口的实现类一样,但是我并没有写接口的实现类,但在mybatis框架中就真真切切的实现了
        //删除的功能,究其原因,应该是mybatis在底层就帮我实现了,但是具体是怎么实现的,我暂时不知道
        //修改员工编号为2的员工部分信息
        employeeMapper.updateEmployee(new Employee(2,"hdjs@qq.com",120.0));;
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.3.4 select标签

功能:

定义查询sql语句

用法案例:

使用select标签查询数据库中所有的员工信息

①在EmployeeMapper接口中先定义查看所有的员工数据的方法

代码示例如下:

//查看所有的员工信息
public List<Employee> showAllEmployee();

②在上述接口对应的映射文件中使用select标签

代码示例如下:

<!--  查看所有的员工信息  -->
<!-- 如果resultType中的值是一个类的类型,如果之前定义它的别名,这里可填写该类的别名,毕竟有时类的全名太长了   -->
    <select id="showAllEmployee" resultType="mybatis.pojo.Employee">
        select
            id,
            last_name ,
            email,
            salary
        from
            tbl_employee
    </select>

注意:

在resultType中,期望从这条语句中返回结果的类全限定名或别名,如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。 resultType 和 resultMap 之间只能选其一使用。

③测试

@Test
    public void testShowAllEmployee(){
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            //通过SqlSessionFactory对象调用openSession();
            SqlSession sqlSession = sqlSessionFactory.openSession();
            //获取EmployeeMapper的代理对象
            EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
            List<Employee> employees = employeeMapper.showAllEmployee();
            for (Employee employee : employees) {
                System.out.println(employee);
            }
/*
            //开启事务,数据才能真正存进数据库中
            sqlSession.commit();
*/
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

备注:以下子标签的详细功能用法将在接下来的序列文章中详细探讨,这里不做赘述

2.3.5 Sql标签

功能:

定义可重用的SQL语句块

2.3.6 cache标签

功能:

设置当前命名空间的缓存配置

2.3.7 cache-ref标签

功能:

设置其他命名空间的缓存配置

2.3.8 resultMap标签

功能:

描述如何从数据库结果集中加载对象

注意:

在使用多表查询的场景上,resultType解决不了,就用resultMap

2.4 映射文件中常用的属性

2.4.1 resultType

功能描述:

设置期望结果集返回类型【全类名或别名】

注意:

如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身的类型。

resultType和resultMap之间只能同时使用一个

2.5 获取主键自增数据

获取主键自增数据需要用到以下两个属性

  • useGeneratedKeys:启用主键生成策略
  • keyProperty:设置存储属性值

用法案例:基于EmployeeMapper接口中的插入数据的方法,对其映射文件中原有的insert标签内,添加以上两个属性,使在插入数据时获得其自增主键

①在EmployeeMapper接口中书写插入数据的方法

代码示例如下:

//添加员工
public void insertEmployee(Employee employee);

②在EmployeeMapper接口对应的映射文件中对使用inset标签添加获取主键自增数据的两个属性

代码示例如下:

<!--  useGeneratedKeys="true" keyProperty="id" : 启用主键生成策略,返回的结果集中包含自动生成主键的信息,并将其赋值给实体类对象中的 id 属性  -->
    <insert id="insertEmployee" useGeneratedKeys="true" keyProperty="id">
        insert into
            tbl_employee(last_name,email,salary)
        <!--  这里是要将employee对象中的属性值传到mysql中    -->
        values(#{lastName},#{email},#{salary})
    </insert>

③测试

代码示例如下

@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);
        employeeMapper.insertEmployee(employee);
        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

2.6 获取数据库受影响行数

如何获取数据库受影响行数?

直接将接口中相应方法的返回值设置为int或boolean即可

  • int代表受影响行数
  • boolean代表是否影响了数据库,true代表影响了数据库,false则代表无

用法案例:在插入数据时获取数据库受影响的行数

①基于2.5小节中用法案例的代码,仅仅修改Mapper接口中返回值的类型为int

代码示例如下:

//修改Mapper接口中返回值的类型为int
//添加员工
public int insertEmployee(Employee employee);

②测试代码做相应的微调并测试

//测试代码做相应的微调
@Test
public void testInsertKeyEmployee(){
    try {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //通过SqlSessionFactory对象调用openSession();
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取EmployeeMapper的代理对象
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee=new Employee("李四1","sshdfjf@163.com",9000.0);
        //获取返回值i(影响数据库的行数)
        int i = employeeMapper.insertEmployee(employee);
        System.out.println("影响数据库的行数: "+i);
        //当执行插入sql后,获取新增员工的主键(员工编号)
        System.out.println("employee.getId() : "+employee.getId());
        //开启事务,数据才能真正存进数据库中
        sqlSession.commit();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

相关文章
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
6月前
|
XML Java 数据库连接
MyBatis入门——MyBatis XML配置文件(3)
MyBatis入门——MyBatis XML配置文件(3)
98 6
|
3月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
67 1
|
5月前
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
106 3
|
6月前
|
SQL XML Java
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操
77 3
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
|
5月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
5月前
|
Java 数据库连接 Maven
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
Private method ‘getVideoList()‘ is never used,mybatis必须指定Mapper文件和实体目录,在参考其他人写的代码,要认真分析别人的代码,不要丢失
|
7月前
|
算法 BI 数据库
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
MyBatisPlus查询条件设置、映射匹配兼容性、id生成策略、多数据操作
418 3