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

二、配置web.xml,添加一个过滤器StrutsPrepareAndExecuteFilter,处理所有*.action请求;

<?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处理

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

2、查找ActionMapping:通过PrepareOperations的findActionMapping方法查找,如果没找到,则将请求转发给过滤器链上下一个对象,不交给struts2处理;如果找到ActionMapping,则调用ExecuteOperations的executeAction方法,开始执行Action;下图是根据url找到ActionMapping的情况;

三、配置struts.xml文件,该Demo主要演示向前端传json格式数据,result type设成json格式,当然也可以设成其它的; 

<?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"/>

<?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接口

<?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,设计成单例模式;

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);

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格式数据返回给前端;

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();
 }
 }
}

前端代码: 

<%@ 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运行正常;

测试二级缓存是否OK,查询所有User;

第一次查询:cache未命中,访问数据库:

第二次以及接下来的多次查询,cache命中,没有访问数据库:

@author   风一样的码农

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • MyBatis入门学习教程(一)-MyBatis快速入门

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) 首先给大家介绍MyBatis的含义

  • Mybatis 开发注解快速入门

    快速普及 1.mybatis是什么 mybatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. Mybatis实现了接口绑定,使用更加方便. 对象关系映射的改进,效率更高 MyBatis采用功能强大的基于OGNL的表达式来

  • Java+MyBatis+MySQL开发环境搭建流程详解

    主要搭建过程 1. pom.xml文件中加入mybatis和数据库依赖,这里使用mysql: <properties> <mybatis.version>3.2.3</mybatis.version> <mysql.version>5.1.26</mysql.version> <slf4j.api.version>1.7.5</slf4j.api.version> <testng.version>6.8.7&l

  • MyBatis快速入门(简明浅析易懂)

    一.MyBatis简介 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架. MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装. MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. JDBC -> dbutils(自动封装) -> MyBatis -> Hibernate mybatis是将sql写在xml中,然

  • MyBatis快速入门之环境搭建和单表映射

    一.MyBatis简介 一说起对象关系映射框架,大家第一时间想到的肯定是Hibernate.Hibernate作为一个著名的框架,功能十分强大.我们只需要配置好实体类和数据表之间的关系,Hibernate就会自动帮我们完成生成并执行SQL语句,映射结果集这样的工作.但是也正是由于Hibernate如此强大的功能,导致了它的缺点:一是非常笨重,启动Hibernate的SessionFactory非常耗时,开销巨大:二是配置复杂,学习成本较高,系统调优也不容易:三是自定义查询功能较弱,查询结果如果不

  • MyBatis快速入门

    一.MyBatis背景介绍 MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录. 二.MyBatis开发环境搭建 2.1准备开发环境 1.在eclipse中新建一个javaweb项目MyBatis_Study 2.添加相应的ja

  • mybatis快速入门学习教程新手注意问题小结

    什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 ses

  • Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

    MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来. MyBatis是在Apache许可证 2.0下分发的自由软件,是iBATIS 3.0的分支版本.其维护团队也包含iBATIS的初创成员. 与其他的对象关系映射框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联.MyBatis允许用户充分利用数据库的各种功能,例如存储过程.视图.各种复杂的查询以及某数据库的专有特性.如果要对遗留数据库.不规范的数据

  • 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 二.配置web.xml,添加一个过滤器StrutsPrepareAndExecuteFilter,处理所有*.action请求: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns

  • struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25开发环境搭建图文教程

    struts2.3.24 + spring4.1.6 + hibernate4.3.11+ mysql5.5.25开发环境搭建及相关说明. 一.目标 1.搭建传统的ssh开发环境,并成功运行(插入.查询) 2.了解c3p0连接池相关配置 3.了解验证hibernate的二级缓存,并验证 4.了解spring事物配置,并验证 5.了解spring的IOC(依赖注入),将struts2的action对象(bean)交给spring管理,自定义bean等...并验证 6.了解spring aop(面向

  • spring mvc4.1.6 spring4.1.6 hibernate4.3.11 mysql5.5.25开发环境搭建图文教程

    一.准备工作 开始之前,先参考上一篇:  struts2.3.24 + spring4.1.6 + hibernate4.3.11 + mysql5.5.25 开发环境搭建及相关说明 思路都是一样的,只不过把struts2替换成了spring mvc 二.不同的地方 工程目录及jar包: action包改成controller:  删除struts2 jar包,添加spring mvc包(已有的话,不需添加): web.xml配置:  跟之前不同的地方是把struts2的过滤器替换成了一个ser

  • MySQL5.6.22安装配置方法图文教程

    本教程为大家分享了MySQL5.6.22安装配置方法的具体代码,供大家参考,具体内容如下 MySQL5.6.22下载地址:点击下载 1.运行mysql-installer-community-5.6.22.0.msi安装包 2.Developer Default 默认安装类型 Server only 仅作为服务器 Client only 仅作为客户端 Full 完全安装类型 Custom 用户自定义安装类型 根据自己的情况选择安装,我们这里以完全安装为例: 3.这里有3个选项: Develope

  • MySQL5.6.22 绿色版 安装详细教程(图解)

    1.数据库下载 从官方网站可以找到两种文件包,一种是exe安装程序,另一种是zip压缩包. 本人喜欢清爽的方式,所以下载的是ZIP压缩包.最新的5.6.22大概350M,下载还需要oracle帐号,自己注册一个好了. 2.数据库安装 解压出下载的文件mysql-5.6.22-win32.zip(有x86和x64两个版本)到任一目录,防止出现未知问题,最好放在非系统盘的非中文目录下,我的位置E:\mysql\mysql-5.6.24-win32.打开文件夹复制一份my-default.ini为my

  • Windows10下mysql 8.0.22 安装配置方法图文教程

    mysql 8.0.22 安装配置方法图文教程,供大家参考,具体内容如下 这一步有可能会报错,如果没有报错,请忽略 win+r打开运行,输入services.msc打开服务,找到安装MySQL时添加的服务名,一般8.0版本的MySQL默认是MySQL80,双击打开,登录选项卡下将选择的此账户改为选择本地系统账户 添加mysql 环境变量 修改mysql字符集 修改MySQL的默认字符集为UTF8,修改方法网上资料很多. 在此仅介绍Windows下的解决办法: 修改MySQL默认安装目录C:\Pr

  • mysql 8.0.22 winx64安装配置图文教程

    mysql 8.0.22 winx64安装配置图文教程,供大家参考,具体内容如下 1.下载 进入MySQL官网下载,或直接点击下载 2.安装 1.以管理员身份 --找到文件的位置 --cd bin 2.键入命令 mysqld --initialize-insecure 3.键入命令 mysqld install 4.显示Service successfully installed. 表示安装成功 3.启动 1. 键入命令 net start mysql 2. 键入命令 mysql -hlocal

  • Windows Server 2003下配置IIS6.0+php5+MySql5+PHPMyAdmin环境的图文教程

    配置环境: 操作系统:Windows Server 2003 sp2企业版 Web服务器:系统自带的IIS6.0 所需工具: PHP:php-5.2.12-Win32.zip(官方网址:http://www.php.net) 数据库:mysql-5.0.22-win32.zip(官方网址:http://www.mysql.com) 数据库管理:phpMyAdmin-3.2.5-all-languages.zip(官方网址:http://www.phpmyadmin.net) 配置过程: 首先我们

  • MySQL5.7免安装版配置图文教程

    Mysql是一个比较流行且很好用的一款数据库软件,如下记录了我学习总结的mysql免安装版的配置经验. 一. 软件下载 5.7 32位https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-win32.zip 5.7 64位https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 本次教程采用的是64位版本,诸君可根据自己电脑系统和个人喜好酌情处理. 二

  • Struts2开发环境搭建 附简单登录功能实例

    首先是搭建Struts2环境. 第一步 下载Struts2 去Struts官网 http://struts.apache.org/ 下载Struts2组件. 截至目前,struts2最新版本为2.3.1.3,下载struts-2.3.16.3-all.zip,解压,放着. 第二步 新建Web Project并导入jar包 在MyEclispe中新建Web Project,然后找到解压的Struts2包,在里面apps文件夹下找到struts2-blank.war,解压这个WAR文件,将里面WEB

随机推荐