spring + springMVC + mybatis整合
项目结构:
步骤:
- 导入依赖
- 配置
主要依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>5.1.8.RELEASE</spring.version> <!--统一spring包版本-->
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- spring注解开启容器-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 输出操作的过程-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Spring-web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- spring切面支持包-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!-- spring jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSON转换类-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- servlet支持包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope> <!--发布时不要-->
</dependency>
<!-- jsp支持包-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- JSTL标签库-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!--数据库连接-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--阿里连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!-- dbutil-->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.7</version>
</dependency>
<!-- 分页插件 pagehelper-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.8</version>
</dependency>
<!-- mybatis 跟spring整合 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
jdbc配置类(jdbc.properties)
#此处连接mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db8?useUnicode=true&characterEncoding=UTF-8
jdbc.username="用户名"
jdbc.password="密码"
mybatis配置(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="jdbc.properties"></properties>
<settings>
<!-- 开启驼峰命名转换-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--使用列别名 替换列名-->
<setting name="useColumnLabel" value="true"/>
<!-- jdbc获取自增主键-->
<setting name="useGeneratedKeys" value="true"/>
</settings>
<!-- 分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
</configuration>
spring-dao配置
<?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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--配置整合 mybatis 过程-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 数据库连接池 -->
<bean id="createDataSource"
class="com.alibaba.druid.pool.DruidDataSource">
<!-- 数据库连接相关信息 &=&-->
<property name="url" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driver}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--注入连接池-->
<property name="dataSource" ref="createDataSource"/>
<!--mybatis 全局配置文件 mybatis-config.xml-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--扫描entity-->
<property name="typeAliasesPackage" value="com.Mr_xiao.entity"/>
<!--扫描mapper-->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>
<!-- 配置扫描dao 接口包, 动态实现DAO 接口, 注入spring 容器-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--注入sqlSessionFactory-->
<property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
<!--扫描dao包-->
<property name="basePackage" value="com.Mr_xiao.dao"></property>
</bean>
<!-- 事务管理器-->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入连接池-->
<property name="dataSource" ref="createDataSource"/>
</bean>
<!-- 基于注解的声明式事务-->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
spring-web配置
<?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:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.Mr_xiao"/><!-- 开启扫包 -->
<!--配置springmvc 开启注解-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
<!--视图解析器 prefix前缀 suffix后缀 返回值=ok-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
web.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<display-name>ssm</display-name>
<!-- 启动Spring-->
<servlet>
<servlet-name>spring</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
这样项目就搭建好了
拓展-------异常处理
AjaxException
public class AjaxException extends Exception{
public AjaxException(String message){
super(message);
}
}
GlobalControllerAdvice全局异常处理
/**
* 全局异常处理
*/
@ControllerAdvice
public class GlobalControllerAdvice {
//我自己的业务异常 -->web页
@ExceptionHandler(NormalException.class)
public ModelAndView handleNormal(NormalException ex){
ModelAndView mv=new ModelAndView();
mv.addObject("errmsg","自定义异常:"+ex.getMessage());
mv.setViewName("my500");
return mv;
}
//ajax异常 -->json
@ExceptionHandler(AjaxException.class)
@ResponseBody
public JsonResult handleAjax(AjaxException e){
System.out.println("Ajax异常.......");
HashMap hashMap=new HashMap();
hashMap.put("name","肖");
hashMap.put("age",18);
JsonResult ok=new JsonResult(500,e.getMessage(),hashMap);
return ok;
}
}
NormalException
public class NormalException extends Exception{
public NormalException(String message) {
super(message);
}
}
测试异常
HelloController
@Controller
public class HelloController {
@Autowired
UserService userService;
@RequestMapping("/hello")
public String hello(ModelMap map,int a) throws NormalException {
List list=userService.getList();
try {
int n=10/a;
}catch (Exception e){
throw new NormalException("查询失败");
}
//数据--->jsp
map.put("info",list);
return "index";
}
@ResponseBody
@RequestMapping("/json")
public Users json(int a) throws AjaxException {
Users users=new Users();
try {
int n=10/a;
}catch (Exception e){
throw new AjaxException("查询失败");
}
users.setName("提莫");
users.setPassword("123");
return users;
}
}
拓展2----->事务
userdao
public interface UserDao {
//查所有
public List getlist();
}
userservice
public interface UserService {
public List getList();
}
userserviceimpl
//dao层的使用者
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
@Transactional //事务的注释
public List getList() {
List list=userDao.getlist();
System.out.println("正在处理 业务....");
return list;
}
}
userMapeer.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="com.Mr_xiao.dao.UserDao">
<select id="getlist" resultType="Users">
select *from user
</select>
</mapper>