激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

2020-05-19 10:41風一樣的碼農 JAVA教程

這篇文章主要為大家詳細介紹了mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程,感興趣的小伙伴們可以參考一下

一、新建Web工程,并在lib目錄下添加jar包
 主要jar包:struts2相關包,mybatis3.3相關包,mysql-connector-java-5.1.22-bin.jar, gson-2.1.jar 

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

二、配置web.xml,添加一個過濾器StrutsPrepareAndExecuteFilter,處理所有*.action請求;

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 <display-name>MS</display-name>
 <filter>
 <filter-name>struts2</filter-name>
 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 
 <filter-mapping>
 <filter-name>struts2</filter-name>
 <url-pattern>*.action</url-pattern>
 </filter-mapping>
 
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 
</web-app>

查看該過濾器doFilter源碼,主要做以下幾件事:
 1、判斷是否設置了struts排除的url(struts.action.excludePattern,通過正則表達式匹配),如果有且當前路徑符合規則,則將請求轉發給過濾器鏈上下一個對象,不交給struts2處理 

?
1
2
3
if (excludedPatterns != null && prepare.isUrlExcluded(request, excludedPatterns)) {
 chain.doFilter(request, response);
}

2、查找ActionMapping:通過PrepareOperations的findActionMapping方法查找,如果沒找到,則將請求轉發給過濾器鏈上下一個對象,不交給struts2處理;如果找到ActionMapping,則調用ExecuteOperations的executeAction方法,開始執行Action;下圖是根據url找到ActionMapping的情況; 

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

三、配置struts.xml文件,該Demo主要演示向前端傳json格式數據,result type設成json格式,當然也可以設成其它的; 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 "http://struts.apache.org/dtds/struts-2.3.dtd">
 
<struts>
 
 <constant name="struts.devMode" value="false" />
 
 <package name="default" extends="struts-default,json-default">
 
  <global-results>
  <result type="json">
  <param name="root">json</param>
  <param name="contentType">text/html</param>
  </result>
  </global-results>
 
  <action name="addUser" class="ms.action.UserAction" method="addUser">
   <result>.</result>
  </action>
  
  <action name="queryAllUser" class="ms.action.UserAction" method="queryAllUser">
  <result>.</result>
 </action>
 
 </package>
 
 <!-- Add packages here -->
 
</struts>

四、配置Mybatis.xml和userMapper.xml,
 配置cacheEnabled為true, 開啟二級緩存;
 配置datasource相關信息: type為POOLED-連接池形式,poolMaximumActiveConnections – 在任意時間存在的活動(也就是正在使用)連接的數量,默認值:10。
 配置實體類映射mappers             //<mapper resource="ms/model/userMapper.xml"/> 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 
 
 <settings>
 <!--開啟二級緩存-->
 <setting name="cacheEnabled" value="true"/>
 </settings>
 
 
 <environments default="development">
 <environment id="development">
  <transactionManager type="JDBC" />
  <dataSource type="POOLED">
   <property name="driver" value="com.mysql.jdbc.Driver" />
   <property name="url" value="jdbc:mysql://localhost:3306/demo" />
   <property name="username" value="root" />
   <property name="password" value="admin" />
   <property name="poolMaximumActiveConnections" value="10" />
   <property name="poolPingEnabled" value="true"/>
   <property name="poolPingQuery" value="select 1 as poolPingQuery"/>
  </dataSource>
 </environment>
 </environments>
 <mappers>
  <mapper resource="ms/model/userMapper.xml"/>
 </mappers>
</configuration>

