mybatis学习(一)mapper.xml解析和简单增删改查

前言  

搭建SpringBoot环境下的mybatis,详见《SpringBoot集成mybatis实践,源码》https://blog.csdn.net/qq_35642849/article/details/107038989

正文

一、解析mapper.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">

<!-- 名称空间namespace必须唯一 -->
<mapper namespace="com.lbc.mybatisDemo.book.mapper.UserMapper">


    <resultMap id="userMap" type="com.lbc.mybatisDemo.book.model.SysUser">

        <id property="id" column="id"/>
        <result property="userName" column="user_name"/>
        <result property="userPassword" column="user_password"/>
        <result property="userEmail" column="user_email"/>
        <result property="userInfo" column="user_info"/>
        <result property="headImg" column="head_img" jdbcType="BLOB"/>
        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
    </resultMap>

    <select id="selectById" resultMap="userMap">

        select  * from sys_user where id = #{id}
    </select>

    <insert id="insert2" useGeneratedKeys="true" keyProperty="id">
        insert into sys_user (user_name,user_password,user_email,user_info,head_img,create_time)
        value (#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType = BLOB},#{createTime,jdbcType =TIMESTAMP})
    </insert>

    <insert id="insert3" >
        insert into sys_user (user_name,user_password,user_email,user_info,head_img,create_time)
        value (#{userName},#{userPassword},#{userEmail},#{userInfo},#{headImg,jdbcType = BLOB},#{createTime,jdbcType =TIMESTAMP})
        <selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>


    <delete id="deleteById" >
        delete from sys_user where id = #{id}
    </delete>

    <update id="update" >
        update sys_user
        set user_name= #{userName},
        user_password=#{userPassword},
        user_email=#{userEmail},
        user_info=#{userInfo},
        head_img = #{headImg,jdbcType = BLOB},
        create_time =#{createTime,jdbcType =TIMESTAMP}
        where id = #{id}
    </update>
</mapper>

<mapper namespace="com.lbc.mybatisDemo.book.mapper.UserMapper">

namespace指向的是Mapper的接口类

<select><insert><upate><delete>:映射增删改查的使用标签

id:命名空间中的唯一标识符,可用来代表这条语句

resultMap:用于设置返回值的类型和映射关系

<select>sql语句</select> #{id}表示参数

下面详细说明resultMap标签

id:必填,且唯一

type:必填,用于配置查询列所映射到的java对象类型

extends:选填,可以配置当前的resultmap继承自其他的resultMap

autoMapping :选填,可为true或false 用于配置是否启用非映射字段的自动映射功能,改配置可覆盖resultMap的id

以上是resultMap的属性,还包含以下的标签

contructor:配置使用构造方法注入结果,包含idArg . arg

id:一个id结果,标记唯一值,可帮助提高整体性能

result:注入java对象属性的普通结果

association:一个复杂类型关联,许多结果将包成这种类型,可用于一对多,多对多的对象映射

collection:复杂类型的集合,用于管理java对象中的集合对象

discriminator:根据结果值来决定使用哪个结果映射

case:基于某些值的结果映射

二、增删改查实现

通过mapper的接口类@Mapper可以跟mapper.xml关联,在增删改查的标签内添加相应的sql语句如上

实现如下:

@SpringBootApplication
@MapperScan("com.lbc.mybatisDemo.book.mapper")
public class MybatisTestSpringBoot implements CommandLineRunner {


    @Autowired
    UserMapper userMapper;

    public static void main(String[] args) {
        SpringApplication.run(MybatisTestSpringBoot.class, args);
    }


    public void run(String... args) throws Exception {
        /**s
         SysUser user =  userMapper.selectById(1L);
         System.out.println(user);*/

        /**
         SysUser sysUser = new SysUser();
         sysUser.setCreateTime(new Date());
         sysUser.setHeadImg(null);
         sysUser.setUserName("mybatis测试");
         sysUser.setUserPassword("123456");
         sysUser.setUserEmail("123@123.com");
         sysUser.setUserInfo("测试测试");
         int row = userMapper.insert2(sysUser);
         System.out.println(row);*/

        /**
         int row = userMapper.insert3("mybatis","123456","321568@123.com","ceshi",null,new Date());
         System.out.println(row );*/
        /**
        SysUser sysUser = new SysUser();
        sysUser.setId(1004L);
        int row = userMapper.deleteById(sysUser);
        System.out.println(row);*/


        SysUser sysUser = new SysUser();
        sysUser.setId(1006L);
        sysUser.setCreateTime(new Date());
        sysUser.setHeadImg(null);
        sysUser.setUserName("mybatis测试");
        sysUser.setUserPassword("123456");
        sysUser.setUserEmail("123@123.com");
        sysUser.setUserInfo("xiugai");
        int row = userMapper.update(sysUser);
        System.out.println(row);

    }
}

这里发现几个问题:

1、在mapper.xml中同样的#{参数},在使用的时候,可以传java对象,还可以传@param,两个区别

2、在插入数据的时候,遇到id自增怎么办?怎么设置

针对第一个问题,其实在#{参数}中,如果用户传入的是对象,则mybatis会将其属性查找处理,将他们的值传入预处理语句的参数中,参考https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Result_Maps    。还可以用@param将参数传入。

针对第二个问题,如果传入的是javaBean的对象,则可以在insert标签中加useGeneratedKeys="true" keyProperty="id",还可以在语句下添加

<selectKey keyColumn="id" resultType="long" keyProperty="id" order="AFTER">
    SELECT LAST_INSERT_ID()
</selectKey>

也可以做到id自动的目的。注:由于数据库的不同order取值也不同,mysql数据库中order设置AFTER,而在oracle数据库中则应使用BEGORE。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值