- 之前写的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的对象为
再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(); } }
两种基本的解决方式,如果用到的较少,可以选择第一种,如果用到较多较复杂,可以选择第二种。