MyBatis 中如何执行 SQL 语句

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

MyBatis 中如何执行 SQL 语句

MyBatis 是一个基于 Java 的持久层框架,它提供了多种方式来执行 SQL 语句,包括直接使用 SqlSession 执行、使用映射器(Mapper)执行、使用 SqlSessionTemplate 执行等。本文将介绍 MyBatis 中常见的 SQL 执行方式及其使用方法。

mybatis 执行sql,SpringBoot 教程,mybatis,sql,java

1. 直接使用 SqlSession 执行 SQL 语句

在 MyBatis 中,可以通过 SqlSession 对象直接执行 SQL 语句。SqlSession 是 MyBatis 的核心类之一,它负责与数据库进行交互和管理事务。SqlSession 提供了多个方法来执行 SQL 语句,比如 selectOne、selectList、insert、update 和 delete 等。下面是一个简单的示例:

public class MyBatisTest {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            // 执行查询语句
            User user = sqlSession.selectOne("com.example.mapper.UserMapper.getUserById", 1);
            System.out.println(user);

            // 执行插入语句
            User newUser = new User();
            newUser.setName("Tom");
            newUser.setAge(20);
            int result = sqlSession.insert("com.example.mapper.UserMapper.addUser", newUser);
            System.out.println(result);

            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
}

在上面的示例代码中,首先读取了配置文件 mybatis-config.xml,然后通过 SqlSessionFactoryBuilder 将配置文件解析为 SqlSessionFactory 对象,最后通过 SqlSessionFactory 创建 SqlSession 对象。在 SqlSession 中,可以通过 selectOne、selectList、insert、update 和 delete 等方法执行 SQL 语句。其中,selectOne 方法用于查询单个结果,selectList 方法用于查询多个结果,insert、update 和 delete 方法用于执行更新或删除操作。这些方法的第一个参数为 SQL 语句的 ID,格式为 “namespace.statementId”,其中 namespace 为映射器的命名空间,statementId 为 SQL 语句的 ID。

2. 使用映射器(Mapper)执行 SQL 语句

除了直接使用 SqlSession 执行 SQL 语句外,还可以通过映射器(Mapper)执行 SQL 语句。映射器是 MyBatis 中用于定义 SQL 语句和 Java 对象之间映射关系的接口,它可以通过 XML 或注解的方式进行定义。下面是一个简单的映射器示例:

public interface UserMapper {
    // 查询用户信息
    User getUserById(int id);

    // 添加用户信息
    int addUser(User user);
}

在上面的示例代码中,定义了一个名为 UserMapper 的映射器接口,其中包含了两个方法:getUserById 和 addUser。这两个方法的实现方式与直接使用 SqlSession 执行 SQL 语句的方式类似,只不过将 SQL 语句和参数映射的工作放在了映射器接口中。下面是一个使用映射器执行 SQL 语句的示例:

public class MyBatisTest {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            // 执行查询语句
            User user = userMapper.getUserById(1);
            System.out.println(user);

            // 执行插入语句
            User newUser = new User();
            newUser.setName("Tom");
            newUser.setAge(20);
            int result = userMapper.addUser(newUser);
            System.out.println(result);

            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
    }
}

在上面的示例代码中,首先读取了配置文件 mybatis-config.xml,然后通过 SqlSessionFactoryBuilder 将配置文件解析为SqlSessionFactory 对象,最后通过 SqlSessionFactory 创建 SqlSession 对象。在 SqlSession 中,通过 getMapper 方法获取映射器接口的实例,然后就可以直接调用映射器接口中的方法执行 SQL 语句了。

3. 使用 SqlSessionTemplate 执行 SQL 语句

除了直接使用 SqlSession 和映射器执行 SQL 语句外,还可以使用 SqlSessionTemplate 执行 SQL 语句。SqlSessionTemplate 是 MyBatis-Spring 模块提供的一个类,它封装了 SqlSession 的常用操作,可以方便地在 Spring 框架中使用。下面是一个简单的示例:

public class UserServiceImpl implements UserService {
    private SqlSessionTemplate sqlSessionTemplate;

    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

    @Override
    public User getUserById(int id) {
        return sqlSessionTemplate.selectOne("com.example.mapper.UserMapper.getUserById", id);
    }

    @Override
    public int addUser(User user) {
        return sqlSessionTemplate.insert("com.example.mapper.UserMapper.addUser", user);
    }
}

在上面的示例代码中,通过注入 SqlSessionTemplate 对象来执行 SQL 语句。SqlSessionTemplate 提供了多个方法来执行 SQL 语句,包括 selectOne、selectList、insert、update 和 delete 等。这些方法的使用方式与直接使用 SqlSession 执行 SQL 语句的方式类似。

4. SQL 语句的参数映射

在执行 SQL 语句时,需要将 SQL 语句中的参数映射到 Java 对象中。MyBatis 提供了多种方式来实现参数映射,包括基本类型参数、JavaBean 参数、Map 参数和注解参数等。下面是一个简单的示例:

public interface UserMapper {
    // 查询用户信息
    User getUserById(int id);

    // 添加用户信息
    int addUser(User user);

    // 查询用户信息,使用 Map 参数
    User getUserByIdMap(Map<String, Object> paramMap);

    // 添加用户信息,使用注解参数
    @Insert("insert into user(name, age) values(#{user.name}, #{user.age})")
    int addUserAnnotation(@Param("user") User user);
}

在上面的示例代码中,getUserById 和 addUser 方法使用了 JavaBean 参数,getUserByIdMap 方法使用了 Map 参数,addUserAnnotation 方法使用了注解参数。在使用 JavaBean 参数和 Map 参数时,需要将 SQL 语句中的参数与 Java 对象的属性进行映射。在使用注解参数时,需要在 SQL 语句中使用 #{paramName} 的方式,其中 paramName 为注解参数的名称。

