java EE纯注解SSM框架整合

本文详细介绍了如何使用Spring、Spring-MVC和MyBatis进行三层架构的纯注解整合,包括创建数据库表、添加数据,配置POM.xml中的依赖,编写Java代码实现,以及使用注解替代XML配置。
摘要由CSDN通过智能技术生成

题目

根据图书的id在数据库中查询图书,使用三层架构去书写spring-mvc、spring、mybatis的纯注解的整合。

第一步:创建数据库并添加数据

use mybatis;

create table tb_book(
	id int primary key auto_increment,
	`name` varchar(50) not null,
	press varchar(50),
	author varchar(50)
)ENGINE=InnoDB CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';

insert into tb_book values (null,'java EE 企业级应用开发教程','人民邮电出版社','黑马程序员');

第二步:在pom.xml文件中所需的依赖

<dependencies>
	  <!--servlet-->
	  <dependency>
		  <groupId>javax.servlet</groupId>
		  <artifactId>javax.servlet-api</artifactId>
		  <version>4.0.1</version>
		  <scope>provided</scope>
	  </dependency>
	  <!--dao-->
	  <!--mysql驱动-->
	  <dependency>
		  <groupId>mysql</groupId>
		  <artifactId>mysql-connector-java</artifactId>
		  <version>8.0.33</version>
	  </dependency>
	  
	  <!--druid连接池-->
	  <dependency>
		  <groupId>com.alibaba</groupId>
		  <artifactId>druid</artifactId>
		  <version>1.1.20</version>
	  </dependency>
	  
	  <!--mybatis驱动-->
	  <dependency>
		  <groupId>org.mybatis</groupId>
		  <artifactId>mybatis</artifactId>
		  <version>3.5.8</version>
	  </dependency>
	  
	  <!--spring mvc-->
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context</artifactId>
		  <version>5.2.0.RELEASE</version>
	  </dependency>
	  
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-jdbc</artifactId>
		  <version>5.2.0.RELEASE</version>
	  </dependency>
	  
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-aspects</artifactId>
		  <version>5.2.0.RELEASE</version>
	  </dependency>
	  
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-webmvc</artifactId>
		  <version>5.2.0.RELEASE</version>
	  </dependency>
	  
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-tx</artifactId>
		  <version>5.2.0.RELEASE</version>
	  </dependency>
	  
	  <!--测试和整合-->
	  <dependency>
		  <groupId>org.mybatis</groupId>
		  <artifactId>mybatis-spring</artifactId>
		  <version>2.0.1</version>
	  </dependency>
  </dependencies>

第三步:java代码的实现

        在chenzihao.demo01.pojo包下创建Book实体类

package chenzihao.demo01.pojo;

public class Book {

	private Integer id;
	private String name;
	private String press;
	private String author;
	@Override
	public String toString() {
		return "Book [id=" + id + ", name=" + name + ", press=" + press + ", author=" + author + "]";
	}
//添加实体类中属性的getter和setter方法或者使用lombok自动生成

}

        在chenzihao.demo01.dao包下创建BookMapper接口

package chenzihao.demo01.dao;

import org.apache.ibatis.annotations.Select;
import chenzihao.demo01.pojo.Book;

public interface BookMapper {
	@Select("select * from tb_book where id=#{id}")
	public Book findBookById(Integer id);
}

        在chenzihao.demo01.service包下创建BookService接口和其实现类

BookService接口提供了一个方法——根据书籍id查询书籍的信息

package chenzihao.demo01.service;

import chenzihao.demo01.pojo.Book;

public interface BookService {
	public Book findBookById(Integer id);
}

下面是BookService接口的实现类,其中使用了依赖注入的方式创建了BookMapper对象,并调用了查询方法

package chenzihao.demo01.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import chenzihao.demo01.dao.BookMapper;
import chenzihao.demo01.pojo.Book;

@Service("bookService")
public class BookServiceImpl implements BookService {
	
	@Resource(name="bookMapper")
	private BookMapper bookMapper;
	
