mybatis学习笔记(3)—数据库和bean名称不一样处理方案

简介: 之前写的mybatis对象的bean对象和数据库的对象名称是对应的,然而再实际开发的过程有很多不一一对应的情况。就需要解决。
  • 之前写的mybatis对象的bean对象和数据库的对象名称是对应的,然而再实际开发的过程有很多不一一对应的情况。就需要解决。


bean对象:


package com.test.bean;
/*
 * javabean 对象
 */
public class order {
   private int id;
   private String no;
   private float price;
   public int getId() {
   return id;
   }
   public void setId(int id) {
   this.id = id;
   }
   public String getOrderNo() {
   return no;
   }
   public void setOrderNo(String orderNo) {
   this.no = orderNo;
   }
   public float getPrice() {
   return price;
   }
   public void setPrice(float price) {
   this.price = price;
   }
   @Override
   public String toString() {
   return "Order [id=" id ", orderNo=" no ", price=" price "]";
   }  
}


而mysql的对象为


20180918213033953.png


再xml中的配置为:


-<mapper namespace="ordermapper">
<!-- 根据id查询得到一个order对象,使用这个查询是查询不到我们想要的结果的,这主要是因为实体类的属性名和数据库的字段名对应不上的原因,因此无法查询出对应的记录 -->
<select resultType="com.test.bean.order" parameterType="int" id="getorderbyid">select * from orders where order_id=#{id} </select>
<!-- 第一种方法根据id查询得到一个order对象,使用这个查询是可以正常查询到我们想要的结果的,这是因为我们将查询的字段名都起一个和实体类属性名相同的别名,这样实体类的属性名和查询结果中的字段名就可以一一对应上 -->
<select resultType="com.test.bean.order" parameterType="int" id="getorderbyid2">select order_id id,order_no no,order_price price from orders where order_id=#{id} </select>
<select parameterType="int" id="getorderbymap" resultMap="orderResultMap">select * from orders where order_id=#{id} </select>
-<resultMap id="orderResultMap" type="com.test.bean.order">
<!-- 用id属性来映射主键字段 -->
<id column="order_id" property="id"/>
<!-- 用result属性来映射非主键字段 -->
<result column="order_no" property="no"/>
<result column="order_price" property="price"/>
</resultMap>
<!-- 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 -->
<select id="getUserCount" statementType="CALLABLE" parameterMap="getUserCountMap">CALL mybits.ges_user_count(?,?) </select>
<!--parameterMap.put("sexid", 0);parameterMap.put("usercount", -1); -->
-<parameterMap id="getUserCountMap" type="java.util.Map">
<parameter property="sexid" jdbcType="INTEGER" mode="IN"/>
<parameter property="usercount" jdbcType="INTEGER" mode="OUT"/>
</parameterMap>
</mapper>


test实例(先封装一下)

import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class returnsqlsession {
  public static SqlSessionFactory getSqlSessionFactory()
  {
    String resource="conf.xml";
    InputStream in=returnsqlsession.class.getClassLoader().getResourceAsStream(resource);
    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
    return factory;
  }
  public static SqlSession getSqlSession(){//返回sqlsession
    return getSqlSessionFactory().openSession();  
  }
   /**
   * 获取SqlSession
   * @param isAutoCommit 
   * true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
   * false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.commit()提交事务
   * @return SqlSession
   */
   public static SqlSession getSqlSession(boolean isAutoCommit) {
   return getSqlSessionFactory().openSession(isAutoCommit);
   }
}


import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import com.test.bean.order;
public class test1 {
  public static void testselect1() throws IOException
  {
    SqlSession sqlsession=returnsqlsession.getsqlsession(true);
    //String statement="ordermapper.getorderbyid1";
    //String statement="ordermapper.getorderbyid2";
    String statement="ordermapper.getorderbymap";
    order order=sqlsession.selectOne(statement, 2);
   sqlsession.close();
   System.out.println(order);
  }
  public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
 testselect1(); 
  }
}


两种基本的解决方式,如果用到的较少,可以选择第一种,如果用到较多较复杂,可以选择第二种。

目录
相关文章
|
2月前
|
Java 关系型数据库 数据库连接
简单易懂的 MyBatis 分库分表方案
本文介绍了一种基于 MyBatis 框架的数据库分库分表方案——shardino。不同于复杂插件方式,该方案通过客户端代码包装实现简便易懂的操作,显式处理分库分表逻辑,确保开发者清晰了解数据分布。项目地址:[https://github.com/pyloque/shardino](https://github.com/pyloque/shardino)。方案中,帖子表按 userId 字段 hash 分为 64 张表,平均分配到多个主从库中,配置文件管理 MySQL 组对象,支持读写分离和权重随机选择从库。代码示例展示了如何计算 partition number 并进行具体操作。
92 22
简单易懂的 MyBatis 分库分表方案
|
1月前
|
SQL 存储 关系型数据库
【SQL技术】不同数据库引擎 SQL 优化方案剖析
不同数据库系统(MySQL、PostgreSQL、Doris、Hive)的SQL优化策略。存储引擎特点、SQL执行流程及常见操作(如条件查询、排序、聚合函数)的优化方法。针对各数据库,索引使用、分区裁剪、谓词下推等技术,并提供了具体的SQL示例。通用的SQL调优技巧,如避免使用`COUNT(DISTINCT)`、减少小文件问题、慎重使用`SELECT *`等。通过合理选择和应用这些优化策略,可以显著提升数据库查询性能和系统稳定性。
86 9
|
8天前
|
SQL XML Java
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
六、MyBatis特殊的SQL:模糊查询、动态设置表名、校验名称唯一性
24 0
|
19天前
|
SQL 关系型数据库 数据库
【YashanDB 知识库】OM 仲裁节点故障后手工切换方案和 yasom 仲裁重新部署后重新纳管数据库集群方案
本文介绍了一主一备数据库集群的部署步骤。首先在OM节点上传并解压软件包至指定路径,随后通过调整安装参数、执行安装和集群部署完成数据库设置。接着,在主备节点分别配置环境变量,并查看数据库状态以确认安装成功。最后,针对OM仲裁故障提供了手动切换方案,包括构造故障场景、关闭自动切换开关及使用SQL命令进行主备切换,确保系统高可用性。
|
2月前
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
155 6
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
90 2
|
2月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
4月前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
643 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
3月前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
186 11
|
3月前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。

热门文章

最新文章