MyBatis学习教程(四)

网友投稿 206 2023-07-16


MyBatis学习教程(四)

在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面给大家演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突问题,感兴趣的朋友一起学习吧。

一、准备演示需要使用的表和数据

CREATE TABLE orders(

order_id INT PRIMARY KEY AUTO_INCREMENT,

order_no VARCHAR(20),

order_price FLOAT

);

INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23);

INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33);

INSERT INTO orders(order_no, order_price) VALUES('cccc', 22);

二、定义实体类

package me.gacl.domain;

/**

* @author gacl

* 定义orders表对应的实体类

*/

public class Order {

/**

*

CREATE TABLE orders(

order_id INT PRIMARY KEY AUTO_INCREMENT,

order_no VARCHAR(),

order_price FLOAT

);

*/

//Order实体类中属性名和orders表中的字段名是不一样的

private int id; //id===>order_id

private String orderNo; //orderNo===>order_no

private float price; //price===>order_price

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getOrderNo() {

return orderNo;

}

public void setOrderNo(String orderNo) {

this.orderNo = orderNo;

}

public float getPrice() {

return price;

}

public void setPrice(float price) {

this.price = price;

}

@Override

public String toString() {

return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price+ "]";

}

}

三、编写测试代码

3.1、编写SQL的xml映射文件

1、创建一个orderMapper.xml文件,orderMapper.xml的内容如下:

resultType="me.gacl.domain.Order">

select * from orders where order_id=#{id}

resultType="me.gacl.domain.Order">

select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}

select * from orders where order_id=#{id}

2、在conf.xml文件中注册orderMapper.xml映射文件

3.2、编写单元测试代码

package me.gacl.test;

import me.gacl.domain.Order;

import me.gacl.util.MyBatisUtil;

import org.apache.ibatis.session.SqlSession;

import org.junit.Test;

public class Test {

@Test

public void testGetOrderById(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

/**

* 映射sql的标识字符串,

* me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper标签的namespace属性的值,

* getOrderById是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

*/

String statement = "me.gacl.mapping.orderMapper.getOrderById";//映射sql的标识字符串

//执行查询操作,将查询结果自动封装成Order对象返回

Order order = sqlSession.selectOne(statement,);//查询orders表中id为的记录

//使用SqlSession执行完SQL之后需要关闭SqlSession

sqlSession.close();

System.out.println(order);//打印结果:nulhttp://l,也就是没有查询出相应的记录

}

@Test

public void testGetOrderById(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

/**

* 映射sql的标识字符串,

* me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper标签的namespace属性的值,

* selectOrder是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

*/

String statement = "me.gacl.mapping.orderMapper.selectOrder";//映射sql的标识字符串

//执行查询操作,将查询结果自动封装成Order对象返回

Order order = sqlSession.selectOne(statement,);//查询orders表中id为的记录

//使用SqlSession执行完SQL之后需要关闭SqlSession

sqlSession.close();

System.out.println(order);//打印结果:Order [id=, orderNo=aaaa, price=.]

}

@Test

public void testGetOrderById(){

SqlSession sqlSession = MyBatisUtil.getSqlSession();

/**

* 映射sql的标识字符串,

* me.gacl.mapping.orderMapper是orderMapper.xml文件中mapper标签的namespace属性的值,

* selectOrderResultMap是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL

*/

String statement = "me.gaczJOXdbxxIql.mapping.orderMapper.selectOrderResultMap";//映射sql的标识字符串

//执行查询操作,将查询结果自动封装成Order对象返回

Order order = sqlSession.selectOne(statement,);//查询orders表中id为的记录

//使用SqlSession执行完SQL之后需要关闭SqlSession

sqlSession.close();

System.out.println(order);//打印结果:Order [id=, orderNo=aaaa, price=.]

}

}

执行单元测试的结果:

1、testGetOrderById方法执行查询后返回一个null。

2、testGetOrderById2方法和testGetOrderById3方法执行查询后可以正常得到想要的结果。

四、总结

上面的测试代码演示当实体类中的属性名和表中的字段名不一致时,使用MyBatis进行查询操作时无法查询出相应的结果的问题以及针对问题采用的两种办法:

解决办法一: 通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致,这样就可以表的字段名和实体类的属性名一一对应上了,这种方式是通过在sql语句中定义别名来解决字段名和属性名的映射关系的。

解决办法二: 通过来映射字段名和实体类属性名的一一对应关系。这种方式是使用MyBatis提供的解决方式来解决字段名和属性名的映射关系的。

以上所述是给大家介绍的MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:彻底理解Java中this 关键字
下一篇:Java Web开发过程中登陆模块的验证码的实现方式总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~