【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

这篇具有很好参考价值的文章主要介绍了【MyBatis】2、MyBatis 的动态 SQL 和增删改操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、添加

(1) 基本插入

<mapper namespace="student">
    <insert id="insert" parameterType="com.pojo.po.Student">
        INSERT INTO student(name, money) VALUES (#{name}, #{money})
    </insert>
</mapper>
public class TestStudent {
    @Test
    public void testInsert() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {
            Student student = new Student();
            student.setName("鹿晗");
            student.setMoney(100L);
            sqlSession.insert("student.insert", student);
        }
    }
}

注意:openSession() 的参数默认值是 false(不自动提交事务)

(2) 设置新插入记录的主键(id)★

🌼 设置新插入记录的主键(id)到参数对象中

<mapper namespace="student">
    <insert id="insert2" parameterType="com.pojo.po.Student">
        INSERT INTO student(name, money) VALUES (#{name}, #{money})

        <!-- resultType 需要和参数对象的主键的属性名的类型一样 -->
        <!-- keyProperty 是属性名, 不是字段名 -->
        <!-- order="AFTER" 插入语句执行完毕后才查询 -->
        <selectKey resultType="long" keyProperty="id" order="AFTER">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
</mapper>

二、更新

<mapper namespace="student">
    <update id="update" parameterType="com.pojo.po.Student">
        UPDATE student SET money = #{money} WHERE name = #{name}
    </update>
</mapper>

三、删除

<mapper namespace="student">
    <delete id="delete">
        DELETE FROM student WHERE id in ${ids}
    </delete>
</mapper>
public class TestStudent {

    @Test
    public void testDelete() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {

            String ids = "(4, 9, 6)";

            sqlSession.insert("student.delete", ids);
        }
    }
    
}

四、动态 SQL

动态 SQL 官方文档:https://mybatis.org/mybatis-3/zh/dynamic-sql.html

(1) if 标签

<mapper namespace="student">
    <select id="dynamicSQL" resultType="com.pojo.po.Student">
        SELECT
        *
        FROM
        student
        WHERE 1 = 1
        <if test="id != null and id > 0">
            AND id > #{id}
        </if>

        <if test="money != null">
            AND money > #{money}
        </if>

        <if test="name != null">
            AND NAME LIKE #{name}
        </if>
    </select>
</mapper>
public class TestStudent {

    @Test
    public void dynamicSql() {
        try (SqlSession sqlSession = MyBatisUtil.openSession(true)) {

            HashMap<String, Object> pMap = new HashMap<>();
            pMap.put("id", 3);
            pMap.put("name", "%杰%");
            // pMap.put("money", 5555);

            List<Student> list = sqlSession.selectList("student.dynamicSQL", pMap);

            for (Student student : list) {
                System.out.println("dynamicSql student = " + student);
            }
        }
    }

}

(2) where 标签

<mapper namespace="student">
    <select id="dynamicSQL" resultType="com.pojo.po.Student">
        SELECT
        *
        FROM
        student
        <where>
            <if test="id != null and id > 0">
                id > #{id}
            </if>

            <if test="money != null">
                AND money > #{money}
            </if>

            <if test="name != null">
                AND NAME LIKE #{name}
            </if>
        </where>
    </select>
</mapper>

(3) foreach 标签

☆ 批量插入:

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

