SpringMVC mybatis整合实例代码详解

SpringMVC MyBatis整合实例代码详解

SpringMVC和MyBatis是两个非常流行的Java Web框架,它们都有自己的优点和特点。在本文中,我们将详细讲解如何将SpringMVC和MyBatis整合起来,以便更好地开发Web应用程序。

整合步骤

整合SpringMVC和MyBatis需要以下步骤:

  1. 添加依赖
  2. 配置数据源
  3. 配置MyBatis
  4. 配置SpringMVC
  5. 编写代码

下面我们将逐一讲解这些步骤。

添加依赖

首先,我们需要添加SpringMVC和MyBatis的依赖。下面是一个使用Maven的示例:

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.9</version>
  </dependency>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency>
  <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.0.7</version>
  </dependency>
  <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.8</version>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
  </dependency>
</dependencies>

在上面的代码中,我们添加了SpringMVC、MyBatis、Druid和MySQL的依赖。

配置数据源

接下来,我们需要配置数据源。在本文中,我们使用Druid作为数据源。下面是一个使用Druid的示例:

@Configuration
public class DataSourceConfig {
  @Bean
  public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
    dataSource.setUsername("root");
    dataSource.setPassword("password");
    return dataSource;
  }
}

在上面的代码中,我们使用@Configuration注解来配置数据源,并使用@Bean注解来创建DruidDataSource对象。我们还设置了数据库的URL、用户名和密码。

配置MyBatis

接下来,我们需要配置MyBatis。下面是一个使用MyBatis的示例:

@Configuration
@MapperScan("com.example.mapper")
public class MyBatisConfig {
  @Autowired
  private DataSource dataSource;

  @Bean
  public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
    sessionFactory.setDataSource(dataSource);
    sessionFactory.setTypeAliasesPackage("com.example.entity");
    return sessionFactory;
  }

  @Bean
  public MapperScannerConfigurer mapperScannerConfigurer() {
    MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
    scannerConfigurer.setBasePackage("com.example.mapper");
    return scannerConfigurer;
  }
}

在上面的代码中,我们使用@Configuration注解来配置MyBatis,并使用@MapperScan注解来扫描Mapper接口。我们还使用@Autowired注解来注入数据源,并使用SqlSessionFactoryBean来创建SqlSessionFactory对象。我们还使用MapperScannerConfigurer来扫描Mapper接口。

配置SpringMVC

接下来,我们需要配置SpringMVC。下面是一个使用SpringMVC的示例:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class MvcConfig implements WebMvcConfigurer {
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("/static/");
  }

  @Bean
  public InternalResourceViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
  }
}

在上面的代码中,我们使用@Configuration注解来配置SpringMVC,并使用@EnableWebMvc注解来启用SpringMVC。我们还使用@ComponentScan注解来扫描Controller。我们还使用addResourceHandlers方法来添加静态资源处理器,并使用InternalResourceViewResolver来配置视图解析器。

编写代码

最后,我们需要编写代码。下面是一个使用SpringMVC和MyBatis的示例:

@Controller
public class UserController {
  @Autowired
  private UserService userService;

  @GetMapping("/users")
  public String getUsers(Model model) {
    List<User> users = userService.getUsers();
    model.addAttribute("users", users);
    return "users";
  }
}

@Service
public class UserServiceImpl implements UserService {
  @Autowired
  private UserMapper userMapper;

  @Override
  public List<User> getUsers() {
    return userMapper.getUsers();
  }
}

public interface UserMapper {
  List<User> getUsers();
}

public class User {
  private Long id;
  private String name;
  private Integer age;
  // getters and setters
}

public interface UserService {
  List<User> getUsers();
}

在上面的代码中,我们创建了一个名为“UserController”的Controller,并注入了一个名为“userService”的Service。我们还创建了一个名为“UserServiceImpl”的Service,并注入了一个名为“userMapper”的Mapper。我们还创建了一个名为“UserMapper”的Mapper接口,并创建了一个名为“User”的实体类。我们还创建了一个名为“UserService”的Service接口。

示例说明

示例1:使用SpringMVC和MyBatis查询用户列表

在本示例中,我们将使用SpringMVC和MyBatis查询用户列表。我们将创建一个名为“UserController”的Controller,并注入一个名为“userService”的Service。我们还将创建一个名为“UserServiceImpl”的Service,并注入一个名为“userMapper”的Mapper。我们还将创建一个名为“UserMapper”的Mapper接口,并创建一个名为“User”的实体类。我们还将创建一个名为“UserService”的Service接口。

在UserController中添加以下方法:

@GetMapping("/users")
public String getUsers(Model model) {
  List<User> users = userService.getUsers();
  model.addAttribute("users", users);
  return "users";
}

在UserServiceImpl中添加以下方法:

@Override
public List<User> getUsers() {
  return userMapper.getUsers();
}

在UserMapper中添加以下方法:

List<User> getUsers();

在User中添加以下属性和方法:

private Long id;
private String name;
private Integer age;
// getters and setters

在UserService中添加以下方法:

List<User> getUsers();

在MyBatisConfig中添加以下方法:

