栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis数据输出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis数据输出

测试准备

在测试类中使用单元测试的生命周期注解对mybatis测试进行初始化以及关闭资源

//junit会在每一个@Test方法前执行一个@Before方法
    @Before
    public void init() throws IOException {
        session= new
                SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")).openSession();
    }
//junit会在每一个@Test方法后执行一个@After方法
    @After
    public void clear(){
        session.commit();
        session.close();
    }
1、返回单个简单类型数据

①Mapper接口中的抽象方法

int selectCount();

②SQL语句

 
    select emp_id empId,emp_name empName,emp_salary empSalary 
    from t_emp 
    where emp_id=#{maomi}

  • 编写具体的SQL语句,使用id属性唯一的标记一条SQL语句
  • resultType属性:指定封装查询结果的Java实体类的全类名
  • Mybatis负责把SQL语句中的#{}部分替换成“?”占位符
  • 给每一个字段设置一个别名,让别名和Java实体类中属性名一致

③增加全局配置自动识别对应关系

做了下面的配置,select语句中可以不给字段设置别名


    

  • 从org.apache.ibatis.session.Configuration类中可以查看能使用的配置项
  • 将mapUnderscoreToCamelCase属性配置为true,表示开启自动映射驼峰式命名规则
  • 规则要求数据库表字段命名方式:单词_单词
  • 规则要求Java实体类属性名命名方式:首字母小写的驼峰式命名
3、返回Map类型

适用于SQL查询返回的各个字段综合起来并不和任何一个现有的实体类对应,没法封装到实体类对象中。能够封装成实体类类型的,就不使用Map类型。

①Mapper接口的抽象方法

Map selectEmpNameAndMaxSalary();

②SQL语句


        select emp_id empId,emp_name empName,emp_salary empSalary
        from t_emp
 

③junit测试

 @Test
    public void testSelectForList(){
        EmployeeMapper sessionMapper = session.getMapper(EmployeeMapper.class);
        List list = sessionMapper.selectAll();
        System.out.println(list);
    }
5、返回自增主键

①使用场景

例如:保存订单信息。需要保存Order对象和List。其中,OrderItem对应的数据库表,包含一个外键,指向Order对应表的主键。

在保存List的时候,需要使用下面的SQL:

insert into t_order_item(item_name,item_price,item_count,order_id) values(...)

这里需要用到的order_id,是在保存Order对象时,数据库表以自增方式产生的,需要特殊办法拿到这个自增的主键值。至于,为什么不能通过查询最大主键的方式解决这个问题,参考下图:


②在Mapper配置文件中设置方式
[1]Mapper接口中的抽象方法

int insertWithKey(Employee employee);

[2]SQL语句


    insert into t_emp(emp_name,emp_salary)
    values(#{empName},#{empSalary})

  • useGeneratedKeys属性字面意思就是“使用生成的主键”
  • keyProperty属性可以指定主键在实体类对象中对应的属性名,Mybatis会将拿到的主键值存入这个属性

[3]单元测试

@Test
    public void testGetGeneratedKey(){
        EmployeeMapper sessionMapper = session.getMapper(EmployeeMapper.class);
        Employee employee = new Employee(null, "bob", 123.9);
        int rowCount = sessionMapper.insertWithKey(employee);
        System.out.println("受影响行数="+rowCount);
        System.out.println(employee);

    }

③注意
Mybatis是将自增主键的值设置到实体类对象中,而不是以Mapper接口方法返回值的形式返回。

6、数据库表字段和实体类属性对应关系

①别名

将字段的别名设置成和实体类属性一致。


    select emp_id,emp_name,emp_salary from t_emp where emp_id=#{empId}

③使用resultMap

使用resultMap标签定义对应关系,再在后面的SQL语句中引用这个对应关系


    
    
    
    
    
    
    
    

    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/301744.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号