5. SQL 语句的返回结果映射

在执行 SQL 语句时,需要将 SQL 语句中的返回结果映射到 Java 对象中。MyBatis 提供了多种方式来实现返回结果映射,包括基本类型返回、JavaBean 返回、Map 返回和注解返回等。下面是一个简单的示例:

public interface UserMapper {
    // 查询用户信息,返回 JavaBean
    User getUserById(int id);

    // 查询用户信息,返回 Map
    Map<String, Object> getUserByIdMap(int id);

    // 查询用户信息,使用注解返回
    @Select("select name, age from user where id=#{id}")
    @Results({
            @Result(property = "name", column = "name"),
            @Result(property = "age", column = "age")
    })
    User getUserByIdAnnotation(int id);
}

在上面的示例代码中,getUserById 方法返回了一个 JavaBean,getUserByIdMap 方法返回了一个 Map,getUserByIdAnnotation 方法使用了注解返回。在使用注解返回时,需要在 SQL 语句中使用 @Results 和 @Result 注解将查询结果与 JavaBean 的属性进行映射。

6. 总结

MyBatis 提供了多种方式来执行 SQL 语句,包括直接使用 SqlSession 执行、使用映射器执行、使用 SqlSessionTemplate 执行等。在执行 SQL 语句时,需要将 SQL 语句中的参数和返回结果文章来源地址https://www.toymoban.com/news/detail-649090.html

到了这里,关于MyBatis 中如何执行 SQL 语句的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • springboot+mysql+mybatis如何实现控制台打印sql

    在Spring Boot中使用MyBatis与MySQL,并希望在控制台打印SQL语句,你可以通过配置MyBatis的日志级别来实现。以下是具体步骤: 添加依赖: 确保你的项目中包含了MyBatis和MySQL的相关依赖。在 pom.xml 文件中添加如下依赖: 配置application.properties或application.yml: 在 application.properties 或

    2024年02月01日
    浏览(58)
  • Mybatis 中如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

    在Mybatis中,可以通过配置映射文件来将SQL执行结果封装为目标对象并返回。 一种映射形式是使用resultType属性,将查询结果映射为指定的目标对象。例如: 另一种映射形式是使用resultMap属性,通过定义映射关系来将查询结果映射为目标对象。例如: 除了以上两种形式,还可

    2024年02月07日
    浏览(42)
  • MyBatis中相关SQL语句

    1.between... and... 2.and   or 3.like ---两种写法 完整示例:   前端传入cust_no为1019,后端实际查询语句 注意:由于一开始where语句只写了 if test=\\\"reportRule != null没有写reportRule != \\\'\\\'\\\" ,导致查询结果出错,所以我们如果用到动态查询的话,一定要搞清楚前端传的是空值还是null值,如

    2024年02月12日
    浏览(41)
  • Mybatis中执行Sql的执行过程

    MyBatis中执行SQL的过程可以分为以下几个步骤: 解析配置文件:在运行时,MyBatis会加载并解析配置文件(通常为 mybatis-config.xml ),获取数据库连接信息、映射文件等。 创建SqlSessionFactory:MyBatis使用SqlSessionFactory来创建SqlSession对象。SqlSessionFactory是一个线程安全的对象,应该

    2024年02月08日
    浏览(40)
  • Mybatis 开启控制台打印sql语句

    org.jeecg.modules.hdx.mapper为@mapper注解下面的类,或者继承BaseMapper,或者@MapperScan扫描包的类 2-1:在pom文件引入依赖 3-1:pom配置(包含分页)

    2024年02月13日
    浏览(81)
  • mybatis配置批量执行SQL

    foreach 标签插入数据量大时,明显影响效率,个人倾向以下配置  applicationcontext 配置文件 Java代码 mybatis文件没什么可说的,就是普通单条插入的insert 标签即可

    2024年02月12日
    浏览(43)
  • springboot 下mybatis-plus 如何打印sql日志和参数到日志文件

    网上很多说法打印sql日志的方法在application.properties配置文件中 但是上述配置只能将sql日志打印到控制台,无法打印到日志文件中 参考下面这个文档,将sql日志打印到日志文件中 https://www.ius7.com/a/305 1:设置mybatisplus包下的日志级别为DEBUG; 2:设置项目mapper目录的日志级别为DE

    2024年02月14日
    浏览(52)
  • IDEA全局设置MyBatis中写SQL语句提示

    第一步:把这两个设置改成MySQL即可:   第二步:找到设置=编辑器=语言注入=店家加号,选择MySQL 

    2024年02月13日
    浏览(48)
  • MyBatis XML 映射文件中的 SQL 语句可以分为动态语句和静态语句

    目录 静态查询: 动态查询: 静态更新: 动态更新: 静态删除: 动态删除: 动态语句和静态语句在 MyBatis 中的作用如下: 静态查询: 静态查询是指在 SQL 语句中执行固定的查询操作,查询的条件和内容是预先确定的,不会随着用户输入或其他条件的改变而改变。以下是一

    2024年01月18日
    浏览(72)
  • Mybatis - 常用 SQL 语句设计思路及具体实现 - 学习记录

    使用 Mybatis,那么在 xml 文件内,最好 不要使用任何的注释符号 ,否则会报错 Could not set parameters for mapping解决方法 xml文件内有注释符号导致的 补充提醒: 因为批量操作会拼接成很长很长的mysql语句,所以mysql server在接收数据包的时候,对这个数据包的大小是有设置项限制的

    2024年02月09日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包