配置userMapper.xml,配置緩存為EHcache及相關參數,記得實體類要實現Serializable接口 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?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="UserMapper">
 
 <!-- 默認的cache <cache />-->
 <!-- 使用ehcache緩存 -->
 <cache type="org.mybatis.caches.ehcache.LoggingEhcache" >
 <property name="timeToIdleSeconds" value="3600"/><!--1 hour 緩存自創建日期起至失效時的間隔時間-->
 <property name="timeToLiveSeconds" value="3600"/><!--1 hour 緩存創建以后,最后一次訪問緩存的日期至失效之時的時間間隔-->
 <property name="maxEntriesLocalHeap" value="1000"/>
 <property name="maxEntriesLocalDisk" value="10000000"/>
 <property name="memoryStoreEvictionPolicy" value="LRU"/>
 </cache>
 
 <!-- 新增-->
 <insert id="saveUser" parameterType="ms.model.User">
 insert into USER(
 account,
 name,
 address
 ) values (
 #{account},
 #{name},
 #{address}
 )
 </insert>
 
 <select id="queryAllUser" resultType="ms.model.User">
 select u.id,
  u.account,
  u.name,
  u.address
 from USER u
 </select>
 
 
</mapper>

五、關鍵代碼
 DAO層:

 首先建一個類,用于獲取SqlSessionFactory,設計成單例模式; 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package ms.dao.base;
 
import java.io.IOException;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
 
public class MySessionFactory {
 
 private static SqlSessionFactory sessionFactory;
 private MySessionFactory(){
 
 }
 
 public static synchronized SqlSessionFactory getSqlSessionFactory(){
 if(sessionFactory == null){
  try {
  sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader("mybatis-config.xml"));
  return sessionFactory;
  } catch (IOException e) {
  Logger.getLogger(MySessionFactory.class).error("getSqlSessionFactory error.");
  e.printStackTrace();
  return null;
  }
 }else{
  return sessionFactory;
 }
 }
 
}

接下來是UserDao,通過openSession獲取SqlSession,注意這里是可以通過SqlSession的commit和rollback進行事務控制的,當然如果本來就一條sql操作,也就沒什么事務控制可言了(本例子只是demo); 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package ms.dao;
 
import java.util.ArrayList;
import java.util.List;
 
import org.apache.ibatis.session.SqlSession;
 
import ms.dao.base.MySessionFactory;
import ms.model.User;
 
public class UserDao {
 
 public void add(User user) throws Exception{
 SqlSession session = MySessionFactory.getSqlSessionFactory().openSession();
 try {
  
  String statement = "UserMapper.saveUser";
  session.insert(statement, user);
  session.commit(true);
  
 } catch (Exception e) {
  session.rollback(true);
  e.printStackTrace();
  
  throw new Exception("error in add method");
 } finally {
  session.close();
 }
  
 }
 
 public List<User> queryAllUser() throws Exception{
 SqlSession session = MySessionFactory.getSqlSessionFactory().openSession();
 List<User> users = new ArrayList<User>();
 try{
  String statement = "UserMapper.queryAllUser";
  users = session.selectList(statement,1);
  session.commit(true);
  
 } catch (Exception e) {
  session.rollback(true);
  e.printStackTrace();
  throw new Exception("error in queryAllUser method");
 } finally {
  session.close();
 }
 
 return users;
 }
}

Service層:略
 Model:略
 Action層:
 轉成json格式數據返回給前端; 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package ms.action;
 
import java.io.PrintWriter;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import ms.model.User;
import ms.service.UserService;
 
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
 
import com.google.gson.Gson;
 
public class UserAction {
 Logger logger = Logger.getLogger(UserAction.class);
 private UserService userService = new UserService();
 public void addUser(){
 PrintWriter out = null;
 try{
  HttpServletRequest request = ServletActionContext.getRequest();
  HttpServletResponse response = ServletActionContext.getResponse();
  response.setContentType("text/html;charset=UTF-8");
  String account = request.getParameter("account");
  String name = request.getParameter("name");
  String address = request.getParameter("address");
  User user = new User();
  user.setAccount(account);
  user.setAddress(address);
  user.setName(name);
  userService.add(user);
  out = response.getWriter();
  out.write(new Gson().toJson("success"));
 }catch(Exception e){
  e.printStackTrace();
  logger.error(e.getMessage());
  if(out != null)
  out.write(new Gson().toJson("fail"));
 }finally{
  out.flush();
  out.close();
 }
 
 }
 
 
 public void queryAllUser(){
 PrintWriter out = null;
 try {
  HttpServletResponse response = ServletActionContext.getResponse();
  response.setContentType("text/html;charset=UTF-8");
 
  Gson gson = new Gson();
  List<User> userList= userService.queryAllUser();
  String gsonStr = gson.toJson(userList);
  
  out = response.getWriter();
  out.write(gsonStr);
 } catch (Exception e) {
  e.printStackTrace();
  logger.error(e.getMessage());
  if(out != null)
  out.write(new Gson().toJson("fail"));
 }finally{
  out.flush();
  out.close();
 }
 }
}