<mapper namespace="student">
    <insert id="batchInsert1" parameterType="List">
        INSERT INTO student (name, money) VALUES
        <foreach collection="list" item="item" separator=",">
            (#{item.name}, #{item.money})
        </foreach>
    </insert>
</mapper>

💦 批量添加的执行效率比多次单个添加的执行效率要高,但是无法获取到新插入的记录的主键
💦 可以使用 useGeneratedKeys 获取新插入的记录的主键。
💦 假如要添加的记录的字段特别多, 批量添加操作生成的 SQL 语句字符串可能会特别长,SQL 语句的长度可能会超过数据库的限制 【分批插入
💦 如果传进来的参数是 List 类型,collection 的属性值为 list 就可以遍历这个 List
💦 如果传进来的参数是数组collection 的属性值为 array 就可以遍历这个数组


☆ 批量删除:

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

<mapper namespace="student">
    <delete id="batchDelete1" parameterType="List">
        DELETE FROM student
        <where>
            id IN (
                <foreach collection="list"
                         separator=","
                         item="item">
                    #{item}
                </foreach>
            )
        </where>
    </delete>
</mapper>
<mapper namespace="student">
    <delete id="batchDelete2">
        DELETE FROM student
        <where>
            id IN
            <foreach collection="array"
                     separator=","
                     open="("
                     close=")"
                     item="item">
                #{item}
            </foreach>
        </where>
    </delete>
</mapper>

五、起别名

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

<typeAliases> 标签写在 mybatis-config.xml 核心配置文件的configuration 标签中
● 写在 <settings> 标签的后面
● 用于设置类型的别名(不区分大小写)

六、sql 标签

<mapper namespace="student">
    <!-- 有抽取公共 SQL 语句的作用 -->
    <sql id="sqlListAll">
        SELECT * FROM student
    </sql>

    <resultMap id="resultMapStudent" type="com.pojo.po.Student">
        <id property="id" column="id"/>
        <result property="createTime" column="create_time"/>
    </resultMap>
    <select id="list" resultMap="resultMapStudent">
        <include refid="sqlListAll"/>
    </select>

    <select id="getById" resultType="com.pojo.po.Student">
        <include refid="sqlListAll"/>
        WHERE id = #{id}
    </select>

    <select id="listByIdAndMoney" resultType="com.pojo.po.Student">
        <include refid="sqlListAll"/>
        WHERE id &lt; #{id} OR money >= #{money}
    </select>

    <select id="getByName" resultType="com.pojo.po.Student">
        <include refid="sqlListAll"/>
        WHERE name LIKE #{name}
    </select>

    <select id="dynamicSQL" resultType="com.pojo.po.Student">
        <include refid="sqlListAll"/>
        <where>
            <if test="id != null and id > 0">
                id > #{id}
            </if>

            <if test="money != null">
                AND money > #{money}
            </if>

            <if test="name != null">
                AND NAME LIKE #{name}
            </if>
        </where>
    </select>

</mapper>

七、在 MyBatis 中集成 druid 连接池

① 引入 Maven 依赖

  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.2</version>
  </dependency>

② 创建连接池工厂类并继承 PooledDataSourceFactoryUnpooledDataSourceFactory;在连接池工厂类的构造方法中设置数据源 dataSource 为 Druid 的数据源实例

/**
 * MyBatis 中集成 Druid 数据库连接池
 */
public class DruidDataSourceFactory extends PooledDataSourceFactory {
    public DruidDataSourceFactory() {
        this.dataSource = new DruidDataSource();
    }
}

③ 在 mybatis-config.xml 文件中配置 Druid 数据源

  <environments default="development">
      <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="com.common.DruidDataSourceFactory">
              <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
              <property name="url"
                        value="jdbc:mysql://localhost:3306/study_mb?useUnicode=true&amp;characterEncoding=utf8"/>
              <property name="username" value="root"/>
              <property name="password" value="root"/>
              <property name="initialSize" value="5"/>
              <property name="maxActive" value="10"/>
              <property name="maxWait" value="5000"/>
          </dataSource>
      </environment>
</environments>

把 druid 数据库连接池的配置放在 druid.properties 文件中

dev.driverClassName=com.mysql.jdbc.Driver
dev.url=jdbc:mysql://localhost:3306/study_mb?useUnicode=true&characterEncoding=utf8
dev.username=root
dev.password=root
dev.initialSize=5
dev.maxActive=10
dev.maxWait=5000

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作

【MyBatis】2、MyBatis 的动态 SQL 和增删改操作文章来源地址https://www.toymoban.com/news/detail-470872.html

<environment id="development">
     <!--采用JDBC的事务管理方法-->
     <transactionManager type="JDBC"/>
     <!--采取druid数据库连接池管理连接-->
     <dataSource type="com.common.DruidDataSourceFactory">
         <property name="driverClassName" value="${dev.driverClassName}"/>
         <property name="url" value="${dev.url}"/>
         <property name="username" value="${dev.username}"/>
         <property name="password" value="${dev.password}"/>
         <property name="initialSize" value="${dev.initialSize}"/>
         <property name="maxActive" value="${dev.maxActive}"/>
         <property name="maxWait" value="${dev.maxWait}"/>
     </dataSource>
</environment>

到了这里,关于【MyBatis】2、MyBatis 的动态 SQL 和增删改操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入解析 MyBatis 中的 <;foreach>; 标签:优雅处理批量操作与动态 SQL

    在当今的Java应用程序开发中,数据库操作是一个不可或缺的部分。MyBatis作为一款颇受欢迎的持久层框架,为我们提供了一种优雅而高效的方式来管理数据库操作。在MyBatis的众多特性中, foreach 标签无疑是一个强大的工具,它使得在SQL语句中进行动态循环迭代变得轻而易举。

    2024年02月13日
    浏览(46)
  • 用GPT4实现SSM框架实现学生信息管理系统的登录和增删改查

    下面介绍一下用GPT4.0生成的SSM框架相关的登录和增删改查代码。没有加css样式。 在pom.xml文件中添加相关依赖: 3.1实体类 Student.java: User.java: 3.2DAO层(Mapper) StudentMapper.java: UserMapper.java: 3.3Service层 StudentService.java: StudentServiceImpl.java: UserService.java: UserServiceImpl.java: 3.4Controller层

    2024年02月09日
    浏览(40)
  • Mybatis的基本操作--增删改查

    目录 查看数据 无参数 一个参数 多个参数 添加数据 修改数据 删除数据 注释的方式进行查找数据 分三种情况: 无参,有一个参数,有多个参数的情况。  (这里的详细操作步骤是博主的上一篇博客写的:初识Mybatis,并创建第一个Mybatis项目(详细图文教程)) 我们在接口中声

    2024年02月15日
    浏览(28)
  • 基于springboot的mybatis增删改查操作

    学习完mybatis入门后,我们继续学习mybatis基础操作。 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除

    2024年02月03日
    浏览(76)
  • 二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)

    IDE :idea 2021.1 构建工具 :maven 3.8.4 MySQL版本 :MySQL 5.7.40 MyBatis版本 :MyBatis 3.5.7 数据库表: 项目初始目录 引入依赖 com/mybatis/entity/User.java 习惯上命名为mybatis-config.xml ,这个文件名仅仅只是建议,并非强制要求。将来整合Spring 之后,这个配置文件可以省略,所以大家操作时

    2024年02月01日
    浏览(46)
  • Mybatis-plus中的DML编程控制--增删改的高级操作

    1.1、id生成策略控制 不同的表应用不同的id生成策略 日志:自增(1,2,3,4,…) 购物订单:特殊规则( FQ23948AK3843) 外卖单:关联地区日期等信息(10 04 20200314 34 91) 关系表:可省略id ······ 名称: @TableId 类型: 属性注解 位置:模型类中用于表示主键的属性定义上方 作用:设置当前类中主

    2024年02月16日
    浏览(43)
  • MyBatis-Plus 基础操作指南:实现高效的增删改查

        大家好,今天我们来聊聊如何使用 MyBatis-Plus(接下来简称为 MP),一个流行的 MyBatis 增强工具,来简化和加速我们的数据库操作。如果你是一位初学者,不用担心,我将带你从头到尾详细了解 MP 的使用方法,特别是如何实现基本的增删改查操作。     在开始详细介绍之

    2024年02月05日
    浏览(35)
  • SQL DML操作之增删改查

    SQL 是结构化查询语言( Structured Query Language )简称,是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。 SQL 语句用于取回和更新数据库中的数据。 SQL 可与数据库程序协同工作,比如 MS Access 、 DB2 、 Informix 、 MS SQL Server 、 Oracle 、 Sybase 以及其他数据库系统。 不幸

    2023年04月19日
    浏览(44)
  • MyBatis 中的动态 SQL 是什么? 如何使用动态 SQL?

    在 MyBatis 中,动态 SQL 是指能够根据条件动态生成 SQL 语句的功能。通过使用动态 SQL,可以根据不同的条件生成不同的 SQL 语句,从而实现灵活的查询和操作。 条件判断:通过 , , , 标签实现 SQL 语句中的条件逻辑,根据传入参数的值来决定是否包含某一部分 SQL 语句。 循环遍

    2024年04月15日
    浏览(30)
  • 认识MyBatis 之 MyBatis的动态SQL

    本篇介绍MyBatis里如何使用动态SQL,了解如何去简单使用动态标签;如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 使用动态SQL的好处:根据不同的条件拼接 SQL 语句,提高了SQL的灵活性; if标签:判断时使用,满足test中的判断,执行if条件 格式: if te

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包