Java后端05(初识MyBatis)

这篇具有很好参考价值的文章主要介绍了Java后端05(初识MyBatis)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Mybatis

举个小栗子

mybatis配置文件(XML配置文件)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--通过这个配置文件,完成mybatis与数据库的连接  -->
<configuration>
<!--mybatis 在实例化的时候,会自动扫描这个包下的所有类,用于后续 sql 语句的 resultType-->
    <typeAliases>
        <package name="com.iweb.entity"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="url" value="jdbc:mysql://localhost:3306/iweb?characterEncoding=utf-8"/>
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
</configuration>

user.xml(实现增删改查的sql语句)

<?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.iweb.entity">
    <select id="listUser" resultType="User">select * from user</select>
<!--    parameterType:表示传入的参数类型,可以是基本数据类型,也可以是引用类型
        基本类型中需要注意:如果传入的参数为整型,参数“_int” 表示 int 类型,参数“int” 表示 Integer 类型-->
    <insert id="addUser" parameterType="User">insert into user values (#{userId},#{username},#{password})</insert>
    <delete id="deleteUser" parameterType="String">delete from user where userId = #{userId}</delete>
    <update id="updateUser" parameterType="User">update user set username = #{username},password = #{password} where userId = #{userId}</update>
    <select id="getUser" parameterType="String" resultType="User">select * from user where userId = #{userId}</select>
<!--    模糊查询-->
    <select id="listUserByNameLike" parameterType="String" resultType="User">select * from user where username like concat('%',#{0},'%')</select>
<!--    复杂查询-->
    <select id="listUserByIdAndNameLike" parameterType="map" resultType="User">select * from user where userId > #{userId} and username like concat('%',#{username},'%')</select>
</mapper>

使用做sql查询(Test)

public void test1() throws IOException {
    private SqlSession sqlSession;
    @Before
    public void init() throws IOException {
        // 输入流读取配置文件信息
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 基于配置文件获取 mybatis 的一级缓存对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 基于这个一级缓存,创建一个二级缓存
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void test01(){
        // 使用二级缓存实现sql语句调用
        List<User> userList = sqlSession.selectList("listUser");
        // 遍历集合
        for (User user : userList) {
            System.out.println(user);
        }
    }

    @Test
    public void test02(){
        User user = new User("3","robot01","123456");
        sqlSession.insert("addUser",user);
        // mybatis 需要手动提交缓存
        sqlSession.commit();
        test01();
    }

    @Test
    public void test03(){
        User user = new User();
        user.setUserId("3");
        sqlSession.delete("deleteUser",user);
        sqlSession.commit();
        test01();
    }

    @Test
    public void test04(){
        User user = sqlSession.selectOne("getUser","2");
        System.out.println(user);
    }

    @Test
    public void test05(){
        User user = new User("2","HSS","123456");
        sqlSession.update("updateUser",user);
        sqlSession.commit();
        test01();
    }

    @Test
    public void test06(){
        List<User> users = sqlSession.selectList("listUserByNameLike","ss");
        System.out.println(users);
    }

    @Test
    public void test07(){
        Map<String,Object> params = new HashMap<>();
        params.put("userId",2);
        params.put("username","ss");
        List<User> users = sqlSession.selectList("listUserByIdAndNameLike",params);
        System.out.println(users);
    }
}

一对多关系查询

配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!!!!)

<resultMap id="productBean" type="Product">
    <id column="productId" property="productId"/>
    <result column="productName" property="productName"/>
    <result column="price" property="price"/>
    <result column="stock" property="stock"/>
    <association property="user" javaType="User">
        <id column="uId" property="userId"/>
        <result column="username" property="username"/>
    </association>
</resultMap>
<!--    多对一关系查询-->
<select id="listProduct" resultMap="productBean">
    select productName,productId,price,stock,u.userId 'uId',username from product left join user u on product.userId = u.userId
</select>

测试类

public class TestMybatis {
    private SqlSession sqlSession;
    @Before
    public void init() throws IOException {
        // 输入流读取配置文件信息
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 基于配置文件获取 mybatis 的一级缓存对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 基于这个一级缓存,创建一个二级缓存
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void test01(){
        List<Product> productList = sqlSession.selectList("listProduct");
        for (Product product : productList) {
            System.out.println(product);
        }
    }
}

动态sql查询

配置文件(⭐注意:每一个配置文件都需要在 mybatis-config.xml 中进行注册!!!!!!!!!)

<select id="listProduct" resultType="product">
    select * from product
    <if test="productName != null">
        where productName like concat('%',#{productName},'%')
    </if>
</select>

测试类

@Test
public void test01(){
    List<Product> productList = sqlSession.selectList("listProduct");
    for (Product product : productList) {
        System.out.println(product);
    }
}

@Test
public void test02(){
    Map<String,String> params = new HashMap<>();
    params.put("productName","1");
    List<Product> productList = sqlSession.selectList("listProduct",params);
    for (Product product : productList) {
        System.out.println(product);
    }
}

多条件查询

<!--多条件查询的矛盾-->
<!--    where 标签会进行自动判断,如果所有的 if 条件都不成立,那么 sql 语句中不会出现 where 关键字
        只要有一个条件成立,就会自动去除冗余的 and,并自动添加 where-->
<select id="listProduct" resultType="Product">
    select * from product
    <where>
        <if test="productName != null">
            and productName like concat('%',#{productName},'%')
        </if>
        <if test="price != 0">
            and price > #{price}
        </if>
    </where>
</select>

测试类

@Test
public void test01(){
    Map<String,Object> params = new HashMap<>();
    params.put("productName","1");
    params.put("price",0);
    List<Product> productList = sqlSession.selectList("listProduct",params);
    for (Product product : productList) {
        System.out.println(product);
    }
}

动态sql更新

<update id="updateProduct">
    update product
    <set>
        <if test="productName != null">
            productName = #{productName},
        </if>
        <if test="price != null">
            price = #{price},
        </if>
        <if test="stock != null">
            stock = #{stock},
        </if>
    </set>
    where productId = #{productId}
</update>

测试类

@Test
public void test01(){
    Map<String,Object> params = new HashMap<>();
    params.put("productId","1");
    params.put("productName","product");
    params.put("price","10086");
    params.put("stock","10000");
    sqlSession.update("updateProduct",params);
    sqlSession.commit();
}

when otherwise 标签

<mapper namespace="com.iweb.entity">
<!--    mybatis 没有 else 标签,只能使用 when otherwise 表示 else,如果提供了任何条件,则进行条件铲鲟,如果没有提供任何条件参数,则使用 otherwise 作为条件-->
    <select id="listProduct" resultType="Product">
        select * from product
        <where>
            <choose>
                <when test="productName != null">
                    and name like concat('%',#{productName},'%')
                </when>
                <when test="price != null">
                    and price > #{price}
                </when>
                <otherwise>
                    and id > 5
                </otherwise>
            </choose>
        </where>
    </select>
</mapper>

使用注解方式实现简单的sql

mapper接口文件(一定要注册!!!!!!)

/**
 * 通过接口(底层是java的JDK动态代理)实现 mybatis 调用
 * 开发人员只需要关心接口,实现类由 mybatis 动态生成
 * 1. 注解开发方式: 适用于简单场景(注解场景下编写一对多 多对一 或者是动态sql非常麻烦)
 * 2. xml配置文件开发方式:适用于所有场景(推荐)
 * @author te9uila
 * @since 2023/8/5
 */
public interface ProductMapper {
    @Insert("insert into product values (#{productId},#{productName},#{price},#{stock},#{userId})")
    void add(Product product);
    @Delete("delete from product where productId = #{productId}")
    void delete(String id);
    @Select("select * from product where productId = #{productId}")
    Product get(String id);
    @Update("update product set productName = #{productName},price = #{price},stock = #{stock} where productId = #{productId}")
    int update(Product product);
    @Select("select * from product")
    List<Product> list();
}

测试类文章来源地址https://www.toymoban.com/news/detail-630798.html

@Test
public void test01(){
    ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class);
    List<Product> productList = productMapper.list();
    System.out.println(productList);
}

到了这里,关于Java后端05(初识MyBatis)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Mybatis 初识

    Mybatis 初识

    目录 1. MyBatis入门 1.1 MyBatis的定义 1.2 MyBatis的核心 MyBatis的核心 JDBC 的操作回顾 1.3 MyBatis的执行流程 MyBatis基本工作原理 2. MyBatis的使用 2.1 MyBatis环境搭建 2.1.1 创建数据库和表 2.1.2 添加MyBatis框架支持 老项目添加MyBatis 新项目添加MyBatis 2.1.3 设置MyBatis配置信息 设置数据库连接的

    2024年02月12日
    浏览(13)
  • 【Spring】初识MyBatis (一)

    MyBatis是一个支持普通SQL查询、存储过程以及高级映射的持久层框架,它消除了几乎所有的JDBC代码和参数的手动设置以及对结果集的检索,并使用简单的XML或注解进行配置和原始映射,用以将接口和Java的POJO(Plain Old Java Object,普通Java对象)映射成数据库中的记录,使得Java开

    2024年02月03日
    浏览(10)
  • 汇编语言(举个栗子)

    汇编语言(举个栗子)

            汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的

    2024年02月05日
    浏览(13)
  • JavaWeb后端——Mybatis

    JavaWeb后端——Mybatis

    Mybatis:Java程序来对数据库进行操作,一款优秀的持久层框架,用于简化JDBC的开发 SSM:SpringMVC、Spring、Mybatis   步骤2:注意数据库连接的四要素 application.properties:springboot 的默认文件,配置:key = value Mybatis 中定义 SQL 语句: ① 基于注解定义 ② 基于 XML 定义 1. 2 步骤:对于

    2024年04月11日
    浏览(13)
  • 若依管理系统后端将 Mybatis 升级为 Mybatis-Plus

    若依管理系统后端将 Mybatis 升级为 Mybatis-Plus

    若依管理系统是一个非常完善的管理系统模板,里面含有代码生成的方法,可以帮助用户快速进行开发,但是项目使用的是 mybatis ,对于熟悉使用 mybatis-plus 进行开发的小伙伴们不是很便捷,本文主要讲解如何在不影响系统现有功能的基础上,将 mybatis 升级为 mybatis-plus ,以帮

    2024年02月14日
    浏览(12)
  • Mybatis-Plus——05,乐观锁(新注解)

    Mybatis-Plus——05,乐观锁(新注解)

    乐观锁实现方式: 一、数据库添加一个字段 二、实体类添加@version注解 三、注册乐观锁插件 四、测试一下 4.1成功的乐观锁 version都是1 运行测试方法: 由1变为2 4.2失败的乐观锁 数据库的值为2 ———————— 创作不易,笔记不易,如觉不错,请三连,谢谢~~

    2024年03月09日
    浏览(10)
  • (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    (第六天)初识Spring框架-SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    ​ 昨天我们已经把Mybatis框架的基本知识全部学完,内容有Mybatis是一个半自动化的持久层ORM框架,深入学习编写动态SQL,Mybatis的关联映射,一对一、一对多、多对多、Mybatis的缓存机制,一二级缓存的开启和设置,缓存命中率、如何使用idea链接数据库自动生成pojo类等。我们学

    2024年02月10日
    浏览(12)
  • (第十一天)初识SpringMVC SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    (第十一天)初识SpringMVC SSM框架的学习与应用(Spring + Spring MVC + MyBatis)-Java EE企业级应用开发学习记录

    今天我们要来学习一下SSM框架的最后一个框架SpringMVC 一、初认SpringMVC 基本概念: ​ Spring MVC(Model-View-Controller)是一个用于构建Java Web应用程序的开源框架,它提供了一种基于MVC架构的方式来开发Web应用 。 ​ SpringMVC是Spring Framework的一部分,它是一种基于模型-视图-控制器(

    2024年02月07日
    浏览(36)
  • 初识MyBatis(一)基于配置文件下的一些增删改查

    初识MyBatis(一)基于配置文件下的一些增删改查

     MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录  MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架 创建好maven工程(设置打包方式为jar,引入依赖) 创建MyBatis的核心配置文件(主要用于

    2024年02月09日
    浏览(5)
  • 举个栗子!Tableau 技巧(256):灵活折叠文本表的多级数据行

    举个栗子!Tableau 技巧(256):灵活折叠文本表的多级数据行

    通常,Tableau 默认的图表分层结构是统一打开或关上,有什么办法可以按需选择展开或折叠?如下示例:单击“+”展开层级,单击“-“收起层级。 可以试试集操作!今天的栗子,就来分享具体实现方法吧~ 本期《举个栗子》,我们要给大家分享的 Tableau 技巧是:灵活折叠文本

    2024年02月14日
    浏览(19)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包