前端代碼: 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style>
.mt20{
 margin-top: 20px;
}
</style>
</head>
<body>
 
<div style="text-align: center;">
 <div class="mt20"><label>賬號:</label><input id="account" type="text"/></div>
 <div class="mt20"><label>姓名:</label><input id="name" type="text"/></div>
 <div class="mt20"><label>地址:</label><input id="address" type="text"/></div>
 <div class="mt20"><button id="addUser" >添加</button></div>
</div>
 
<h3>用戶列表:</h3>
<ul id="userList">
</ul>
 
<script type="text/javascript" src="js/jquery-1.11.1.min.js"></script>
 
<script>
 $(function() {
 $.ajax({
  url : 'queryAllUser.action',
  type : 'post',
  dataType : 'json',
  success : function(data) {
  try {
  for(var i = 0; i < data.length; i++){
   $("#userList").append("<li><span style='color:red'>id="+data[i].id+"</span>,account="+data[i].account+",name="+data[i].name+",address="+data[i].address+"</li>");
  }
  } catch (e) {};
  
  }
  ,
  error : function(e) {
  alert("sys error");
  }
 });
 
 $("#addUser").on("click", function() {
 var account = $("#account").val();
 var name = $("#name").val();
 var address = $("#address").val();
 $.ajax({
 url : 'addUser.action',
 type : 'post',
 dataType : 'json',
 data : {
  account : account,
  name : name,
  address : address
 },
 success : function(data) {
  try {
  
  $("#userList").append("<li>account="+account+",name="+name+",address="+address+"</li>");
  alert("添加成功");
  } catch (e) {
 
  }
 },
 error : function(e) {
  alert("sys error");
 }
 });
 
 });
 });
</script>
</body>
</html>

六、測試效果:

struts2運行正常;

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

測試二級緩存是否OK,查詢所有User;

第一次查詢:cache未命中,訪問數據庫:

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

第二次以及接下來的多次查詢,cache命中,沒有訪問數據庫:

mybatis3.3+struts2.3.24+mysql5.1.22開發環境搭建圖文教程

@author   風一樣的碼農

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/chenpi/p/5128223.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一区二区三区四区五区中文字幕 | 日本高清黄色片 | 草莓视频在线导航 | 久久精精品| 在线播放免费播放av片 | 亚洲福利在线免费观看 | 性色av免费在线观看 | 天天骑夜夜操 | 午夜国产成人 | 欧美h版电影在线观看 | 中文字幕电影免费播放 | 99久久精品免费看国产小宝寻花 | 国产精品一区自拍 | 免费看一级视频 | 欧美一级免费高清 | 欧美性视频一区二区 | www成人在线观看 | 夜夜夜操操操 | 欧美城网站地址 | 国产色爱综合网 | 成人男女视频 | 超碰97人 | 欧美性生活免费视频 | 成人精品一区二区三区中文字幕 | 成人毛片免费视频 | 一级电影在线观看 | 亚洲片在线观看 | 欧美一区二区精品夜夜嗨 | 视频一区二区不卡 | 毛片视频网站 | 欧美性受ⅹ╳╳╳黑人a性爽 | 久久91亚洲精品久久91综合 | 亚洲精品久久久久www | 在线免费视频a | 久久精品日韩一区 | 国产1区2 | 800av凹凸| 国产91丝袜在线播放 | 成熟女人特级毛片www免费 | www国产成人免费观看视频 | 91香蕉影视 |