MyBatisの:
今朝、私は1つ、多くの一から一を含むクエリを、参加するマルチテーブルでMyBatisのに語りました。
:二つのテーブルが含ま
顧客テーブル:
Ordersテーブルを:
私たちはテーブルから見ることができ、受注テーブルは、外部キーを持っている:CUSTOMER_IDは、この外部キーは、顧客テーブルの主キーです。
1内部の初見は、ID Ordersテーブルに属し順序に従って順番や顧客情報に関するすべての情報を見つける、クエリを結合します。顧客への記録順序相当し、これは、関連するテーブルのクエリの一つです。
SQL文:
select c.id cid,c.name,c.age,o.id oid,o.orderNumber,o.orderPrice
from orders o inner join customer c on o.customer_id = c.id
where o.id = 1
顧客と注文テーブルの主キー名はIDと呼ばれるので、あなたが書いた場合、クエリの時間select c.*,o.* from orders
には、あなたは私たちが自分のエリアを区別するためにエイリアスを果たしたように、どのテーブルに対応し、どのようなIDを知りません。
エンティティクラス対応、受注クラスは、顧客の顧客のtype属性を持っている必要があります。
マッピングファイルを対応するOrdersMapper.xmlは以下のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper标签里一定要写namespace-->
<mapper namespace="com.sxau.mybatis.mapper.OrdersMapper">
<resultMap id="ordersMap" type="orders">
<id property="id" column="oid"></id>
<result property="orderNumber" column="orderNumber"></result>
<result property="orderPrice" column="orderPrice"></result>
<!--javaType里存放的是类名而不是对象名-->
<association property="customer" javaType="Customer">
<id property="id" column="cid"></id>
<result property="name" column="name"></result>
<result property="age" column="age"></result>
</association>
</resultMap>
<select id="getById" resultMap="ordersMap">
select c.id cid,c.name,c.age,o.id oid,o.orderNumber,o.orderPrice
from orders o inner join customer c on o.customer_id = c.id
where o.id = #{id}
</select>
</mapper>
次対多の接続で見てみましょう。今需要がある:クエリ、顧客のIDに基づいて、この顧客情報に関連付けられたすべての注文。顧客が複数の注文が対応しなければならないので、これは多くの関連テーブルクエリに1です。
SQL文:
select c.id cid,c.name,c.age,o.id oid,o.orderNumber,o.orderPrice
from customer c left join orders o on c.id = o.customer_id
where c.id = 1
ここでは、内部での接続が参加した場合、顧客がどのような順序情報を生成しないとき、私たちは知りませんでした、我々は、顧客のID、クエリ、顧客への情報と注文情報に基づいてしたいことついでに、顧客の名前を確認します顧客が注文の世代にはないという理由だけで、顧客のIDの結果で、あなたは明らかに我々の意図に反している顧客を、見つけることができない、我々は、顧客が注文に関連付けられていないとき、顧客のIDに従って見つけることができることを願っています顧客の注文情報が、彼のリストは空です。そこで、我々は左に内部結合とスイッチの使用が参加放棄します。左外部結合することを意味する参加左情報のすべての関連する列は、クエリに関連付けられたテーブルを行い、それが常に左テーブル(またはプライマリ・テーブル)を保持する外部と左連結されています。顧客がこの顧客情報をチェックアウトする世代を注文していないため、結果として、そうではありません。
エンティティクラスを対応して、お客様は、クラスの型が持っている必要があります持っているList<Orders>
顧客の注文オブジェクトを格納するために使用されるordersListの属性を、。
マッピングファイルを対応するOrdersMapper.xmlは以下のとおりです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--mapper标签里一定要写namespace-->
<!--左外连接,left join 左表里的内容会完全显示-->
<!--记住一个口诀,resultMap的type值永远是这个mapper的namespace下的东西-->
<!--在一方关联多方时要注意的点,1,left左外连接 2,两个表的id名字冲突时必须起别名区分开-->
<mapper namespace="com.sxau.mybatis.mapper.CustomerMapper">
<resultMap id="customerMap" type="customer">
<id property="id" column="cid"></id>
<result property="name" column="name"></result>
<result property="age" column="age"></result>
<!--对应多方的集合的绑定,使用collection标签-->
<collection property="ordersList" ofType="Orders">
<id property="id" column="oid"></id>
<result property="orderNumber" column="orderNumber"></result>
<result property="orderPrice" column="orderPrice"></result>
</collection>
</resultMap>
<select id="getById" resultMap="customerMap">
select c.id cid,c.name,c.age,o.id oid,o.orderNumber,o.orderPrice
from customer c left join orders o on c.id = o.customer_id
where c.id = #{id}
</select>
</mapper>
Spring MVCの:
午後には、教師は、基本的なプロセスフレームワークとSpringMVCが構築手順について話しました。
基本的な流れSpringMVCの実行:
- サーバへのHTTP要求を送信し、要求はフロントコントローラのDispatcherServlet捕捉されます。
- DispatcherServletの構成に応じてURL要求を解析することは要求されたリソース識別子(URI)を取得-servlet.xml。これによれば、次にURI、(オブジェクトおよびハンドラオブジェクトハンドラ対応インターセプターを含む)オブジェクトのすべての関連するコールHandlerMappingハンドラ構成へのアクセス、および最終的にHandlerExecutionChainオブジェクトとして返されます。
- 得られたのDispatcherServletハンドラは適切なHandlerAdapterを選択します。
- モデルデータの要求抽出基準ハンドラに充填され、ハンドラ(コントローラ)を開始しました。:充填ハンドラの中のパラメータでは、あなたの設定に応じて、春には、余分な作業を行うのに役立ちます、で
指定された応答情報にオブジェクトを変換し、オブジェクトに要求メッセージ(例えば、JSON、XMLなどのデータ):HttpMessageConveterを。
データ変換:データ要求メッセージの変換。文字列は、同様の整数、ダブルに変換されます。
データ形式:要求メッセージのデータ形式。デジタル形式、または日付に文字列をフォーマットされます。
データ検証:データの検証(長さ、形式など)、検証結果BindingResultまたはエラーを格納します。 - ハンドラ(コントローラ)の実行が完了した後、オブジェクトはのModelAndViewのDispatcherServletに戻ります
- 適切なViewResolverを選択戻りのModelAndView(春コンテナViewResolverに登録されなければならない)のDispatcherServletに戻ります。
- モデルとビューの組み合わせViewResolver、ビューをレンダリングします。
- ビューは、クライアントに結果をレンダリングするための責任があります
SpringMVCを構築するためのエントリーレベルのフレームワーク:
インポートのjarパッケージ:
書き込みの設定ファイルweb.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--字符编码过滤器,防止中文乱码,这个过滤器必须放在所有内容的开始,否则不起作用-->
<filter>
<filter-name>Set Character Encoding</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--springmvc框架使用的是servlet进行注册-->
<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:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</web-app>
コンフィギュレーション・ファイルspringmvc.xmlを書きます:
<!--注册srpingmvc框架-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-4.0.xsd">
<!--指定注解扫描的根包-->
<context:component-scan base-package="com.oracle.demo.controller"></context:component-scan>
<!--视图解析器-->
<bean id = "ResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix" value = "/"></property>
<property name = "suffix" value=".jsp"></property>
</bean>
</beans>
次は、SpringMVCがデータを提出した4つの方法(共通)を付属しています。
- 最初:カジュアル言及(分散提出)
このようにデータを提出する場合は、多くのではなく、名前をデータバインディングが一致していなければならないとき、一般的です。
<%--${pageContext.request.contextPath}表示绝对路径的方式--%>
<form action="${pageContext.request.contextPath}/admin/one.action" method="post">
<p>姓名:<input name = "stuname"></p>
<p>密码:<input type="password" name = "stupwd"></p>
<p>年龄:<input type = "text" name="stuage"></p>
<p><input type="submit" value="提交"><input type="reset" value = "重置"></p>
</form>
@RequestMapping("/one")
public String one(String stuname,String stupwd,Integer stuage){
System.out.println(stuname+"-----"+stupwd+"---------"+(stuage+100));
return "main";
}
- 第二:オブジェクトのパッケージ
このアプローチの利点は、冗長コードを減らし、エラーを起こしやすいが、唯一の良いJavaクラス対応するエンティティを作成するために、事前に得られないことです。
<form action="${pageContext.request.contextPath}/admin/two.action" method="post">
<p>姓名:<input name = "stuname"></p>
<p>密码:<input type="password" name = "stupwd"></p>
<p>年龄:<input type = "text" name="stuage"></p>
<p><input type="submit" value="提交"><input type="reset" value = "重置"></p>
</form>
@RequestMapping("/two")
public String two(Student stu){
System.out.println(stu.getStuname()+"-----"+stu.getStupwd()+"---------"+(stu.getStuage()+100));
return "main";
}
- ノート@RequestParam方法:第三のは
、このアプローチの別名利点を定義することができ、データがバインドするときことです。
<a href="${pageContext.request.contextPath}
/admin/three.action?name=王丽&age=12">第三种数据提交方式</a>
@RequestMapping("/three")
public String three(@RequestParam("name") String stuname,@RequestParam("age") int stuage){
System.out.println(stuname+"-----------"+(stuage+100));
return "main";
}
- 第四は:HttpServletRequestを使用して
これは最も原始的な方法を、その欠点は、あなたはまた、他の方法は、様々な機能を実行する呼び出すことができ、効果がデータを取ることができたHttpServletRequestに限定されるものではなく、私たちは手動で変換が完了している入力する必要があり、そのデータの抽出です。
<form action="${pageContext.request.contextPath}/admin/four.action" method="post">
<p>姓名:<input name = "stuname"></p>
<p>密码:<input type="password" name = "stupwd"></p>
<p>年龄:<input type = "text" name="stuage"></p>
<p><input type="submit" value="提交"><input type="reset" value = "重置"></p>
</form>
@RequestMapping("/four")
public String four(HttpServletRequest request){
String name = request.getParameter("stuname");
String pwd = request.getParameter("stupwd");
int age =Integer.parseInt(request.getParameter("stuage"));
System.out.println(name+"-----"+pwd+"---------"+(age+100));
return "main";
}