maven+mybatis+spring+springmvc整合
来源:互联网 发布:恒大淘宝组织架构 编辑:程序博客网 时间:2024/05/21 19:23
1 使用技术
项目构建采用maven,持久层使用mybatis实现,业务层采用spring,控制层采用springmvc、
1.1 需求
实现用户列表,从mysql数据库查询用户信息,并且添加用户信息。
1.2 导入数据库
先导入sql_table.sql,再导入 sql_data.sql脚本:
1.3 创建maven项目:ssm
1.4 Dao(搭建mybatis)
1.4.1 pom中添加所需依赖
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lanqiao</groupId>
<artifactId>ssm</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 属性配置 -->
<properties>
<mybatis.version>3.4.4</mybatis.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<mysql.version>5.1.38</mysql.version>
</properties>
<dependencies>
<!-- ==========mybatis相关依赖=====-->
<!--mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!--log4j依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<!--mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</project>
1.4.2 创建po类
public class User implements Serializable {
privateint id;
privateString username;// 用户姓名
privateString sex;// 性别
privateDate birthday;// 生日
privateString address;// 地址
}
1.4.3 创建UserMapper接口
public interface UserMapper {
//通过ID查询用户对象
publicUser findUserById(int id);
//添加用户
publicvoid insertUser(User user);
}
1.4.4 创建UserMapper.xmp
<?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">
<mappernamespace="com.lanqiao.mapper.UserMapper">
<!--1、查询 -->
<selectid="findUserById" parameterType="int"resultType="user">
select* from user where id=#{id}
</select>
<!--2、添加 -->
<insertid="insertUser" parameterType="user">
<!--2-1:添加主键:指定主键的生成策略-->
<selectKeykeyProperty="id" resultType="java.lang.Integer">
selectLAST_INSERT_ID()
</selectKey>
<!--2-2:添加其它 -->
insert intouser(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
</mapper>
1.4.5 db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root
1.4.6 log4j.properties
log4j.rootLogger=DEBUG,Console,File
##\u63A7\u5236\u53F0\u65E5\u5FD7
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-ddHH\:mm\:ss}][%C] - %m%n
#
##\u666E\u901A\u6587\u4EF6\u65E5\u5FD7
log4j.appender.File=org.apache.log4j.RollingFileAppender
#\u6587\u4EF6\u5B58\u50A8\u4F4D\u7F6E
log4j.appender.File.File=d:/log.log
log4j.appender.File.MaxFileSize=10MB
#\u8F93\u51FA\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-ddHH\:mm\:ss}][%C] - %m%n
#mybatis\u65E5\u5FD7\u914D\u7F6E\u4FE1\u606F
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.org.apache=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
1.4.7 SqlMapConfig.xml
在classpath下创建mybatis/SqlMapConfig.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>
<!--添加属性 -->
<propertiesresource="db.properties" />
<!--设置全局属性配置 -->
<settings>
<settingname="lazyLoadingEnabled" value="true" />
<settingname="aggressiveLazyLoading" value="false" />
<!--打开了二级缓存 -->
<settingname="cacheEnabled" value="true"/>
</settings>
<!--配置别名 -->
<typeAliases>
<!--给某个包下所有的对象做别名,别名就是当前类的本身,跳过大小的 -->
<packagename="com.lanqiao.po" />
</typeAliases>
<environmentsdefault="development">
<environmentid="development">
<!--配置jdbc的实现 -->
<transactionManagertype="JDBC" />
<!--配置数据源 -->
<dataSourcetype="POOLED">
<propertyname="driver" value="${jdbc.driver}" />
<propertyname="url" value="${jdbc.url}" />
<propertyname="username" value="${jdbc.username}" />
<propertyname="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!--加载map的映射文件 -->
<mappers>
<!--加载User.xml文件 -->
<packagename="com.lanqiao.mapper" />
</mappers>
</configuration>
1.4.8 创建MybatisTest测试类
public class MybatisTest {
privateSqlSessionFactory sqlSessionFactory;
privateUserMapper userDao;
@Before
publicvoid createSqlSessionFactory(){
try{
//1、加载SqlMapConfig.xml文件,同时执行里面的内容
Stringresources = "SqlMapConfig.xml";
sqlSessionFactory= newSqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resources));
System.out.println("sqlSessionFactory:"+sqlSessionFactory);
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 1、通过id查询用户对象
*/
@Test
publicvoid testFindUserById(){
//创建了第一个sqlsession
SqlSessionsession = sqlSessionFactory.openSession();
UserMapperuserMapper = session.getMapper(UserMapper.class);
//第一次查询,内存中是没有缓冲数据,则会去数据库中执行查询,因此我们会看到操作数据库的代码
Useruser = userMapper.findUserById(10);
System.out.println(user);
session.close();
}
/**
* 2、添加用户对象
*/
@Test
publicvoid testInsertUser(){
//创建了第一个sqlsession
SqlSessionsession = sqlSessionFactory.openSession();
UserMapperuserMapper = session.getMapper(UserMapper.class);
//第一次查询,内存中是没有缓冲数据,则会去数据库中执行查询,因此我们会看到操作数据库的代码
Useruser = new User();
user.setAddress("上海");
user.setBirthday(newDate());
user.setSex("男");
user.setUsername("张四5");
userMapper.insertUser(user);
session.commit();
session.close();
}
}
1.5 Service(搭建spring)
1.5.1 修改pom对spring相关依赖
<sping.version>4.2.5.RELEASE</sping.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>
<commons-dbcp>1.4</commons-dbcp>
<!-- ===========spring相关依赖===============-->
<!--spring与mybatis整合依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--添加spring aop依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${sping.version}</version>
</dependency>
<!--spring 事务管理 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${sping.version}</version>
</dependency>
<!--spring jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${sping.version}</version>
</dependency>
<!--添加springaspects依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${sping.version}</version>
</dependency>
<!--配置spring测试 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${sping.version}</version>
</dependency>
<!--添加spring的核心依赖库core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${sping.version}</version>
</dependency>
<!--添加spring的核心依赖库beans-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${sping.version}</version>
</dependency>
<!--添加spring的核心依赖库context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${sping.version}</version>
</dependency>
<!--dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>${commons-dbcp}</version>
</dependency>
1.5.2 创建UserService接口
public interface UserService {
//通过ID查询用户对象
publicUser findUserById(int id);
//添加用户
publicvoid insertUser(User user);
}
1.5.3 创建UserServiceImpl实现类
@Service("userServiceImpl")
public class UserServiceImpl implementsUserService {
@Resource
privateUserMapper userMapper;
//通过ID查询用户对象
@Override
publicUser findUserById(int id) {
//TODO Auto-generated method stub
returnuserMapper.findUserById(id);
}
//添加用户
@Override
publicvoid insertUser(User user) {
userMapper.insertUser(user);
}
}
1.5.4 创建applicationContext-service.xml
<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--开启组件扫描service -->
<context:component-scanbase-package="com.lanqiao.service" />
</beans>
1.5.5 创建applicationContext-dao.xml
1、加载db配置文件 2、数据库连接池 3、spring管理sqlsessionfactory 4、mapper扫描器
<?xml version="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--1、加载db配置文件 -->
<context:property-placeholderlocation="classpath:db.properties" />
<!--2、数据库连接池 -->
<beanid="dataSource"class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<propertyname="driverClassName" value="${jdbc.driver}" />
<propertyname="url" value="${jdbc.url}" />
<propertyname="username" value="${jdbc.username}" />
<propertyname="password" value="${jdbc.password}" />
<propertyname="maxActive" value="30" />
<propertyname="maxIdle" value="5" />
<propertyname="defaultAutoCommit" value="false"/>
</bean>
<!--3、spring管理sqlsessionfactory -->
<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean">
<propertyname="dataSource" ref="dataSource" />
<propertyname="typeAliasesPackage" value="com.lanqiao.po" />
</bean>
<!--4、mapper扫描器 -->
<beanclass="org.mybatis.spring.mapper.MapperScannerConfigurer">
<propertyname="basePackage" value="com.lanqiao.mapper" />
<propertyname="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
</beans>
1.5.6 创建MybatisSpringTest测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath*:/applicationContext-dao.xml","classpath*:/applicationContext-service.xml"})
public class MybatisSpringTest {
@Resource
UserServiceuserServiceImpl;
@Test
publicvoid testFindUser() {
Useruser = userServiceImpl.findUserById(10);
System.out.println(user.getUsername());
}
@Test
publicvoid testInserUser() {
Useruser = new User();
user.setAddress("上海");
user.setBirthday(newDate());
user.setSex("男");
user.setUsername("张四5");
userServiceImpl.insertUser(user);
}
}
1.5.7 存在问题
mybatis-spring采用的是编码式事务实现了事务的自动提交,但无法回滚,后续使用声明式事物解决
实验:
public void insertUser(User user) {
userMapper.insertUser(user);
thrownew NullPointerException();//此处有异常
}
观察结果:数据库依然插入了数据,并没有回滚
1.5.8 创建applicationContext-transaction.xml
配置声明式事务
<?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"xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--事务管理器 -->
<beanid="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 数据源 -->
<propertyname="dataSource" ref="dataSource" />
</bean>
<!--通知 -->
<tx:adviceid="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--传播行为 -->
<tx:methodname="save*" propagation="REQUIRED" />
<tx:methodname="insert*" propagation="REQUIRED" />
<tx:methodname="delete*" propagation="REQUIRED" />
<tx:methodname="update*" propagation="REQUIRED" />
<tx:methodname="find*" propagation="SUPPORTS"read-only="true" />
<tx:methodname="get*" propagation="SUPPORTS"read-only="true" />
</tx:attributes>
</tx:advice>
<!--切面 -->
<aop:config>
<aop:advisoradvice-ref="txAdvice"
pointcut="execution(*com.lanqiao.service.impl.*.*(..))" />
</aop:config>
</beans>
1.5.9 修改测试类
@ContextConfiguration(locations={"classpath*:/applicationContext-dao.xml","classpath*:/applicationContext-service.xml","classpath*:/applicationContext-transaction.xml"})
1.6 Action(搭建springmvc)
1.6.1 修改pom对spring相关依赖
<jstl.version>1.2</jstl.version>
<standard.version>1.1.2</standard.version>
<servlet.version>3.1.0</servlet.version>
<!-- ===========springmvc相关依赖===============-->
<!--配置jstl标签 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<!-- 配置jstls标准标签库 -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>${standard.version}</version>
</dependency>
<!--配置servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<!--配置spring-mvc依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${sping.version}</version>
</dependency>
1.6.2 创建UserController
@Controller
public classUserController {
@Autowired
private UserService userService;
@RequestMapping("/queryUser.action")
public ModelAndView queryUser(){
System.out.println("wwwwwwwwwwwwwwwwwwwwwwwww:"+userService);
User user =userService.findUserById(10);
ModelAndView model = newModelAndView();
model.addObject("user",user);
model.setViewName("user.jsp");
return model;
}
}
1.6.3 创建springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
<!--扫描指定包下的组件 -->
<context:component-scanbase-package="com.lanqiao.controller"/>
</beans>
1.6.4 配置web.xml
<!--加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:/applicationContext-*.xml</param-value>
</context-param>
<!--spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--解决post乱码 -->
<filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--springmvc的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--contextConfigLocation不是必须的,如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
1.7 测试
http://localhost:8089//ssm/queryUser.action
- SpringMvc+Spring+Mybatis+Maven整合
- spring springmvc mybatis maven整合
- Springmvc+spring+maven+Mybatis整合
- SpringMvc+Spring+Mybatis+Maven整合
- SpringMVC+Spring+Mybatis+Maven整合
- MAVEN整合Spring+SpringMVC+Mybatis
- SpringMvc+Spring+MyBatis+Maven整合
- spring+springmvc+mybatis+maven 整合
- Spring+SpringMVC+MyBatis+Maven整合
- maven SpringMVC,Spring,Mybatis整合
- maven+springmvc+spring+mybatis整合
- maven+spring+springmvc+mybatis整合
- maven+Spring+SpringMVC+Mybatis 整合
- maven+mybatis+spring+springmvc整合
- Spring+SpringMVC+Mybatis+maven整合
- spring+mybatis+springMvc+maven简单整合
- SpringMvc+Spring+Mybatis+Maven整合学习
- springmvc+spring+mybatis整合demo(maven)
- 僵尸进程如何产生的
- UVA 1329 Corporative Network
- HDU 3336 Count the string(深入理解KMP算法)【模板】
- 初三上学期待学习内容(实时更新)
- Android检查手机是否被root
- maven+mybatis+spring+springmvc整合
- EventBus的使用
- C++遍历目录(C++17filesystem+正则 )
- Xmind基础教程-联系
- vue打包项目后正确显示图片
- Spring源码解析-容器功能扩展
- HDU-4507 吉哥系列故事――恨7不成妻 (数位dp)
- JavaSE 23种 设计模式 之 单例模式
- 解决Windows server 2003不认U盘或移动硬盘