@Bean
public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
  SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  sessionFactory.setDataSource(dataSource);
  sessionFactory.setTypeAliasesPackage("com.example.entity");
  sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*.xml"));
  return sessionFactory;
}

在resources目录下创建一个名为“mapper”的目录,并在其中创建一个名为“UserMapper.xml”的文件,内容如下:

<mapper namespace="com.example.mapper.UserMapper">
  <select id="getUsers" resultType="com.example.entity.User">
    select * from user
  </select>
</mapper>

在WEB-INF目录下创建一个名为“views”的目录,并在其中创建一个名为“users.jsp”的文件,内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Users</title>
</head>
<body>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Age</th>
      </tr>
    </thead>
    <tbody>
      <c:forEach items="${users}" var="user">
        <tr>
          <td>${user.id}</td>
          <td>${user.name}</td>
          <td>${user.age}</td>
        </tr>
      </c:forEach>
    </tbody>
  </table>
</body>
</html>

在MvcConfig中添加以下方法:

@Bean
public InternalResourceViewResolver viewResolver() {
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
  return viewResolver;
}

在DataSourceConfig中添加以下方法:

@Bean
public DataSource dataSource() {
  DruidDataSource dataSource = new DruidDataSource();
  dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
  dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
  dataSource.setUsername("root");
  dataSource.setPassword("password");
  dataSource.setInitialSize(5);
  dataSource.setMinIdle(5);
  dataSource.setMaxActive(20);
  dataSource.setMaxWait(60000);
  dataSource.setTimeBetweenEvictionRunsMillis(60000);
  dataSource.setMinEvictableIdleTimeMillis(300000);
  dataSource.setValidationQuery("SELECT 1 FROM DUAL");
  dataSource.setTestWhileIdle(true);
  dataSource.setTestOnBorrow(false);
  dataSource.setTestOnReturn(false);
  dataSource.setPoolPreparedStatements(true);
  dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
  dataSource.setFilters("stat,wall");
  return dataSource;
}

在上面的代码中,我们使用DruidDataSource来配置数据源,并设置了一些连接池的参数。我们还使用SqlSessionFactoryBean来配置MyBatis,并使用@MapperScan注解来扫描Mapper接口。我们还使用InternalResourceViewResolver来配置视图解析器,并使用@GetMapping注解来处理GET请求。

示例2:使用SpringMVC和MyBatis添加用户

在本示例中,我们将使用SpringMVC和MyBatis添加用户。我们将创建一个名为“UserController”的Controller,并注入一个名为“userService”的Service。我们还将创建一个名为“UserServiceImpl”的Service,并注入一个名为“userMapper”的Mapper。我们还将创建一个名为“UserMapper”的Mapper接口,并创建一个名为“User”的实体类。我们还将创建一个名为“UserService”的Service接口。

在UserController中添加以下方法:

@GetMapping("/add")
public String addUserForm(Model model) {
  model.addAttribute("user", new User());
  return "addUser";
}

@PostMapping("/add")
public String addUser(@ModelAttribute("user") User user) {
  userService.addUser(user);
  return "redirect:/users";
}

在UserServiceImpl中添加以下方法:

@Override
public void addUser(User user) {
  userMapper.addUser(user);
}

在UserMapper中添加以下方法:

void addUser(User user);

在User中添加以下属性和方法:

private Long id;
private String name;
private Integer age;
// getters and setters

在UserService中添加以下方法:

void addUser(User user);

在MyBatisConfig中添加以下方法:

@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
  MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
  scannerConfigurer.setBasePackage("com.example.mapper");
  Properties properties = new Properties();
  properties.setProperty("mappers", "org.apache.ibatis.annotations.Mapper");
  properties.setProperty("notEmpty", "false");
  properties.setProperty("IDENTITY", "MYSQL");
  scannerConfigurer.setProperties(properties);
  return scannerConfigurer;
}

在resources目录下创建一个名为“mapper”的目录,并在其中创建一个名为“UserMapper.xml”的文件,内容如下:

