Mybatis/Ibatis,数据库操作的返回值

insert,返回值是:新插入行的主键(primary key);需要包含<selectKey>语句,才会返回主键,否则返回值为null。
update/ delete,返回值是:更新或删除的行数;无需指明resultClass;但如果有约束异常而删除失败,只能去捕捉异常。
queryForObject,返回的是:一个实例对象或null;需要包含<select>语句,并且指明resultMap;
queryForList,返回的是:实例对象的列表;需要包含<select>语句,并且指明resultMap;

我的配置文件如下(desktop_common_sqlMap.xml):


    <typeAlias alias="UnlockTagInfo" type="com.desktop.common.bean.UnlockTagInfo" />  
    <resultMap class="UnlockTagInfo" id="UnlockTagInfoResult">  
        <result column="id" property="id" jdbcType="INTEGER" />  
        <result column="name" property="name" jdbcType="VARCHAR" />  
        <result column="description" property="description" jdbcType="VARCHAR" />  
        <result column="priority" property="priority" jdbcType="INTEGER" />  
    </resultMap>  
    <insert id="insertUnlockTagInfo" parameterClass="map">  
        <selectKey resultClass="int" keyProperty="id">  
            select  
            nextval('desktop_unlock_tag_id_seq') as id  
        </selectKey>  
        insert into  
        desktop_unlock_tag(id,name,description,priority)  
        values(#id:INTEGER#,#name:VARCHAR#,#description:VARCHAR#,#priority:INTEGER#)  
    </insert>  
    <update id="updateUnlockTagInfo" parameterClass="map">  
        update  
        desktop_unlock_tag  
        set modify_time=now(),priority=#priority:INTEGER#,  
        name=#name:VARCHAR#,description=#description:VARCHAR#  
        where  
        id=#id:INTEGER#  
    </update>  
    <delete id="deleteUnlockTagInfo" parameterClass="int">  
        delete from  
        desktop_unlock_tag  
        where id=#value:INTEGER#  
    </delete>  
    <select id="countUnlockTagInfo" resultClass="int">  
        select count(*)  
        from  
        desktop_unlock_tag  
    </select>  
    <sql id="selectUnlockTagInfo">  
        select  
        id,name,description,priority  
        from  
        desktop_unlock_tag  
    </sql>  
    <select id="findUnlockTagInfoById" parameterClass="int"  
        resultMap="UnlockTagInfoResult">  
        <include refid="selectUnlockTagInfo" />  
        where id=#id:INTEGER#  
    </select>  
    <select id="listUnlockTagInfo" parameterClass="map"  
        resultMap="UnlockTagInfoResult">  
        <include refid="selectUnlockTagInfo" />  
        order by  
        modify_time desc limit #size:INTEGER#  
        offset #start:INTEGER#  
    </select>  
DAO源码如下:

    public class UnlockTagDaoImpl extends SqlMapClientDaoSupport implements  
            UnlockTagDao {  
        @Override  
        public Integer addItem(String name, String desc, Integer priority) {  
            SqlMapClientTemplate template = this.getSqlMapClientTemplate();  
            Map<String, Object> args = new HashMap<String, Object>();  
            args.put("name", name);  
            args.put("description", desc);  
            args.put("priority", priority);  
            Object key = template.insert("DesktopCommon.insertUnlockTagInfo", args);  
            return (Integer) key;  
        }  
      
        @Override  
        public boolean updateItem(Integer id, String name, String description,  
                Integer priority) {  
            SqlMapClientTemplate template = this.getSqlMapClientTemplate();  
            Map<String, Object> args = new HashMap<String, Object>();  
            args.put("id", id);  
            args.put("name", name);  
            args.put("description", description);  
            args.put("priority", priority);  
            try {  
                int c = template.update("DesktopCommon.updateUnlockTagInfo", args);  
                if (c > 0) {  
                    return true;  
                }  
                return false;  
            } catch (Exception e) {  
                return false;  
            }  
        }  
      
        @Override  
        public boolean deleteItem(Integer id) {  
            SqlMapClientTemplate template = this.getSqlMapClientTemplate();  
            try {  
                int c = template.delete("DesktopCommon.deleteUnlockTagInfo", id);  
                if (c > 0) {  
                    return true;  
                }  
                return false;  
            } catch (Exception e) {  
                return false;  
            }  
        }  
      
        @Override  
        public UnlockTagInfo findItemById(Integer id) {  
            SqlMapClientTemplate template = this.getSqlMapClientTemplate();  
            UnlockTagInfo item = (UnlockTagInfo) template.queryForObject(  
                    "DesktopCommon.findUnlockTagInfoById", id);  
            return item;  
        }  
      
        @Override  
        public PagedList<UnlockTagInfo> listAll(Integer nStart, Integer nSize,  
                boolean bCountTotal) {  
            SqlMapClientTemplate template = this.getSqlMapClientTemplate();  
            PagedList<UnlockTagInfo> result = new PagedList<UnlockTagInfo>();  
            if (bCountTotal) {  
                int total = (Integer) template  
                        .queryForObject("DesktopCommon.countUnlockTagInfo");  
                result.setTotal(total);  
            }  
            Map<String, Integer> args = new HashMap<String, Integer>();  
            args.put("start", nStart);  
            args.put("size", nSize);  
            @SuppressWarnings("unchecked")  
            List<UnlockTagInfo> items = template.queryForList(  
                    "DesktopCommon.listUnlockTagInfo", args);  
            result.setData(items);  
            return result;  
        }  
    }  
关于ibatis的接口,参见其源码(com\ibatis\sqlmap\client\SqlMapExecutor.java):

    /* 
     *  Copyright 2004 Clinton Begin 
     * 
     *  Licensed under the Apache License, Version 2.0 (the "License"); 
     *  you may not use this file except in compliance with the License. 
     *  You may obtain a copy of the License at 
     * 
     *      http://www.apache.org/licenses/LICENSE-2.0 
     * 
     *  Unless required by applicable law or agreed to in writing, software 
     *  distributed under the License is distributed on an "AS IS" BASIS, 
     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
     *  See the License for the specific language governing permissions and 
     *  limitations under the License. 
     */  
    package com.ibatis.sqlmap.client;  
      
    import com.ibatis.common.util.PaginatedList;  
    import com.ibatis.sqlmap.client.event.RowHandler;  
    import com.ibatis.sqlmap.engine.execution.BatchException;  
      
    import java.sql.SQLException;  
    import java.util.List;  
    import java.util.Map;  
      
    /** 
     * This interface declares all methods involved with executing statements 
     * and batches for an SQL Map. 
     * 
     * @see SqlMapSession 
     * @see SqlMapClient 
     */  
    public interface SqlMapExecutor {  
      
      /** 
       * Executes a mapped SQL INSERT statement. 
       * Insert is a bit different from other update methods, as it 
       * provides facilities for returning the primary key of the 
       * newly inserted row (rather than the effected rows).  This 
       * functionality is of course optional. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the INSERT values. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @return The primary key of the newly inserted row.  This might be automatically 
       *         generated by the RDBMS, or selected from a sequence table or other source. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      Object insert(String id, Object parameterObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL INSERT statement. 
       * Insert is a bit different from other update methods, as it 
       * provides facilities for returning the primary key of the 
       * newly inserted row (rather than the effected rows).  This 
       * functionality is of course optional. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @return The primary key of the newly inserted row.  This might be automatically 
       *         generated by the RDBMS, or selected from a sequence table or other source. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      Object insert(String id) throws SQLException;  
      
      /** 
       * Executes a mapped SQL UPDATE statement. 
       * Update can also be used for any other update statement type, 
       * such as inserts and deletes.  Update returns the number of 
       * rows effected. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the UPDATE values as well as the WHERE clause parameter(s). 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @return The number of rows effected. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      int update(String id, Object parameterObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL UPDATE statement. 
       * Update can also be used for any other update statement type, 
       * such as inserts and deletes.  Update returns the number of 
       * rows effected. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @return The number of rows effected. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      int update(String id) throws SQLException;  
      
      /** 
       * Executes a mapped SQL DELETE statement. 
       * Delete returns the number of rows effected. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the DELETE statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @return The number of rows effected. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      int delete(String id, Object parameterObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL DELETE statement. 
       * Delete returns the number of rows effected. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @return The number of rows effected. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      int delete(String id) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a single object instance. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @return The single result object populated with the result set data, 
       *         or null if no result was found 
       * @throws java.sql.SQLException If more than one result was found, or if any other error occurs. 
       */  
      Object queryForObject(String id, Object parameterObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a single object instance. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @return The single result object populated with the result set data, 
       *         or null if no result was found 
       * @throws java.sql.SQLException If more than one result was found, or if any other error occurs. 
       */  
      Object queryForObject(String id) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * the supplied result object. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param resultObject    The result object instance that should be populated with result data. 
       * @return The single result object as supplied by the resultObject parameter, populated with the result set data, 
       *         or null if no result was found 
       * @throws java.sql.SQLException If more than one result was found, or if any other error occurs. 
       */  
      Object queryForObject(String id, Object parameterObject, Object resultObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @return A List of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      List queryForList(String id, Object parameterObject) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @return A List of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      List queryForList(String id) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects within a certain range. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param skip            The number of results to ignore. 
       * @param max             The maximum number of results to return. 
       * @return A List of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      List queryForList(String id, Object parameterObject, int skip, int max) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects within a certain range. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @param skip            The number of results to ignore. 
       * @param max             The maximum number of results to return. 
       * @return A List of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      List queryForList(String id, int skip, int max) throws SQLException;  
        
      /** 
       * Executes a mapped SQL SELECT statement that returns a number of 
       * result objects that will be handled one at a time by a 
       * RowHandler. 
       * <p/> 
       * This is generally a good approach to take when dealing with large sets 
       * of records (i.e. hundreds, thousands...) that need to be processed without 
       * eating up all of the system resources. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param rowHandler      A RowHandler instance 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      void queryWithRowHandler(String id, Object parameterObject, RowHandler rowHandler) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns a number of 
       * result objects that will be handled one at a time by a 
       * RowHandler. 
       * <p/> 
       * This is generally a good approach to take when dealing with large sets 
       * of records (i.e. hundreds, thousands...) that need to be processed without 
       * eating up all of the system resources. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @param rowHandler      A RowHandler instance 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      void queryWithRowHandler(String id, RowHandler rowHandler) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects a page at a time. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param pageSize        The maximum number of result objects each page can hold. 
       * @return A PaginatedList of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       * @deprecated All paginated list features have been deprecated 
       */  
      PaginatedList queryForPaginatedList(String id, Object parameterObject, int pageSize) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects a page at a time. 
       * <p/> 
       * This overload assumes no parameter is needed. 
       * 
       * @param id              The name of the statement to execute. 
       * @param pageSize        The maximum number of result objects each page can hold. 
       * @return A PaginatedList of result objects. 
       * @throws java.sql.SQLException If an error occurs. 
       * @deprecated All paginated list features have been deprecated 
       */  
      PaginatedList queryForPaginatedList(String id, int pageSize) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects that will be keyed into a Map. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param keyProp         The property to be used as the key in the Map. 
       * @return A Map keyed by keyProp with values being the result object instance. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      Map queryForMap(String id, Object parameterObject, String keyProp) throws SQLException;  
      
      /** 
       * Executes a mapped SQL SELECT statement that returns data to populate 
       * a number of result objects from which one property will be keyed into a Map. 
       * <p/> 
       * The parameter object is generally used to supply the input 
       * data for the WHERE clause parameter(s) of the SELECT statement. 
       * 
       * @param id              The name of the statement to execute. 
       * @param parameterObject The parameter object (e.g. JavaBean, Map, XML etc.). 
       * @param keyProp         The property to be used as the key in the Map. 
       * @param valueProp       The property to be used as the value in the Map. 
       * @return A Map keyed by keyProp with values of valueProp. 
       * @throws java.sql.SQLException If an error occurs. 
       */  
      Map queryForMap(String id, Object parameterObject, String keyProp, String valueProp) throws SQLException;  
      
      /** 
       * Starts a batch in which update statements will be cached before being sent to 
       * the database all at once. This can improve overall performance of updates update 
       * when dealing with numerous updates (e.g. inserting 1:M related data). 
       * 
       * @throws java.sql.SQLException If the batch could not be started. 
       */  
      void startBatch() throws SQLException;  
      
      /** 
       * Executes (flushes) all statements currently batched. 
       * 
       * @return the number of rows updated in the batch 
       * @throws java.sql.SQLException If the batch could not be executed or if any of the statements 
       *                               fails. 
       */  
      int executeBatch() throws SQLException;  
      
      /** 
       * Executes (flushes) all statements currently batched. 
       * 
       * @return a List of BatchResult objects.  There will be one element in the 
       *  list for each sub-batch executed.  A sub-batch is created by adding a statement 
       *  to the batch that does not equal the prior statement.  
       * @throws SQLException if a database access error occurs, or the drive 
       *   does not support batch statements 
       * @throws BatchException if the driver throws BatchUpdateException 
       * @see com.ibatis.sqlmap.engine.execution.BatchException 
       */  
      List executeBatchDetailed() throws SQLException, BatchException;  
    }  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中使用MyBatis,需要按照以下步骤进行配置和编写SQL映射文件: 1. 添加MyBatisMyBatis-Spring依赖: ```xml <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 配置数据源: 在application.properties文件中添加数据库连接信息,例如: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver ``` 3. 配置MyBatis: 在application.properties文件中添加MyBatis配置信息,例如: ```properties mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.example.demo.entity ``` 其中,mapper-locations指定了SQL映射文件的路径,type-aliases-package指定了实体类的包路径。 4. 编写SQL映射文件: 在mapper目录下创建一个XML文件,例如UserMapper.xml,编写SQL语句和对应的映射关系,例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.demo.mapper.UserMapper"> <select id="getUserById" resultType="com.example.demo.entity.User"> select * from user where id=#{id} </select> <insert id="addUser" parameterType="com.example.demo.entity.User"> insert into user(name, age) values(#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.demo.entity.User"> update user set name=#{name}, age=#{age} where id=#{id} </update> <delete id="deleteUserById" parameterType="int"> delete from user where id=#{id} </delete> </mapper> ``` 其中,namespace指定了Mapper接口的全路径,id指定了方法名,parameterType指定了方法参数类型,resultType指定了返回值类型。 5. 编写Mapper接口: 在com.example.demo.mapper包下创建一个UserMapper.java接口,例如: ```java package com.example.demo.mapper; import com.example.demo.entity.User; import org.apache.ibatis.annotations.*; @Mapper public interface UserMapper { @Select("select * from user where id=#{id}") User getUserById(int id); @Insert("insert into user(name, age) values(#{name}, #{age})") @Options(useGeneratedKeys = true, keyProperty = "id") int addUser(User user); @Update("update user set name=#{name}, age=#{age} where id=#{id}") int updateUser(User user); @Delete("delete from user where id=#{id}") int deleteUserById(int id); } ``` 其中,@Mapper注解标识了该接口是MyBatis的Mapper接口,@Select/@Insert/@Update/@Delete注解分别对应了SQL映射文件中的select/insert/update/delete标签。 至此,MyBatis的配置和SQL映射文件的编写完成。在业务代码中使用UserMapper的方法即可操作数据库

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值