构建SSM(spring+springMVC+Mybatis)的Maven项目
方式一
创建maven项目
项目结构
创建数据库mybatis -> 创建user表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime DEFAULT NULL COMMENT '生日',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=49 DEFAULT CHARSET=utf8;
引入依赖pom.xml
<!-- 设置spring公共版本 -->
<properties>
<spring-version>5.2.9.RELEASE</spring-version>
</properties>
<dependencies>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--spring-context 包括IOC、AOP-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<!--spring-test 整合单元测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- mybatis-spring 整合 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- jdbc 包含事务管理器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- spring-mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
<!-- 日志 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mysql连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 阿里mysql连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
<!-- 编译时不忽略xml文件 -->
<build>
<resources>
<!-- mapper.xml文件在java目录下 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
配置文件
application.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: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.alibaba.com/schema/stat http://www.alibaba.com/schema/stat.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<context:component-scan base-package="com.crwoer"/>
<context:property-placeholder location="classpath:db.properties"/>
<mvc:annotation-driven/>
<!-- 配置druid数据源 -->
<bean id="dataSources" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSources"/>
<property name="typeAliasesPackage" value="com.crwoer.entity"/>
<!--<property name="configLocation" value="classpath:SqlMapConfig.xml"/>-->
<property name="mapperLocations" value="classpath:com/crwoer/dao/*.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.crwoer.dao"/>
</bean>
</beans>
db.properties
db.username=root
db.password=root
db.url=jdbc:mysql://localhost:3306/mybatis
driverClassName=com.mysql.jdbc.Driver
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>
<mappers>
<!--加载mapper配置文件-->
<package name="com.crwoer.dao"/>
</mappers>
</configuration>
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">
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
实体类
User
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// get、set方法....
//~~~~~~
//~~~~~~
//重写toString方法
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
创建控制器UserController
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 查询全部用户信息
*/
@RequestMapping("/get")
public void get() {
List<User> userList = userService.findAll();
System.out.println(userList);
}
/**
* 根据id查询用户信息
* @param id
*/
@RequestMapping("/getId")
public void get(Integer id) {
User user = userService.findById(id);
System.out.println(user);
}
}
业务层
UserService接口
public interface UserService {
List<User> findAll();
User findById(Integer id);
}
UserService实现类UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findAll() {
return userDao.findAll();
}
@Override
public User findById(Integer id) {
return userDao.findById(id);
}
}
dao层(数据持久层)
UserDao接口
public interface UserDao {
List<User> findAll();
User findById(Integer id);
}
UserDao.xml (名字要与UserDao接口一致)
<?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.crwoer.dao.UserDao">
<!-- id与接口方法一致 -->
<select id="findAll" resultType="user">select * from user</select>
<select id="findById" resultType="user" parameterType="Integer">
select * from user
<where>
id = #{id}
</where>
</select>
</mapper>
方式二
无需配置web.xml、application.xml、SqlMapConfig.xml
添加App.java、WebStart两个java类替代xml配置
其他一致
App
@Configuration
@ComponentScan("com.crwoer")
@MapperScan("com.crwoer.dao")
@EnableWebMvc
@PropertySource(value = "classpath:db.properties",encoding = "utf-8")
public class App implements WebMvcConfigurer {
@Value("${driverClassName}")
private String driver;
@Value("${db.url}")
private String url;
@Value("${db.username}")
private String username;
@Value("${db.password}")
private String password;
@Bean
public DataSource getDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
configuration.setMapUnderscoreToCamelCase(true);//-自动使用驼峰命名属性映射字段 userId user_id
factoryBean.setConfiguration(configuration);
// 配置别名
factoryBean.setTypeAliasesPackage("com.crwoer.entity");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
Resource[] resources = null;
try {
resources = resolver.getResources("classpath:/com/crwoer/dao/*.xml");
} catch (IOException e) {
e.printStackTrace();
}
factoryBean.setMapperLocations(resources);
return factoryBean;
}
// 容器管理视图bean
@Bean
public InternalResourceViewResolver getResolver() {
return new InternalResourceViewResolver("/jsp/", ".jsp");
}
// 拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
}
// 放行静态资源
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
WebStart
public class WebStart implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(App.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("ssmServlet", dispatcherServlet);
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
开启tomcat运行项目
全部用户信息 http://127.0.0.1/user/get
根据id查询用户信息 http://127.0.0.1/user/getId?id=41