1.プロジェクトを作成します
Mavenプロジェクトを作成し、[単純なプロジェクトを作成する]をオンにします。グループIDはcn.tedu.spring、アーティファクトIDはSpringMVC-02、パッケージングは戦争を選択します。
プロジェクトが作成されたら、最初にweb.xmlファイルを生成します。プロジェクトを右クリックしてプロパティを設定し、ターゲットランタイムでTomcatを確認し、pom.xmlにspring-webmvc依存関係を追加します(バージョン4.2以降のhttps://を使用することをお勧めします)。 blog.csdn.net/qq_37669050/article/details/102384613);前のプロジェクトのSpring構成ファイルを現在の新しいプロジェクト(https://blog.csdn.net/qq_37669050/article/details/102594279)にコピーします。
2.DispatcherServletを構成します
まず、web.xmlでDispatcherServletを設定する必要があります。基本的な設定は次のとおりです。
<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>
SpringMVCフレームワークはSpringに基づいており、将来的にSpringの構成ファイル(spring-mvc.xml)で構成されます。プロジェクトの開始時にSpring構成ファイルがロードされることが望まれます。はい:上記の構成で、DispatcherServletの初期化パラメーターcontextConfigLocationを構成します。このパラメーターの値は、Spring構成ファイルの場所です。このパラメーターが構成されると、DispatcherServletが初期化されると、Spring構成ファイルが自動的にロードされます。次に、DispatcherServletをデフォルトで開始するように構成します。つまり、Tomcatが起動すると、DispatcherServletが初期化され、spring-mvc.xmlが読み取られてロードされます。
補足構成は次のとおりです。
<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>
注:上記の構成とノードの順序は区別されます!
上記の構成が成功したかどうかをテストする必要がある場合は、最初にspring-mvc.xmlでコンポーネントスキャンを構成できます。
<!-- 组件扫描 -->
<context:component-scan base-package="cn.tedu.spring"/>
次に、スキャンしたパッケージの下にクラスを作成し、そのクラスにコンポーネントアノテーションを追加し、構築メソッドをカスタマイズして、次のように文字列を出力します。
package cn.tedu.spring;
import org.springframework.stereotype.Component;
@Component
public class User {
public User() {
System.out.println("创建了User类的对象!");
}
}
最後に、プロジェクトを開始すると、Eclipseコンソールの構築メソッドで出力を確認できるはずです。
3.コントローラーを介してユーザーから送信された要求を受信します
@RequestMappingアノテーションを使用すると、リクエストパスとリクエストの処理方法の間のマッピング関係を設定できるため、実際のプログラミングでは、HandlerMappingを明示的に使用する必要はありません。
したがって、cn.tedu.spring.HelloControllerコントローラークラスを直接作成し、@ Controllerアノテーションをクラスに追加して、Springフレームワークがコントローラークラスのオブジェクトを作成し、最後に、SpringMVCフレームワークによって認識および使用されるようにすることができます。
次に、メソッドの設計について、コントローラークラスで要求を処理するメソッドを追加します。
- パブリックパーミッションを使用する必要があります。
- 一時的に文字列を戻り値のタイプとして使用します。
- メソッド名はカスタマイズできます。
- メソッドのパラメータリストは一時的に空です。
メソッドを追加できます。
public String showHello() {
return null;
}
マッピング関係を構成するメソッドの前に@RequestMappingを使用する必要があります。その後、次のようにします。
@RequestMapping("hello.do")
public String showHello() {
System.out.println("HelloController.showHello()");
return null;
}
注:コンポーネントスキャンは以前にこのパッケージで設定されていたため、上記のコントローラークラスはcn.tedu.springパッケージに配置する必要があります。一般に、コントロールクラスは名前のサフィックスとしてコントローラーという単語を使用する必要があります。コントローラクラスは@Controllerアノテーションのみを使用でき、@ Componentやその他のアノテーションは使用できません。
完了後、プロジェクトを再起動し、ブラウザを開いて、http:// localhost:8080 / SpringMVC-02 / hello.doでテストします。正しい結果は次のようになります。Eclipseコンソールで、上記のメソッドの出力を確認できます。 !ページが処理されていない場合、404エラーが発生する可能性があります。
4.ページを表示
デフォルトでは、コントローラーのメソッドが文字列タイプのデータを返す場合、それは「ビュー名」を意味し、フレームワークは、ビュー名に基づいて最終応答の表示を担当するビューコンポーネントを決定する必要があります。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>
次に、コントローラーで要求を処理するメソッドの戻り値を「hello」に変更します。
最後に、webapp / WEB-INF / templates /フォルダーの下にhello.htmlを作成し、HTMLでページコンテンツを自分で設計します。http:// localhost:8080 / SpringMVC-02 /hello.doでテストします。
Mavenプロジェクトを作成するには、グループIDにcn.tedu.mybatis、アーティファクトIDにMyBatis、Packaingにwarを使用します(jarを選択することもできます)。
MyBatis
プロジェクトの作成後、次のことを行う必要があります。web.xmlファイルを生成する、pom.xmlに依存関係を追加する、前のプロジェクトから現在のプロジェクトにspring-mvc.xmlをコピーする、Tomcatオペレーティング環境を追加する(この場合は不要な場合があります)、前のプロジェクトを開くプロジェクトのweb.xmlで、DispatcherServletとCharacterEncodingFilterの構成を現在のプロジェクトにコピーします。
今回は、依存関係を追加する必要があります。
<!-- 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>
次に、spring-mvc.xmlをコピーしてspring-dao.xmlを取得し、spring-dao.xmlファイルの構成を削除します。
- データベース接続
src / main / resourcesの下にdb.propertiesファイルを作成して、データベース接続に関する関連情報を構成します。
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
ドライバー属性を構成するときは、使用するmysql-connector-javaのバージョンに注意する必要があります。バージョン5.xを使用している場合、6.x以降を使用している場合、属性値はcom.mysql.jdbc.Driverである必要があります。バージョン、属性値はcom.mysql.cj.jdbc.Driverである必要があります。使用する値がわからない場合は、mysql-connector-javaのjarファイルを展開して確認できます。さらに、jarパッケージにはMETA-INF / services / java.sql.Driverファイルがあり、jarパッケージを使用するときに使用する必要があるDriverクラスが記録されています。
バージョン6.x以降のmysql-connector-javaを使用している場合は、データベースに接続するようにURLを構成するときに、serverTimezoneパラメーターの値を明示的に設定する必要があります。中国本土で利用可能な値は、アジア/上海とアジア/チョンチンです。
spring-dao.xmlに構成を追加する必要があります。上記のdb.propertiesの構成情報をお読みください。
<util:properties id="config" location="classpath:db.properties" />
次に、データベースに接続するときに使用されるデータソースはBasicDataSourceになります。上記で読み取ったデータベース接続情報を、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>
次に、テストクラスでユニットテストを記述して実行し、構成が正しいかどうかを確認できます。
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);
}
}
- インターフェースと抽象的な方法
暫定目標:MyBatisを使用して、新しいユーザーデータをデータテーブルに挿入します。
MyBatisを使用する場合は、各関数に対応する抽象メソッドを定義する必要があり、これらの抽象メソッドはインターフェイスで定義する必要があります。
まず、cn.tedu.mybatis.UserMapperインターフェイスファイルを作成してから、インターフェイスに「ユーザーデータを挿入する」という抽象メソッドを定義する必要があります。抽象メソッドの設計原則:
- タイプの追加、削除、または変更の操作を実行する必要がある場合は、メソッドの戻り値としてIntegerを使用します。これは、操作の成功を判断するために使用できる「影響を受ける行の数」を示します。または、intとして設計することも、設計することもできます。無効とは、影響を受ける行の数を気にしないことを意味します。
- メソッド名はカスタマイズでき、オーバーロードすることはできません。
- パラメータリストは、必要なパラメータに応じて決定されます。以前にJDBCを学習するときに、SQLの疑問符を参照して、どのパラメータを書き込むことができます。
「ユーザーデータの挿入」のために実行する必要のあるSQLステートメントは大まかに次のとおりです。
insert into (username, password, age, phone, email) values (?,?,?,?,?)
抽象メソッドは5つのパラメーターを書き込む必要があります。後でデータテーブルにフィールドを追加する場合は、さらにパラメーターを書き込む必要があります。このアプローチには欠陥があります。これらのパラメーターは、cn.tedu.mybatis.Userクラスにカプセル化する必要があります。に:
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String phone;
private String email;
}
抽象メソッドは次のように設計できます。
Integer insert(User user);
次に、「インターフェイスファイルはどこにありますか」を構成して、MyBatisフレームワークが機能するときにインターフェイスが見つかるようにする必要があります。
<!-- 配置MapperScannerConfigurer -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 配置接口文件在哪里 -->
<property name="basePackage"
value="cn.tedu.mybatis" />
</bean>
- SQLマッピングを構成する
http://doc.tedu.cn/config/mybatis-mapper.zipから構成ファイルを書き込むためのXMLファイル圧縮パッケージをダウンロードします。
src / main / resourcesの下にmappersという名前のフォルダーを作成し、圧縮パッケージ内のSomeMapper.xmlをこのフォルダーにコピーします。
注:MyBatisでSQLステートメントを構成するために使用されるXMLファイルには、次のステートメントが含まれている必要があります。含まれていないと、正しく機能しません。
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
XMLファイルを構成するときは、最初にルートノードを追加する必要があり、namespace属性を構成する必要があります。属性値は、どのインターフェイスファイルが対応するかを示します。
<!-- namespace:对应哪个接口 -->
<mapper namespace="cn.tedu.mybatis.UserMapper">
</mapper>
次に、実行する必要のあるSQLステートメントのタイプに応じて、、、、、およびから子ノードを選択します。ノードのid属性は、抽象メソッドの名前です。次に、実行する必要のあるSQLステートメントをノードのコンテンツに記述します。パラメーター部分で#{}を使用します。プレースホルダーの形式。プレースホルダー内の名前は、メソッドパラメーターのユーザークラスの属性名です。
<!-- id:抽象方法的名称 -->
<insert id="insert">
INSERT INTO t_user (
username, password,
age, phone,
email
) VALUES (
#{username}, #{password},
#{age}, #{phone},
#{email}
)
</insert>
次に、フレームワークの実行時に「XMLファイルはどこにありますか」と「データベースへの接続に使用されるデータソースはどれか」を構成する必要があります。したがって、spring-dao.xmlに構成を追加する必要があります。
<!-- 配置SqlSessionFactoryBean -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置XML文件在哪里 -->
<property name="mapperLocations"
value="classpath:mappers/*.xml" />
<!-- 配置使用哪个数据源连接数据库 -->
<property name="dataSource"
ref="dataSource" />
</bean>
最後に、ユニットテストを作成して実行します。
@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);
}