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月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
132 6
|
23天前
|
SQL Java 数据库连接
深入 MyBatis-Plus 插件:解锁高级数据库功能
Mybatis-Plus 提供了丰富的插件机制,这些插件可以帮助开发者更方便地扩展 Mybatis 的功能,提升开发效率、优化性能和实现一些常用的功能。
122 26
深入 MyBatis-Plus 插件:解锁高级数据库功能
|
12天前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
33 8
|
28天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
15 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
2月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
73 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
26天前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
32 1
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
103 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
29天前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
23 0
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
57 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
3月前
|
XML 数据库 数据格式
数据库 校验名称唯一性,用于新增和修改功能
数据库 校验名称唯一性,用于新增和修改功能
55 1