首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC + MyBatis 註解驅動開發:從零構建 CRUD 完整範例

     編輯:Java 綜合教學

專案結構

src/main/java
├─ com.example.config       # 配置類
├─ com.example.controller   # 控制層
├─ com.example.dao          # 資料存取層
├─ com.example.model        # 實體類
└─ com.example.service      # 業務層
src/main/resources
├─ application.properties   # 資料源配置
├─ mybatis-config.xml       # MyBatis 全局配置(可選)
└─ mapper/*.xml             # SQL 映射檔

核心配置類

1. Spring MVC 配置

@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        registry.jsp("/WEB-INF/views/", ".jsp");
    }
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }
}

2. MyBatis + 資料源配置

@Configuration
@MapperScan("com.example.dao")
public class MyBatisConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        return new HikariDataSource();
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));
        return bean.getObject();
    }

    @Bean
    public DataSourceTransactionManager txManager(DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

3. application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

實體與 DAO

// User.java
public class User {
    private Integer id;
    private String name;
    private String pwd;
    // getter/setter/toString
}

// UserDao.java
@Mapper
public interface UserDao {
    @Select("SELECT * FROM user")
    List findAll();

    @Insert("INSERT INTO user(name, pwd) VALUES(#{name}, #{pwd})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insert(User user);
}

Service 與 Controller

@Service
public class UserService {
    @Autowired UserDao userDao;
    public List list() { return userDao.findAll(); }
    public void add(User u) { userDao.insert(u); }
}

@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired UserService userService;

    @GetMapping("/list")
    public String list(Model model) {
        model.addAttribute("users", userService.list());
        return "userList";
    }

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

JSP 視圖

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table border="1">
  <tr><th>ID</th><th>姓名</th><th>密碼</th></tr>
  <c:forEach items="${users}" var="u">
    <tr><td>${u.id}</td><td>${u.name}</td><td>${u.pwd}</td></tr>
  </c:forEach>
</table>
<form action="/user/add" method="post">
  姓名:<input name="name" /> 密碼:<input name="pwd" type="password" />
  <button type="submit">新增</button>
</form>

web.xml(Servlet 3.0+ 可省略,改用 AbstractAnnotationConfigDispatcherServletInitializer)

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override protected Class[] getRootConfigClasses() { return new Class[]{MyBatisConfig.class}; }
    @Override protected Class[] getServletConfigClasses() { return new Class[]{WebMvcConfig.class}; }
    @Override protected String[] getServletMappings() { return new String[]{"/"}; }
}

啟動驗證

Tomcat 啟動 → 訪問 https://localhost:8080/user/list → 顯示用戶列表 → 新增測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved