基于MyBatis的简单使用(推荐)

下面就给您详细讲解“基于MyBatis的简单使用(推荐)”。

什么是MyBatis?

MyBatis是一款基于Java语言的开源持久层框架,它是面向SQL的框架,并且可以轻松地与各种数据源进行集成。它的主要特点是使得数据持久化开发变得更加容易,开发者只需要编写简单的SQL语句,而且框架还为开发者提供了便捷的ORM操作。

MyBatis的简单使用

下面我们来演示一下如何在Java项目中使用MyBatis。

  1. 首先需要引入MyBatis的相关依赖,常用的有以下五个:
<!--MyBatis核心依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
</dependency>
<!--MyBatis与Spring集成依赖-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.6</version>
</dependency>
<!--数据库连接池依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.2</version>
</dependency>
<!--数据库驱动依赖-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>
<!--日志依赖-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>
  1. 在项目的配置文件中配置数据库连接、MyBatis与Spring的集成、Mapper的扫描等信息。
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="initialSize" value="1" />
    <property name="maxActive" value="20" />
    <property name="maxWait" value="60000" />
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <property name="minEvictableIdleTimeMillis" value="300000" />
    <property name="validationQuery" value="SELECT 'x'" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
    <property name="poolPreparedStatements" value="true" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    <property name="filters" value="mergeStat" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="typeAliasesPackage" value="com.example.model" />
    <property name="mapperLocations" value="classpath:mapper/*.xml" />
</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

<!--扫描MyBatis Mapper-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.example.mapper" />
</bean>
  1. 编写Mapper接口,用于执行SQL语句。
public interface UserMapper {

    @Select("select * from t_user where id = #{id}")
    User selectById(Long id);

    @Select("select * from t_user")
    List<User> selectAll();

    @Insert("insert into t_user(username, password) values(#{username}, #{password})")
    int insert(User user);

    @Update("update t_user set username = #{username}, password = #{password} where id = #{id}")
    int update(User user);

    @Delete("delete from t_user where id = #{id}")
    int deleteById(Long id);

}
  1. 编写Mapper映射文件,用于描述SQL语句的具体内容。
<mapper namespace="com.example.mapper.UserMapper">

    <resultMap id="userMap" type="com.example.model.User">
        <id property="id" column="id" />
        <result property="username" column="username" />
        <result property="password" column="password" />
        <result property="createTime" column="create_time" />
        <result property="updateTime" column="update_time" />
    </resultMap>

    <select id="selectById" resultMap="userMap">
        select * from t_user where id = #{id}
    </select>

    <select id="selectAll" resultMap="userMap">
        select * from t_user
    </select>

    <insert id="insert">
        insert into t_user(username, password) values(#{username}, #{password})
    </insert>

    <update id="update">
        update t_user set username = #{username}, password = #{password} where id = #{id}
    </update>

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

</mapper>
  1. 编写Service层,调用Mapper接口执行SQL语句,并包装返回的结果。
@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User selectById(Long id) {
        return userMapper.selectById(id);
    }

    public List<User> selectAll() {
        return userMapper.selectAll();
    }

    public void insert(User user) {
        userMapper.insert(user);
    }

    public void update(User user) {
        userMapper.update(user);
    }

    public void deleteById(Long id) {
        userMapper.deleteById(id);
    }

}
  1. 编写Controller层,对外提供接口。
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User selectById(@PathVariable Long id) {
        return userService.selectById(id);
    }

    @GetMapping("")
    public List<User> selectAll() {
        return userService.selectAll();
    }

    @PostMapping("")
    public void insert(@RequestBody User user) {
        userService.insert(user);
    }

    @PutMapping("")
    public void update(@RequestBody User user) {
        userService.update(user);
    }

    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable Long id) {
        userService.deleteById(id);
    }

}

示例

下面给出基于MyBatis的两个示例。

  1. 查询用户信息

用户信息在t_user表中,包含id, username, password, create_time, update_time五个字段。根据用户id查询其信息。

public interface UserMapper {

    @Select("select * from t_user where id = #{id}")
    User selectById(Long id);

}

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public User selectById(Long id) {
        return userMapper.selectById(id);
    }

}

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User selectById(@PathVariable Long id) {
        return userService.selectById(id);
    }

}
  1. 新增用户信息

