1 Подготовка
IntelliJ IDEA
Tomcat
JDK
Maven
mysql
Spring, springmvc, mybatis понимают
Теперь, если у вас есть все вышеперечисленные условия, то через мой блог вы определенно можете интегрировать SSM-фреймворк для достижения следующих эффектов.
Весь блог разделен на три части:
- Создайте веб-проект на основе Maven, запустите Tomcat и запустите проект.
- Интегрируйте Mybatis+Spring для модульного тестирования, чтобы завершить функцию запроса данных из базы данных.
- Интегрируйте Mybaits+Spring+SpringMVC, введите URL, чтобы завершить весь процесс MVC.
2 шага
Поскольку он относительно подробный, первая часть предыдущей части понятна и может быть пропущена.
2.1 Часть 1
1. Создайте новый веб-проект на основе Maven.
2. Заполните GroupId и ArtifactId, см.
groupId обычно делится на несколько сегментов, здесь я упомянул только два сегмента, первый сегмент — это домен, а второй сегмент — это название компании. Домены делятся на org, com, cn и т. д., среди которых org — некоммерческая организация, а com — коммерческая организация. Возьмем в качестве примера проект tomcat компании apache: groupId этого проекта — org.apache, его домен — org (поскольку tomcat — некоммерческий проект), название компании — apache, а artigactId — tomcat.
3. Заполните конфигурацию Maven.
1, 2 и 3 на картинке:
1: В первую очередь необходимо настроить Maven, если он настроен, то переходим в интерфейс CMD DOSS и вводимmvn --version
Если команда отображается, значит, она настроена, если нет, скачайте maven и настройте переменные среды.адрес загрузки maven
2: Выберите параметр в нашей папке maven. Здесь следует обратить особое внимание. Возможно, из-за «стены» загрузка пакета maven jar легко застревает, поэтому рекомендуется загрузить пакет maven jar.setting.xml
Настройте внутренние зеркала, такие как Alibaba Cloud.
<!-- 复制如上一段镜像代码配置,添加阿里云镜像 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</mirror>
Вставьте приведенный выше код в соответствующую позицию.
3. Здесь, чтобы начать с нуля, я создал новый адрес склада. Здесь все свободны, и ты можешь быть как я.
4. Заполните имя проекта, имя модуля, первое — рабочее пространство, а второе — проект.
5. Соберите пакет архитектуры
Если здесь появится это диалоговое окно, не забудьте нажать auto.Создайте новую папку, используяSources
Resources
Два тега конвертируют папки Java и Resources соответственно.
6. Создайте новый кот и настройте его
7. Запустите проект
2.2 Часть II
** 1. Добавьте зависимости maven. **Поскольку в pom.xml слишком много пакетов jar, он занимает слишком много содержимого, поэтому скопируйте его из исходного кода.
2. Потому что интеграция SSM 3 слишком сложна в одном .xml. Итак, вот триspring-mybaits.xml
,spring-service
,spring-web
настроитьspring-mybatis.xml
, включая следующее:
- файл конфигурации базы данных
jdbc.properties
. Содержит адрес базы данных, пароль, имя библиотеки и т. д.
<!-- 1.配置数据库相关参数properties的属性:${url} -->
<context:property-placeholder location="classpath:jdbc.properties" />
- пул соединений. Здесь используется c3p0.
<!-- 2.数据库连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 配置连接池属性 -->
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- c3p0连接池的私有属性 -->
<property name="maxPoolSize" value="30" />
<property name="minPoolSize" value="10" />
<!-- 关闭连接后不自动commit -->
<property name="autoCommitOnClose" value="false" />
<!-- 获取连接超时时间 -->
<property name="checkoutTimeout" value="10000" />
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2" />
</bean>
- Настройте объект SqlSessionFactory. Предназначен для получения sqlSession.
<!-- 3.配置SqlSessionFactory对象 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- 扫描entity包 使用别名 -->
<property name="typeAliasesPackage" value="ssm.entity" />
<!-- 扫描sql配置文件:mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
</bean>
существуетresources
под новымmybatis-config.xml
, этот файл также известен как основной файл конфигурации для mybatis. Контент временно пуст
<?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>
</configuration>
Создайте новый пакет сущностей для размещения классов сущностей, то есть pojo. Также просканируйте весь пакет классов сущностей в фабрике sqlSession. Таким образом, имя класса можно использовать в качестве псевдонима в преобразователе вместо того, чтобы записывать относительный путь расположения всего класса.
<select id="queryUserListByUsername" parameterType="String" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
</select>
например Пользователь. В противном случае напишите
ssm.entity.User
Файл конфигурации sql я поместил здесь в resources-->mapper-->.
Существует множество способов обработки местоположения *mapper.xml. некоторые ставятmapper
под пакет. затем вmapper
Создайте два пакета подdao
иmapper
Существуют также пакеты, основанные на функциях, и для каждой функции создается пакет, который содержит набор файлов функций, а именно *Dao *Mapper.xml
Как это сделать, зависит от реальной ситуации на проекте.Если функция проектной системы сложная, рекомендуется рекомендовать последние два, иначе будет очень больно (проектов много, файлов много. Если используется первый метод, диапазон большой и экран заполнен :) )
<property name="mapperLocations" value="classpath*:mapper/*.xml" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
Заполните в соответствии с вашей реальной ситуацией
- Разработка динамического прокси Mapper, сканирование интерфейса dao.
<!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 注入sqlSessionFactory -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<!-- 给出需要扫描Dao接口包 -->
<property name="basePackage" value="ssm.dao" />
</bean>
<property name="basePackage" value="ssm.dao" />
Заполните в соответствии с вашей реальной ситуацией
в порядке! В этом месте настроен наш spring-mybatis. Базой данных уже можно управлять через mybatis, теперь давайте проверим, нет ли проблем на этом этапе. Сначала вставьте некоторые данные в базу данных. Здесь я предоставляю копию моего файла sql, если он вам нужен, вы можете запустить его напрямую.
DROP TABLE IF EXISTS `items`;
CREATE TABLE `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL COMMENT '商品名称',
`price` float(10,1) NOT NULL COMMENT '商品定价',
`detail` text COMMENT '商品描述',
`pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
`createtime` datetime NOT NULL COMMENT '生产日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of items
-- ----------------------------
INSERT INTO `items` VALUES ('1', '台式机', '3000.0', '该电脑质量非常好!!!!', null, '2016-02-03 13:22:53');
INSERT INTO `items` VALUES ('2', '笔记本', '6000.0', '笔记本性能好,质量好!!!!!', null, '2015-02-09 13:22:57');
INSERT INTO `items` VALUES ('3', '背包', '200.0', '名牌背包,容量大质量好!!!!', null, '2015-02-06 13:23:02');
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` date DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '王五', null, '2', null);
INSERT INTO `user` VALUES ('10', '张三', '2014-07-10', '1', '北京市');
INSERT INTO `user` VALUES ('16', '张小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('22', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('24', '张三丰', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('25', '陈小明', null, '1', '河南郑州');
INSERT INTO `user` VALUES ('26', '王五', null, null, null);
Это структура всего проекта.
существуетentity
построить подUser
Класс Entity, обратите внимание на выравнивание полей.
существуетdao
построить подUserDao
import org.apache.ibatis.annotations.Param;
import ssm.entity.User;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/7
* Description:
*/
public interface UserDao {
public List<User> queryUserListByUsername(String username);
public List<User> queryUserListByUsername2Sex(@Param("username")String username, @Param("sex") int sex);
}
существуетmapper
под новымUserMappper.xml
Используется для написания операторов SQL. Из-за теста напишите здесь простой 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="ssm.mapper.UserDao">
<!-- 目的:为dao接口方法提供sql语句配置 -->
<select id="queryUserListByUsername" parameterType="String" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
</select>
<select id="queryUserListByUsername2Sex" resultType="User">
SELECT
*
FROM
USER
WHERE
username = #{username}
AND sex = #{sex}
</select>
</mapper>
Есть одно место, на которое стоит обратить внимание<mapper namespace="ssm.mapper.UserDao">
Измените местоположение отображения на свое собственное, возможно, мы разные.
Здесь есть небольшая хитрость, на которую стоит обратить внимание.В общем развитии, мы ставим sql в это первое после того, как напишем и запустим его правильно, как на картинке ниже, и для красоты оператор sql будет стандартизирован перед копированием оператор sql.Избегайте слишком большого беспорядка.
в порядке! Напишите тестовый класс для тестирования.
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ssm.dao.UserDao;
import ssm.entity.User;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/7
* Description:
*/
public class TestPratice {
@Test
public void A(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-mybatis.xml");
UserDao userDao = ac.getBean(UserDao.class);
List<User> userList = userDao.queryUserListByUsername2Sex("王五",1);
// List<User> userList = userDao.queryUserListByUsername("王五");
System.out.println(userList.toString());
}
}
Хорошо, на данный момент это означает, что наша интеграция mybatis и spring не представляет проблемы.
2.3 Часть III
написать сейчасspring-service.xml
, относительно просто, достаточно отсканироватьservice
Пакеты классов и транзакции конфигурации.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 扫描service包下所有使用注解的类型 -->
<context:component-scan base-package="ssm.service" />
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入数据库连接池 -->
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置基于注解的声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
сборка интеграции spring + springmvcspring-web
, контента в нем меньше, просто отсканировалcontroller
Используется для обеспечения того, чтобы передний контроллерDispatcherServlet
уметь находить и вводить соответствующие методы.
При этом также настраивается парсер попытокViewResolve
, так что мы можем напрямую написать имя представления при переходе к представлению, вместо того, чтобы писать относительный адресный путь.
<!-- 3.配置jsp 显示ViewResolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 4.扫描web相关的 controller -->
<context:component-scan base-package="ssm.controller" />
Последнее — настроить web.xml. Основная функция — настройка фронт-контроллераDispatcherServlet
Основное внимание уделяется обработке правил перехвата. Здесь мы все перехвачены. Второй - это три, которые мы только что написалиspring-*.xml
Файл настроен здесь для запуска.
<!-- spring mvc 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:/spring-*.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!-- 此处也可以配置成 *.do *.action形式 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
Затем идут логи и кодирование, которые никак не влияют на текущий тест, но он все равно настроен.
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<!-- 编码过滤器 -->
<filter>
<filter-name>encodingFilter</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>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Хорошо, наконец, готово, теперь вы можете спокойно писать код. Теперь подготовьте такой JSP-файл.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ page isELIgnored="false" %>
<!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>查询商品列表</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/items/queryitem.action" method="post">
查询条件:
<table width="100%" border=1>
<tr>
<td><input type="submit" value="查询"/></td>
</tr>
</table>
商品列表:
<table width="100%" border=1>
<tr>
<td>商品名称</td>
<td>商品价格</td>
<td>生产日期</td>
<td>商品描述</td>
<td>操作</td>
</tr>
<c:forEach items="${itemList }" var="item">
<tr>
<td>${item.name }</td>
<td>${item.price }</td>
<td>${item.createtime}</td>
<td>${item.detail }</td>
<td><a href="${pageContext.request.contextPath }/itemEdit.action?id=${item.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
</body>
</html>
Нам нужно запросить все данные элемента, показанные выше.
напиши первымItemsDao
import org.springframework.stereotype.Repository;
import ssm.entity.Items;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Repository
public interface ItemsDao {
public List<Items> queryAllItemsList();
}
соответствующийImtesMapper.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="ssm.dao.ItemsDao">
<!-- 目的:为dao接口方法提供sql语句配置 -->
<select id="queryAllItemsList" resultType="Items">
SELECT
*
FROM
items;
</select>
</mapper>
написатьItemsService
Интерфейс и его реализующий класс
import ssm.entity.Items;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
public interface ItemsService {
List<Items> queryAllItemsList();
}
package ssm.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ssm.dao.ItemsDao;
import ssm.entity.Items;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Service
public class ItemsServiceImpl implements ItemsService {
// 注入Service依赖
@Autowired
private ItemsDao itemsdao;
@Override
public List<Items> queryAllItemsList() {
return itemsdao.queryAllItemsList();
}
}
писать последнимItemsController
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import ssm.entity.Items;
import ssm.service.ItemsServiceImpl;
import java.util.List;
/**
* Created by guozhaohui628@gmail.com on 2018/5/8
* Description:
*/
@Controller
public class ItemsController {
// 注入Service依赖
@Autowired
private ItemsServiceImpl itemsService;
@RequestMapping(value = "items/queryitem.action")
public ModelAndView itemsList(){
ModelAndView mav = new ModelAndView();
List<Items> itemsList = itemsService.queryAllItemsList();
System.out.println(itemsList.toString());
mav.addObject("itemList", itemsList);
mav.setViewName("itemList");
return mav;
}
}
Код в .jsp был написан и может использоваться напрямую. Мы хотим проверить, либо щелкнуть этот адрес напрямую, либо щелкнуть запрос
Хорошо, все готово, текст относительно тонкий, поэтому он относительно длинный. Надеюсь, это поможет вам!
3 остановка
Во время интеграции фреймворка сообщалось о следующих ошибках. Если у вас такая же ситуация, вы можете обратиться к одному или двум
Выражение EL в .JSP не работает неверно
Cause: java.lang.NoSuchMethodExceptionТакже есть несколько ошибок, которые не регистрируются, напримерspring注解方式 idea报could not autowire
и Т. Д.
Ссылка при интеграции:напишите ссылку сюда
Если это поможет вам, добро пожаловать в службу поддержки Star. Адрес источника напишите ссылку сюда