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);
相关推荐
dddaidai1233 分钟前
深入JVM(四):垃圾收集器
java·开发语言·jvm
BBB努力学习程序设计9 分钟前
Java方法(函数)完全指南:初学者的第一个"工具箱"
java
AI科技星14 分钟前
圆柱螺旋运动方程的一步步求导与实验数据验证
开发语言·数据结构·经验分享·线性代数·算法·数学建模
laocooon52385788619 分钟前
python 收发信的功能。
开发语言·python
xixixi7777719 分钟前
STIX/TAXII:网络威胁情报的“普通话”与“顺丰快递”
开发语言·安全·php·威胁·攻击检测·stix·taxii
爬山算法22 分钟前
Netty(19)Netty的性能优化手段有哪些?
java·后端
Tony Bai23 分钟前
Cloudflare 2025 年度报告发布——Go 语言再次“屠榜”API 领域,AI 流量激增!
开发语言·人工智能·后端·golang
ID_1800790547323 分钟前
有没有其他语言实现淘宝商品详情API接口采集的方案?
开发语言
清水白石00826 分钟前
《Python 责任链模式实战指南:从设计思想到工程落地》
开发语言·python·责任链模式
love is sour34 分钟前
深入浅出 jmap:Java 内存分析的“显微镜“
java·开发语言·测试工具·性能优化