Todo o processo de construção da estrutura SSM

1. Crie um projeto

Crie um projeto Maven, marque Criar um projeto simples, a id do grupo é cn.tedu.spring, a id do artefato é SpringMVC-02, a seleção de pacotes war.

Quando o projeto for criado, primeiro gere o arquivo web.xml; clique com o botão direito do mouse no projeto para definir as propriedades, verifique o Tomcat em tempos de execução direcionados; adicione a dependência spring-webmvc em pom.xml (recomendado usar a versão 4.2 ou superior https: // blog.csdn.net/qq_37669050/article/details/102384613); Copie o arquivo de configuração do Spring do projeto anterior para o novo projeto atual (https://blog.csdn.net/qq_37669050/article/details/102594279).

2. Configure o DispatcherServlet

Em primeiro lugar, você precisa configurar o DispatcherServlet em web.xml. A configuração básica é a seguinte:

    <servlet-mapping>
    	<servlet-name>SpringMVC</servlet-name>
    	<url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <servlet>
  	<servlet-name>SpringMVC</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<init-param><!-- param:参数 -->
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-ajax.xml</param-value>
  	</init-param>
  	<load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SpringMVC</servlet-name>
  	<url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <!-- 解决SpringMVC中文乱码问题的过滤器 -->
  <filter>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </filter>
  <filter-mapping>
  	<filter-name>CharacterEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

O framework SpringMVC é baseado no Spring e será configurado no arquivo de configuração do Spring (spring-mvc.xml) no futuro. Espera-se que o arquivo de configuração do Spring seja carregado quando o projeto iniciar. Sim: Na configuração acima, configure o parâmetro de inicialização contextConfigLocation para DispatcherServlet. O valor deste parâmetro é a localização do arquivo de configuração Spring. Uma vez que este parâmetro seja configurado, quando o DispatcherServlet for inicializado, o arquivo de configuração Spring será carregado automaticamente! Em seguida, configure o DispatcherServlet para iniciar por padrão, ou seja, quando o Tomcat iniciar, ele inicializará o DispatcherServlet, o que fará com que o spring-mvc.xml seja lido e carregado.

A configuração suplementar é:

<servlet>
	<servlet-name>SpringMVC</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-mvc.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
	<servlet-name>SpringMVC</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>

Nota: A ordem da configuração e dos nós acima é diferenciada!

Se você precisar testar se a configuração acima foi bem-sucedida, você pode primeiro configurar a verificação de componente em spring-mvc.xml:

<!-- 组件扫描 -->
<context:component-scan base-package="cn.tedu.spring"/>

Em seguida, crie qualquer classe no pacote escaneado, adicione anotações de Compontent à classe, personalize o método de construção e produza uma string, por exemplo:

package cn.tedu.spring;

import org.springframework.stereotype.Component;

@Component
public class User {
	
	public User() {
		System.out.println("创建了User类的对象!");
	}

}

Finalmente, inicie o projeto e você deverá ser capaz de ver a saída no método de construção no console do Eclipse!

3. Receber solicitações enviadas por usuários por meio do controlador

Por meio da anotação @RequestMapping, você pode definir o relacionamento de mapeamento entre o caminho da solicitação e o método de processamento da solicitação, portanto, na programação real, não há necessidade de usar explicitamente o HandlerMapping.

Portanto, você pode criar diretamente a classe do controlador cn.tedu.spring.HelloController e adicionar a anotação @Controller à classe, para que a estrutura do Spring crie o objeto da classe do controlador e, finalmente, ele seja reconhecido e usado pela estrutura do SpringMVC.

Em seguida, adicione um método para processar a solicitação na classe do controlador, sobre o design do método:

  1. Deve usar permissões públicas;
  2. Use temporariamente String como o tipo de valor de retorno;
  3. O nome do método pode ser personalizado;
  4. A lista de parâmetros do método está temporariamente vazia.

Você pode adicionar métodos:

public String showHello() {
	return null;
}

É necessário usar @RequestMapping antes do método para configurar a relação de mapeamento, então:

@RequestMapping("hello.do")
public String showHello() {
	System.out.println("HelloController.showHello()");
	return null;
}

Nota: As classes de controlador acima devem ser colocadas no pacote cn.tedu.spring, porque este pacote é a varredura de componente que foi definida anteriormente! Geralmente, a classe de controle deve usar a palavra Controller como sufixo do nome. A classe do controlador só pode usar a anotação @Controller, não @Component ou outras anotações.

Após a conclusão, reinicie o projeto, abra o navegador e teste através de http: // localhost: 8080 / SpringMVC-02 / hello.do. O resultado correto deve ser: No console do Eclipse, você pode ver a saída do método acima ! Se a página não foi processada, um erro 404 pode ocorrer.

4. Exibir página

Por padrão, se o método no controlador retorna dados do tipo String, isso significa "nome da visão" e a estrutura precisa determinar qual componente da visão é responsável pela exibição da resposta final com base no nome da visão. Você precisa configurar em spring-mvc.xml:

<!-- 模版解析器:ServletContextTemplateResolver -->
<!-- 配置ServletContextTemplateResolver时,HTML文件应该以webapp文件夹为参考 -->
<!-- 配置ClassLoaderTemplateResolver时,HTML文件应该以项目的resources文件夹为参考 -->
<bean id="templateResolver"
	class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
	<property name="prefix" 
		value="/WEB-INF/templates/" />
	<property name="suffix" 
		value=".html" />
	<property name="characterEncoding" 
		value="utf-8" />
	<property name="templateMode" 
		value="HTML" />
	<property name="cacheable" 
		value="false" />
</bean>

<!-- Spring模版引擎:SpringTemplateEngine -->
<bean id="templateEngine"
	class="org.thymeleaf.spring4.SpringTemplateEngine">
	<property name="templateResolver"
		ref="templateResolver" />
</bean>

<!-- 视图解析器:ThymeleafViewResolver -->
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
	<property name="templateEngine"
		ref="templateEngine" />
</bean>

Em seguida, altere o valor de retorno do método que trata a solicitação no controlador para "hello".

Por fim, crie hello.html na pasta webapp / WEB-INF / templates / e projete você mesmo o conteúdo da página em HTML. Teste por meio de http: // localhost: 8080 / SpringMVC-02 / hello.do.
Para criar um projeto Maven, use cn.tedu.mybatis para ID de grupo, MyBatis para ID de artefato e war para Packaing (você também pode escolher jar).

MyBatis

Após a criação do projeto, você precisa: gerar um arquivo web.xml; adicionar dependências em pom.xml; copiar spring-mvc.xml do projeto anterior para o projeto atual; adicionar o ambiente operacional Tomcat (neste caso pode não ser necessário); abrir o anterior No web.xml do projeto, copie a configuração de DispatcherServlet e CharacterEncodingFilter para o projeto atual.

Desta vez, você precisa adicionar dependências:

<!-- MyBatis -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis</artifactId>
	<version>3.5.1</version>
</dependency>

<!-- MyBatis整合Spring -->
<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>2.0.1</version>
</dependency>

<!-- SpringJDBC -->
<!-- 注意:与当前项目使用的其它spring依赖保持相同的版本号 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-jdbc</artifactId>
	<version>4.3.10.RELEASE</version>
</dependency>

<!-- mysql连接 -->
<!-- 可选版本号:8.0.12~8.0.16,5.1.4~5.1.6 -->
<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.16</version>
</dependency>

<!-- 数据库连接池 -->
<dependency>
	<groupId>commons-dbcp</groupId>
	<artifactId>commons-dbcp</artifactId>
	<version>1.4</version>
</dependency>

<!-- 单元测试 -->
<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

Em seguida, copie spring-mvc.xml para obter spring-dao.xml, exclua a configuração no arquivo spring-dao.xml!

  1. Conectividade de banco de dados

Crie um arquivo db.properties em src / main / resources para configurar informações relacionadas sobre a conexão do banco de dados:

url=jdbc:mysql://localhost:3306/tedu_ums?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
driver=com.mysql.cj.jdbc.Driver
username=root
password=root
initialSize=2
maxActive=10

Ao configurar o atributo do driver, você precisa prestar atenção à versão do mysql-connector-java usada. Se você estiver usando a versão 5.x, o valor do atributo deve ser com.mysql.jdbc.Driver, se você estiver usando 6.x ou superior Versão, o valor do atributo deve ser com.mysql.cj.jdbc.Driver, se você não tiver certeza de qual valor deve ser usado, você pode expandir o arquivo jar do mysql-connector-java para observar! Além disso, há um arquivo META-INF / services / java.sql.Driver no pacote jar, que registra a classe Driver que deve ser usada ao usar o pacote jar.

Se você estiver usando mysql-connector-java da versão 6.x ou superior, você deve definir explicitamente o valor do parâmetro serverTimezone ao configurar a URL para conectar ao banco de dados! Os valores disponíveis na China Continental são Ásia / Xangai e Ásia / Chongqing.

É necessário adicionar configuração em spring-dao.xml, leia as informações de configuração no db.properties acima:

<util:properties id="config" location="classpath:db.properties" />

Então, ao se conectar ao banco de dados, a fonte de dados usada será BasicDataSource, você precisa injetar as informações de conexão do banco de dados lidas acima nas propriedades de BasicDataSource:

<!-- 配置数据源,保证其能够连接数据库 -->
<bean id="dataSource"
	class="org.apache.commons.dbcp.BasicDataSource">
	<property name="url" value="#{config.url}" />
	<property name="driverClassName" value="#{config.driver}" />
	<property name="username" value="#{config.username}" />
	<property name="password" value="#{config.password}" />
	<property name="initialSize" value="#{config.initialSize}" />
	<property name="maxActive" value="#{config.maxActive}" />
</bean>

Em seguida, você pode escrever e executar testes de unidade na classe de teste para verificar se a configuração está correta:

public class Tests {
	
	ClassPathXmlApplicationContext ac;
	
	@Before
	public void doBefore() {
		ac = new ClassPathXmlApplicationContext(
				"spring-dao.xml");
	}
	
	@After
	public void doAfter() {
		ac.close();
	}
	
	@Test
	public void getConnection() throws SQLException {
		BasicDataSource dataSource = ac.getBean("dataSource", BasicDataSource.class);
		Connection conn = dataSource.getConnection();
		System.out.println(conn);
	}

}
  1. Interface e método abstrato

Meta provisória: Use MyBatis para inserir novos dados do usuário na tabela de dados.

Ao usar MyBatis, você precisa definir métodos abstratos correspondentes a cada função, e esses métodos abstratos devem ser definidos na interface!

Primeiro, você deve criar o arquivo de interface cn.tedu.mybatis.UserMapper e, em seguida, definir o método abstrato de "inserir dados do usuário" na interface. O princípio de design do método abstrato:

  • Se você precisar realizar uma operação de adição, exclusão ou modificação do tipo, use Integer como o valor de retorno do método, que indicará o "número de linhas afetadas", que pode ser usado para determinar o sucesso da operação, ou pode ser projetado como um int, ou pode ser projetado Vazio significa não se importar com o número de linhas afetadas;
  • O nome do método pode ser personalizado e não pode ser sobrecarregado;
  • A lista de parâmetros é determinada de acordo com os parâmetros necessários. Você pode consultar os pontos de interrogação em SQL ao aprender JDBC antes e escrever quais parâmetros.

A instrução SQL que precisa ser executada para "inserir dados do usuário" é aproximadamente:

insert into (username, password, age, phone, email) values (?,?,?,?,?)

O método abstrato precisa escrever 5 parâmetros. Se mais campos forem adicionados à tabela de dados posteriormente, mais parâmetros precisarão ser escritos. Essa abordagem é falha. Esses parâmetros devem ser encapsulados na classe cn.tedu.mybatis.User. dentro:

public class User {

	private Integer id;
	private String username;
	private String password;
	private Integer age;
	private String phone;
	private String email;

}

O método abstrato pode ser projetado como:

Integer insert(User user);

Em seguida, você precisa configurar "Onde está o arquivo de interface" para garantir que a interface possa ser encontrada quando a estrutura MyBatis funcionar:

<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<!-- 配置接口文件在哪里 -->
	<property name="basePackage"
		value="cn.tedu.mybatis" />
</bean>
  1. Configure o mapeamento SQL

Baixe o pacote de compactação de arquivo XML para gravar arquivos de configuração em http://doc.tedu.cn/config/mybatis-mapper.zip.

Crie uma pasta chamada mappers em src / main / resources e copie SomeMapper.xml do pacote compactado para esta pasta.

Nota: O arquivo XML usado para configurar instruções SQL no MyBatis deve incluir a seguinte instrução, caso contrário, não funcionará corretamente!

<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

Ao configurar o arquivo XML, primeiro você precisa adicionar um nó raiz e configurar o atributo namespace, que indica a qual arquivo de interface corresponde:

<!-- namespace:对应哪个接口 -->
<mapper namespace="cn.tedu.mybatis.UserMapper">

</mapper>

Em seguida, de acordo com o tipo de instrução SQL que precisa ser executada, selecione o nó filho de ,,, e. O atributo id do nó é o nome do método abstrato. Em seguida, escreva a instrução SQL que precisa ser executada no conteúdo do nó. Use # {} na parte do parâmetro. Marcador de posição de formato, o nome dentro do marcador de posição é o nome do atributo no parâmetro do método Classe de usuário:

<!-- id:抽象方法的名称 -->
<insert id="insert">
	INSERT INTO t_user (
		username, password, 
		age, phone, 
		email
	) VALUES (
		#{username}, #{password},
		#{age}, #{phone},
		#{email}
	)
</insert>

Em seguida, você precisa configurar "Onde está o arquivo XML" e "Qual fonte de dados é usada para se conectar ao banco de dados" quando o framework é executado! Portanto, você precisa adicionar configuração em spring-dao.xml:

<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
	<!-- 配置XML文件在哪里 -->
	<property name="mapperLocations" 
		value="classpath:mappers/*.xml" />
	<!-- 配置使用哪个数据源连接数据库 -->
	<property name="dataSource"
		ref="dataSource" />
</bean>

Finalmente, escreva e execute testes de unidade:

@Test
public void insert() {
	User user = new User();
	user.setUsername("zhaoqi");
	user.setPassword("888999");
	user.setPhone("010-88888888");
	Integer rows = userMapper.insert(user);
	System.out.println("rows=" + rows);
}

Acho que você gosta

Origin blog.csdn.net/qq_37669050/article/details/102594166
Recomendado
Clasificación