	public Book findBookById(Integer id) {
		// TODO Auto-generated method stub
		return bookMapper.findBookById(id);
	}

}

        在chenzihao.demo01.controller包下创建BookController类

package chenzihao.demo01.controller;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import chenzihao.demo01.pojo.Book;
import chenzihao.demo01.service.BookService;

@Controller
public class BookController {

	@Resource(name="bookService")
	private BookService bookService;
	
	@RequestMapping("/book")
	public ModelAndView findbook(Integer id) {
		Book book = bookService.findBookById(id);
		
		ModelAndView mav=new ModelAndView();
		
		mav.setViewName("book.jsp");
		
		mav.addObject("book",book);
		
		return mav;
	}
}

        请在webapp下提供book.jsp页面

在book.jsp页面中可以清楚的展示在数据库中拿到的内容

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
	<table border="1" width="600px" cellspacing="0" align="center" >
		<tr align="center">
			<th>图书id</th>
			<th>图书名称</th>
			<th>出版社</th>
			<th>作者</th>
		</tr>
		<tr align="center">
			<td>${book.id}</td>
			<td>${book.name}</td>
			<td>${book.press}</td>
			<td>${book.author}</td>
		</tr>
	</table>
</body>
</html>

第四步:使用注解代替xml文件配置

        在chenzihao.demo01.config包下创建SpringConfig、SpringMvcConfig、MybatisConfig、ServletContainerInitConfig四个配置类

        首先是SpringMvcConfig,它对应着Controller层,其中@Configuration代表着这个类是配置类;@ComponentScan表示扫描包;@EnableWebMvc表示开启注解驱动

package chenzihao.demo01.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan("chenzihao.demo01.controller")
@EnableWebMvc
public class SpringMvcConfig {

}

        其次是SpringConfig,它对应着Service层,@import表示引入其他类

package chenzihao.demo01.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@ComponentScan("chenzihao.demo01.service")
@Import({MybatisConfig.class})
public class SpringConfig {

}

        接下来是MyBatis类,它对应在Dao层,和数据库打交道,必不可少的便是数据源的配置;

@MapperScan表示扫描mapper对象交给spring管理

package chenzihao.demo01.config;

import javax.sql.DataSource;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;

import com.alibaba.druid.pool.DruidDataSource;

@PropertySource("classpath:db.properties")
@MapperScan("chenzihao.demo01.dao")
public class MybatisConfig {
	
	@Value("${mysql.url}")
	private String url;
	@Value("${mysql.username}")
	private String username;
	@Value("${mysql.password}")
	private String password;
	@Value("${mysql.driver}")
	private String driver;
	
	@Bean
	public DataSource dataSource() {
		DruidDataSource dataSource=new DruidDataSource();
		
		dataSource.setUrl(url);
		dataSource.setUsername(username);
		dataSource.setPassword(password);
		dataSource.setDriverClassName(driver);
		
		return dataSource;
	}
	
	@Bean
	public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) {
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		
		sqlSessionFactory.setDataSource(dataSource);
		sqlSessionFactory.setTypeAliasesPackage("chenzihao.demo01.pojo");
		
		return sqlSessionFactory;
	}
	
	/*
	 * @Bean public MapperScannerConfigurer mapperScannerConfigurer() {
	 * MapperScannerConfigurer mapperScannerConfigurer=new
	 * MapperScannerConfigurer();
	 * mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactoryBean")
	 * ; mapperScannerConfigurer.setBasePackage("chenzihao.demo01.dao");
	 * 
	 * return mapperScannerConfigurer; }
	 */
}

不要忘记添加db.properties数据库的一些信息

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&\characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=1234

最后便是ServletContainerInitConfig类,去分别找到springConfig和SpringMvcConfig类

package chenzihao.demo01.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer{

	@Override
	protected Class<?>[] getRootConfigClasses() {
		// TODO Auto-generated method stub
		return new Class[] {SpringConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		// TODO Auto-generated method stub
		return new Class[] {SpringMvcConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		// TODO Auto-generated method stub
		return new String[] {"/"};
	}

}

第五步:实验结果和项目结构

        项目结构

实验结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值