用户信息需要新增到t_user表中,包含id, username, password, create_time, update_time五个字段。需要通过Spring MVC接收用户提交的数据,并将数据保存到数据库。

public interface UserMapper {

    @Insert("insert into t_user(username, password, create_time, update_time) values(#{username}, #{password}, #{createTime}, #{updateTime})")
    int insert(User user);

}

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void insert(User user) {
        user.setCreateTime(new Date());
        user.setUpdateTime(new Date());
        userMapper.insert(user);
    }

}

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("")
    public void insert(@RequestBody User user) {
        userService.insert(user);
    }

}
阅读剩余 83%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于MyBatis的简单使用(推荐) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java 解析线程的几种状态详解

    Java 解析线程的几种状态详解 Java线程是Java程序中的一条执行路径。Java线程可以进入不同的状态。理解这些状态是在编写高质量并发Java程序中非常重要的一步。 下面介绍Java解析线程的几种状态: 新建状态(New) 当创建一个新的线程对象时,线程处于新建状态。此时,该线程已经分配了一个内存空间,但是它还没有开始执行。 示例: Thread th…

    Java 2023年5月18日
    00
  • 解决maven maven.compiler.source和maven.compiler.target的坑

    让我来为您详细讲解如何解决maven中maven.compiler.source和maven.compiler.target的问题。 什么是maven.compiler.source和maven.compiler.target? 在maven项目中,maven.compiler.source和maven.compiler.target分别指定了Java编译器…

    Java 2023年5月19日
    00
  • 自定义@RequestBody注解如何获取JSON数据

    自定义@RequestBody注解可以方便我们在处理请求数据时进行更细致的控制和处理。其实,要自定义@RequestBody注解获取JSON数据很简单,只需要通过反射机制获取请求体中的数据并进行处理即可。 以下是具体的步骤: 定义自定义注解 定义一个自定义注解并使用@Target(ElementType.PARAMETER)来标识该注解只能用在参数上,例如:…

    Java 2023年5月26日
    00
  • Java实现从数据库导出大量数据记录并保存到文件的方法

    Java实现从数据库导出大量数据记录并保存到文件的方法,大概分为以下几步: 首先,需要连接数据库,并且执行查询操作获取数据结果集。 // 加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); // 创建数据库连接 Connection con = DriverManager.getConnecti…

    Java 2023年5月19日
    00
  • Java如何发起http请求的实现(GET/POST)

    下面是详细的Java发起HTTP请求的实现攻略: 1. 准备工作 在Java中发起HTTP请求需要使用到java.net包中的一些类和方法。因此,我们需要先导入以下两个类: import java.net.HttpURLConnection; import java.net.URL; 2. 发起GET请求 下面我们通过一个简单的示例来讲解如何使用Java发起…

    Java 2023年5月26日
    00
  • java中的异或问题代码解析

    本文将详细讲解Java中异或问题的相关知识,并提供两个示例方便理解。 异或运算符(^) 在Java中,异或运算符(^)表示将两个数据的每个二进位进行比较,如果相同则返回0,不同则返回1。例如: int a = 5 ^ 3; // a 的值为 6 上述代码将数值5和3进行异或运算,结果为6。 异或运算的特性 在异或运算中,有三个特性需要特别说明: 交换律 对于…

    Java 2023年5月23日
    00
  • javaweb 实现文件下载的方法及实例代码

    下面是详细讲解“javaweb 实现文件下载的方法及实例代码”的完整攻略。 前言 文件下载是 Web 开发中一个常见的需求场景,例如在网站中提供软件、文档、图片等资源的下载。本文将介绍如何在 JavaWeb 中实现文件下载功能,并提供两个示例代码。 实现方法 1. 基本思路 要实现文件下载功能,我们需要完成以下两个步骤: 从服务器上读取需要下载的文件,获取文…

    Java 2023年6月2日
    00
  • 详解Spring Boot Security工作流程

    下面我将详细讲解 Spring Boot Security 工作流程的完整攻略。 一、什么是 Spring Boot Security Spring Boot Security 基于 Spring Security,是一款用于 Spring Boot 应用程序的 Spring Security 扩展。它提供了一些便捷的方式来配置和使用 Spring Secu…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部