SSMフレームワーク--ソースサーバがターゲットリソースの表示を見つけられなかったか、既存のリソースの表示を公開したくない.


ここで私の例の論理の始まりは簡単なjspファイルですfromラベルリンクはsearchファイルで、method属性はpostコードは以下の通りです.
<body>
	<form action="search" method="post"><input name="name"/>   <input name="sno"/>   :<input nmae="gender"/>
		<input type="submit" value="  "/>
	</form>
</body>

その後、ウェブページのプロファイルwebに従って.xmlでsearchファイルをクエリーして検索ボタンをクリックすると、データがファイルに渡され、servletのpostメソッドが呼び出されます.
 <!--servletContext   -->
  <listener>
  	<listener-class>jee.pk3.AppListener</listener-class>
  </listener>
  
  <servlet>
  	<servlet-name>SearchServlet</servlet-name>
  	<display-name>SearchServlet</display-name>
  	<servlet-class>jee.pk3.SearchServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>SearchServlet</servlet-name>
  	<url-pattern>/SearchServlet</url-pattern>
  </servlet-mapping>

上記のコードにはservleContextLIstenerリスナーがあり、このリスナーの主な機能はservletcontextコンテナ呼び出し時にSqlSessionFactoryUtilを呼び出すことである.init();つまり、searchファイルのservletcontextコンテナが呼び出されると、ListenerはSqlSessionFactoryUtilを呼び出す.init();
public class AppListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
	   
		try {
			SqlSessionFactoryUtil.init();
		} catch (IOException e) {
			
			e.printStackTrace();
		}
	}

}

次にservletファイルのコードを見てみましょう.上のjspファイルのコードとwebに連絡します.xmlコードから、searchはsearchServeretファイルを指し、jspファイルの転送値もservletファイルのdopostメソッドのreqパラメータに転送されることがわかります.そしてreqを借りるとjspファイルの値を呼び出すことができます.次はmybatisのコードです.まず、先ほどのリスナーに関するインスタンス化SqlSessionFactoryです.servletファイルを呼び出すとservletcontextコンテナが呼び出され、リスナーのcontextInitializedメソッドが呼び出され、SqlSessionFactoryUtilが呼び出されます.init();
public class SearchServlet extends HttpServlet {
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("UTF-8");
		String name=req.getParameter("name");
		String sno=req.getParameter("sno");
		String gender=req.getParameter("gender");
	    Student stu=new Student();
	    stu.setName(name);
	    stu.setSno(sno);
	    stu.setGender(gender);

		SqlSessionFactory sqlSessionFactory=SqlSessionFactoryUtil.getInsertance();
		try (SqlSession sqlSession=sqlSessionFactory.openSession(true)){
			StudentMapper studentMapper=sqlSession.getMapper(StudentMapper.class);
			List<Student> list=studentMapper.search(stu);
			System.out.println(list);
		} 
	}

}

次にmybatisクエリー・データベースのsqlSessionFactoryのインスタンス化、すなわちservletファイルが呼び出されたときにそのインスタンス化が完了します.このように書く目的は、sqlSessionFactoryの単例を保証し、sqlSessionFactoryの複数回のインスタンス化による資源の浪費を避けることである.
public class SqlSessionFactoryUtil {

	public static SqlSessionFactory sqlSessionFactory;
	public static void init() throws IOException {
		String config="mybatis_config.xml";
		InputStream is=Resources.getResourceAsStream(config);
		sqlSessionFactory =new SqlSessionFactoryBuilder().build(is);
	}
	
	public static SqlSessionFactory getInsertance() {
		return sqlSessionFactory;
	}
	
}

データベースのリンクが終わりました.次に、検索文の構成について説明します.まず、検索方法のインタフェースが必要です.インタフェースコードは次のとおりです.
public interface StudentMapper {
	public List<Student> search(Student stu);
}

次はsqlが検索したプロファイルで、まずmapperラベルを使用してマッピングのインタフェースを決定します.次にresultMapラベルを使用して、エンティティクラスに基づいてデータベース内のフィールドをエンティティに対応するプロパティにマッピングします.最後にselectタグを呼び出してインタフェース内のメソッドをid,parameterTypeプロパティ設定パラメータメソッドのパラメータ,resultMapプロパティ設定はマッピング関係とする.select内部はsql文です.
<?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="jee.pk3.StudentMapper">
<resultMap type="jee.pk3.Student" id="studentResultMap">
	<id property="id" column="S_id" ></id>
	<result property="name" column="s_name"/>
	<result property="sno" column="s_no"/>
	<result property="gender" column="s_gender"/>
	
</resultMap>
<select id="search" parameterType="jee.pk3.Student" resultMap="studentResultMap">
	select * from t_students where s_name=#{name}
</select>
</mapper>

はい、私の共有はこれで終わります.もしあなたのすべての論理がこのエラーに順守できれば現れません.だから、自分のコードに各伝達階層の断層が現れているかどうかをよくチェックしてください.