mybatis增删改查模板设置及设置调用

mybatis增删改查模板设置

系统配置文件完成以及连接好数据之后,就可以用这个mybatis了,首先写这个数据库的增删改查模板StashMapper.xml,这个东西是要放在DAO层中的奥,切记。

1.编写mybatis对应数据库的增删改查模板

在我的StashMapper.xml文件里,下边,开始写如下模板代码:

sql 复制代码
<mapper namespace="com.example.sfdeliverysystem.dao.mybatis.StashMapper">

--结果映射 type:要映射成哪个类型的对象,这里边就是我实体类的路径名,id后边是给result起个名,一般叫实体类名+result
--这个结果映射实际上是对这个返回值进行一个预设,这些字段需要的写的返回值都在这个一一对应的映射里边了,也就是说,我在下边语句明确返回值类型的
--时候,我只需要输入一个resultMap="StashPOResult",就是13行后边id=的那个东西,对应字段的返回值就自动设置好了,要是不用它的话,就得自己写
--比如resultType="integer",resultType="com.example.sfdeliverysystem.model.StashPO"这个就是把这个返回值设置成这个实体类的类型
--涉及这个实体类里边的字段都可以自动设置返回值
       <resultMap type="com.example.sfdeliverysystem.model.StashPO" id="StashPOResult">
--对表中的主键进行映射,id后边的是主键,result后边的是非主键
--property属性:用于指定实体类属性名称;column属性:用于指定数据库列名
        <id property="orderid" column="c_orderid" />
        <result property="name" column="c_name" />
        <result property="address" column="c_address" />
        <result property="packagetype" column="c_packagetype" />                                                                                                                                                                                                                                 
        <result property="weight" column="f_weight" />
        <result property="arrivepayment" column="b_arrivepayment" />
        <result property="comment" column="c_comment" />
    </resultMap>
--这是insert操作的模板预设,id后边是方法名,
--insert需要有入参,所以parameterType后边是入参,代表从这个实体类获得参数
    <insert id="insertStash" parameterType="com.example.sfdeliverysystem.model.StashPO">
           INSERT INTO
               t_stash
            (c_orderid,c_name,c_address,n_tel,c_packagetype,f_weight,b_arrivepayment,c_comment)
           VALUES
            (#{orderid},#{name},#{address},#{tel},#{packagetype},#{weight},#{arrivepayment},#{comment});
            
--values上边这行,代表数据库里边的字段名,values下边这行,代表通过实体类中的对应输入的入参,所以才会有一个带c一个不带c的这种情况
    </insert>
--这是select操作的模板预设,id后边是方法名,select不需要入参,所以没有parameterType后边那一堆
    <select id="selectStash"
    resultMap="StashPOResult">
            SELECT
               c_orderid,c_name,c_address,n_tel,c_packagetype,f_weight,b_arrivepayment,c_comment
            FROM
                t_stash;
    </select>
--这是update操作的模板预设,id后边是方法名,update需要有入参,所以parameterType后边是入参,代表从这个实体类获得参数-->
    <update id="updateStash" parameterType="com.example.sfdeliverysystem.model.StashPO">
            update
                t_stash
            set
                c_orderid = #{orderid},
                c_name = #{name},
                c_address = #{address},
                n_tel=#{tel},
                c_packagetype=#{packagetype},
                f_weight=#{weight},
                b_arrivepayment=#{arrivepayment},
                c_comment=#{comment});
    </update>
--这是delete操作的模板预设,id后边是方法名,update需要有入参,
--所以parameterType后边是入参,代表从这个实体类获得参数
    <delete id="deleteStash" parameterType="String">
            delete
            from
                t_stash
            where
                c_orderid = #{orderid};
--上边只写c_orderid而不写别的字段是因为这比是主键,
--删东西都得在这删,第二范式
    </delete>
</mapper>

下面说一下我遇到的疑惑,看下边的代码

sql 复制代码
<select id="getTRyglFgtsByBh" parameterType="String"
		resultType="com.thunisoft.jxglptJxkh.bean.TRyglFgts">
		SELECT C_BH AS CBh, C_RY AS CRy, C_FGTS AS CFgts,
		C_FY AS
		CFy FROM
		T_RYGL_FGTS WHERE C_BH = #{CBh,jdbcType=VARCHAR}
	</select>

	<select id="getTRyglFgtsListByRy" parameterType="String"
		resultMap="TRyglFgtsResult">
		SELECT C_BH AS CBh, C_RY AS CRy, C_FGTS AS CFgts,
		C_FY AS
		CFy
		FROM
		T_RYGL_FGTS WHERE C_RY = #{CRy}
	</select>

这是两个select模板语句,问题是,第一个和第二个的java类型都是"String",然后下边得代码也基本差不多,差就差在最后一句,第一个是WHERE C_BH = #{CBh,jdbcType=VARCHAR},第二个是 WHERE C_RY = #{CRy},这两个一个用了VARCHAR,一个没有,这是为什么呢?

原因在于,第一个 C_BH代表编号,在数据库中可能是普通得编号也可能是

uu_id,这两种编号得类型不一样,普通编号是VARCHAR,uu_id是有自己单独的类型,但是我上边的java类型是String,只能对应数据库的VARCHAR,这样二对一,就有可能出现对不上的情况,所以我要把下边数据库的类型强行限制成VARCHAR,这样就能完美跟JAVA里的String对应上了。

2.在DAO层建立mapper去调用已建好的模板

首先要确认这个模板文件,我的叫StashMapper.xml是在Dao层里奥

建完模板之后,在项目的DAO层,建立一个mapper接口

在这个接口中写调用模板的代码(本质上用的还是接口那套活)

javascript 复制代码
package com.example.sfdeliverysystem.dao.mybatis;
import  java.util.List;
import com.example.sfdeliverysystem.model.StashPO;

public interface StashMapper {
    /**
     * 这是增
     * @param stashPo
     */
    void insertStash(StashPO stashPo);
    /**
     * 这是查,只有它有返回值
     * @return StashPO
     */
    StashPO selectStash();
    /**
     * 这是改
     * @param stashPo
     */
    void updateStash(StashPO stashPo);
    /**
     * 这是删,删的类型是String
     * @param cid
     */
    void deleteStash(String cid);
相关推荐
救救孩子把12 分钟前
深入理解 Java 对象的内存布局
java
落落落sss14 分钟前
MybatisPlus
android·java·开发语言·spring·tomcat·rabbitmq·mybatis
万物皆字节20 分钟前
maven指定模块快速打包idea插件Quick Maven Package
java
夜雨翦春韭26 分钟前
【代码随想录Day30】贪心算法Part04
java·数据结构·算法·leetcode·贪心算法
简单.is.good32 分钟前
【测试】接口测试与接口自动化
开发语言·python
我行我素,向往自由33 分钟前
速成java记录(上)
java·速成
一直学习永不止步39 分钟前
LeetCode题练习与总结:H 指数--274
java·数据结构·算法·leetcode·数组·排序·计数排序
邵泽明39 分钟前
面试知识储备-多线程
java·面试·职场和发展
Yvemil71 小时前
MQ 架构设计原理与消息中间件详解(二)
开发语言·后端·ruby
程序员是干活的1 小时前
私家车开车回家过节会发生什么事情
java·开发语言·软件构建·1024程序员节