环境需要jar包(添加完jar包记得build path):
strust2源码jar包
struts2-core-2.5.18.jar
json插件jar包:
struts2-json-plugin-2.5.jar
数据连接jar包
mysql-connector-java-8.0.16.jar
mybatis jar包
mybatis-3.4.6.jar
mybatis自动生成jar包(自动生成实体,基本的sql语句)
mybatis-generator-core-1.3.7.jar
web.xml配置如下
注意strust版本问题会导致过滤器配置不同
<?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>search</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>search.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
大致结构(纯属个人意见)
strust.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!-- 开启开发者模式 -->
<constant name="struts.devMode" value="true" />
<!-- struts配置文件改动后,是否重新加载 -->
<constant name="struts.configuration.xml.reload" value="true" />
<package name="page" extends="struts-default"
namespace="/">
<action name="page_*" class="control.Strust" method="{1}">
<result name="success">/jsp/index.jsp</result>
<result name="login">/jsp/login.jsp</result>
<result name="err">/jsp/err.jsp</result>
<allowed-methods>regex:.*</allowed-methods>
</action>
</package>
<!-- namespace="/add"相当于访问http://localhost:8080/search/add/data_index-->
<package name="data" extends="json-default" namespace="/">
<action name="data_*" class="control.Strustjson" method="{1}">
<!-- 返回json对象-->
<result name="jsonResponse" type="json">
<!-- 去掉空值 -->
<param name="excludeNullProperties">true</param>
<!-- 与方法中的对象对应(名字要一致)-->
<param name="root">jsonResponse</param>
</result>
<result name="login" type="json">
<param name="excludeNullProperties">true</param>
<param name="root">jsonResponse</param>
</result>
<result name="success" type="json">
<param name="excludeNullProperties">true</param>
<param name="root">list</param>
</result>
<result name="admin" type="json">
<param name="excludeNullProperties">true</param>
<param name="root">jsonResponse</param>
</result>
<result name="message" type="json">
<param name="excludeNullProperties">true</param>
<param name="root">list</param>
</result>
<allowed-methods>regex:.*</allowed-methods>
</package>
</struts>
动态方法调用:
<!-- 访问路径为http://localhost:8080/search/data_admin,会调用control.Strustjson类里admin方法 -->
<action name="data_*" class="control.Strustjson" method="{1}">
允许动态方法:
<!-- 允许动态方法 -->
<allowed-methods>regex:.*</allowed-methods>
session工厂(MybatisUtil)配置如下:
package common;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
<!-- 资源路径(mybatis-config.xml)如下-->
private static final String resource = "mybatis-config.xml";
private static Reader reader;
private static SqlSessionFactory sqlSessionFactory;
static{
try {
reader = Resources.getResourceAsReader(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
e.printStackTrace();
}
}
private static final ThreadLocal<SqlSession> THREAD_LOCAL = new ThreadLocal<SqlSession>();
public static SqlSession getcurrentSession(){
SqlSession session = THREAD_LOCAL.get();
if(session==null){
session = sqlSessionFactory.openSession();
THREAD_LOCAL.set(session);
}
return session;
}
public static void closeSession(){
SqlSession session = THREAD_LOCAL.get();
THREAD_LOCAL.set(null);
if(session!=null){
session.close();
}
}
}
mybatis-config.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="xml/mybatis.properties" />
<!-- <settings>
<setting name="mapUnderscoreToCamelCase" value="true" />
<setting name="jdbcTypeForNull" value="NULL" />
<setting name="cacheEnabled" value="true" />
<setting name="defaultFetchSize" value="100" />
</settings> -->
<typeAliases>
<package name="utils/User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 对应里的mapper.xml(sql语句的位置)-->
<mapper resource="mapper/CompanyMapper.xml"/>
<mapper resource="mapper/AdaMapper.xml" />
<mapper resource="mapper/AddMapper.xml" />
</mappers>
</configuration>
xml/mybatis.propertie配置如下(高版本的jsbc需要时钟的配置):
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/example?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
CompanyMapper.xml里的
<!-- 对应的是你的接口位置->
<mapper namespace="mapperXML.AdaMapper">
json数据辅助类:
package common;
import java.io.Serializable;
public class JsonResponse implements Serializable{
private static final long serialVersionUID = 1L;
private int code;
private String msg;
private Object data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public JsonResponse(int code, String msg, Object data) {
super();
this.code = code;
this.msg = msg;
this.data = data;
}
public JsonResponse() {
}
public static JsonResponse Success(Object data) {
return new JsonResponse(1,"success",data);
}
public static JsonResponse Fail(Object data) {
return new JsonResponse(1,"fail",data);
}
}
控制类需要继承 ActionSupport
public class Strust extends ActionSupport {
private static final long serialVersionUID = 1L;
public String index() {
return "success";
}
public String login() {
return "login";
}
public String err() {
return "err";
}
}
mybatis的使用
<!--获取session->
SqlSession session = MybatisUtil.getcurrentSession();
CompanyMapper mapper = session.getMapper(CompanyMapper.class);
CompanyExample company = new CompanyExample();
<!-- 重复值设定-->
company.setDistinct(false);
<!-- 排序规则-->
company.setOrderByClause("id");
Criteria createCriteria = company.createCriteria();
<!-- 等于sql语句where id = 11111111-->
createCriteria.andIdEqualTo(11111111);
<!--list转化成对象-->
Company companyf = (Company) mapper.selectByExample(company).get(0);
<!--如果是更新,需要commit才能向数据库提交数据>
session.commit();
<!--关闭session->
MybatisUtil.closeSession();
自动生成类的main函数:
package Test;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class Test {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, Throwable, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指向逆向工程配置文件
File configFile = new File("config.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings);
myBatisGenerator.generate(null);
}
}