<mapper namespace="com.example.mapper.UserMapper">
  <insert id="addUser" parameterType="com.example.entity.User">
    insert into user(name, age) values(#{name}, #{age})
  </insert>
</mapper>

在WEB-INF目录下创建一个名为“views”的目录,并在其中创建一个名为“addUser.jsp”的文件,内容如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Add User</title>
</head>
<body>
  <form method="post" action="/add">
    <label>Name:</label>
    <input type="text" name="name" required>
    <br>
    <label>Age:</label>
    <input type="number" name="age" required>
    <br>
    <button type="submit">Add User</button>
  </form>
</body>
</html>

在MvcConfig中添加以下方法:

@Bean
public InternalResourceViewResolver viewResolver() {
  InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
  viewResolver.setPrefix("/WEB-INF/views/");
  viewResolver.setSuffix(".jsp");
  return viewResolver;
}

在DataSourceConfig中添加以下方法:

@Bean
public DataSource dataSource() {
  DruidDataSource dataSource = new DruidDataSource();
  dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
  dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC");
  dataSource.setUsername("root");
  dataSource.setPassword("password");
  dataSource.setInitialSize(5);
  dataSource.setMinIdle(5);
  dataSource.setMaxActive(20);
  dataSource.setMaxWait(60000);
  dataSource.setTimeBetweenEvictionRunsMillis(60000);
  dataSource.setMinEvictableIdleTimeMillis(300000);
  dataSource.setValidationQuery("SELECT 1 FROM DUAL");
  dataSource.setTestWhileIdle(true);
  dataSource.setTestOnBorrow(false);
  dataSource.setTestOnReturn(false);
  dataSource.setPoolPreparedStatements(true);
  dataSource.setMaxPoolPreparedStatementPerConnectionSize(20);
  dataSource.setFilters("stat,wall");
  return dataSource;
}

在上面的代码中,我们使用DruidDataSource来配置数据源,并设置了一些连接池的参数。我们还使用SqlSessionFactoryBean来配置MyBatis,并使用MapperScannerConfigurer来扫描Mapper接口。我们还使用InternalResourceViewResolver来配置视图解析器,并使用@GetMapping和@PostMapping注解来处理GET和POST请求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC mybatis整合实例代码详解 - Python技术站

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

相关文章

  • java实现液晶数字字体显示当前时间

    Java实现液晶数字字体显示当前时间攻略 1. 确定需求 本文要实现的需求是通过Java代码实现液晶数字字体显示当前时间,我们可以采用Swing或JavaFX等GUI框架,用于显示时间标签和液晶数字字体。 2. 设计思路 2.1 时间获取 要在程序中获取当前系统时间,首先要用Java类库中的java.util.Date和java.text.SimpleDat…

    Java 2023年5月20日
    00
  • JDBC连接MYSQL分步详解

    JDBC连接MYSQL分步详解 JDBC是Java Database Connectivity的缩写,表示Java数据连接,是一种标准的Java API。JDBC提供了跨多种数据库管理系统的连接协议,能够让Java程序通过这套协议与数据库进行交互,从而实现对数据的增删改查操作。 本文将详细介绍如何使用JDBC连接MYSQL数据库,包括以下几个步骤: 下载安装…

    Java 2023年5月19日
    00
  • Java中Scanner用法实例解析

    Java中Scanner用法实例解析 什么是Scanner java.util.Scanner 是 Java 编程语言中的一个类,它可以使我们从键盘或文件等输入中按照指定格式获取数据。Scanner 主要用于扫描获取用户输入的内容,并对输入进行解析。 Scanner的构造方法 Scanner 可以使用以下几种构造方法来获取不同类型的输入: 可以从字符串中获取…

    Java 2023年5月26日
    00
  • 如何编写Java单元测试?

    当我们编写Java代码时,单元测试是非常重要的一部分。它可以帮助我们在开发过程中就确定代码是否正确,而不必等到部署到实际环境中才发现问题。本篇文章将会给出针对Java代码的单元测试的完整攻略。 步骤一:选择合适的单元测试框架 在Java中,有很多单元测试框架可供选择,包括JUnit、TestNG、Spock等。其中,JUnit是最常用的框架之一。本文将以JU…

    Java 2023年5月11日
    00
  • Java实现最小生成树算法详解

    首先,该文档需要按照标准的markdown格式编写,包括使用合适的标题以及代码块。 本文将详细讲解Java实现最小生成树算法的详细攻略。最小生成树算法是指在一张无向图中,选出一些边将所有顶点连起来,并且这些边的权值之和最小。常用的最小生成树算法有Prim算法和Kruskal算法。 Prim算法 Prim算法的核心思想是:从一个顶点开始,每次选取一个未连接的权…

    Java 2023年5月19日
    00
  • Java系统运行缓慢等问题的排查思路

    我来详细讲解一下“Java系统运行缓慢等问题的排查思路”的完整攻略。 1. 问题定位 首先,我们需要明确具体的问题现象。如果Java系统运行缓慢,可能会有以下一些表现形式: 请求响应时间过长 CPU占用率较高 内存使用率较高 日志输出异常 根据问题现象,我们可以使用以下一些工具来定位问题: 配置管理工具:例如Ansible、Puppet,可以帮助我们收集系统…

    Java 2023年5月24日
    00
  • 自定义类加载器的作用是什么?

    自定义类加载器的作用: Java类在运行时是需要被加载的。默认情况下,Java虚拟机会使用以下三种类加载器来加载类: Bootstrap ClassLoader:负责加载Java的核心类,如java.lang.Object等。 Extension ClassLoader:负责加载Java扩展库,如javax.*等。 Application(Class) Cl…

    Java 2023年5月10日
    00
  • 什么是标记-清除算法?

    以下是关于标记-清除算法的详细讲解: 什么是标记-清除算法? 标记-清除算法是一种常见的垃圾回收算法,它的原理是在程序运行过程中,标记所有不再使用的内存空间,然后清除这些内存空间,从而回收内存空间。标记清除算法分为两个阶段:标记阶段和清除阶段。 标记阶段 在标记阶段,垃圾回收器会遍历所有的对象,标记所有不再使用的对象。标记的方式通常是在对象头中添加一个标记位…

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