我们以一个用户登陆为例开始搭建环境。
项目目录结构如下:
框架版本:Mybatis:3.x,Spring:3.x
项目采用xml+注解方式配置。
一.先完成Spring+MaBatis的环境搭建:
数据库脚本文件:
CREATE TABLE `login` (
`login_id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(40) DEFAULT NULL,
`login_password` varchar(16) DEFAULT NULL,
PRIMARY KEY (`login_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
1.pom文件的依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.3</version>
</dependency>
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xmlParserAPIs</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xerces</artifactId>
<version>2.4.0</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.0.0</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
基础类部分:
2.实体对象Login
包含用户登陆的账号和密码
public class Login {
private int login_id;
private String user_name;
private String login_password;
public Login() {
}
public Login(int login_id, String user_name, String login_password) {
super();
this.login_id = login_id;
this.user_name = user_name;
this.login_password = login_password;
}
public int getLogin_id() {
return login_id;
}
public void setLogin_id(int login_id) {
this.login_id = login_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getLogin_password() {
return login_password;
}
public void setLogin_password(String login_password) {
this.login_password = login_password;
}
@Override
public String toString() {
return "Login [login_id=" + login_id + ", user_name=" + user_name
+ ", login_password=" + login_password + "]";
}
}
4.base mapper类:
使用泛型,以方便后面实体mapper类使用
public interface BaseMapper<T>{
public void insert(T t);
public T findById(int id);
public void update(T t);
public void delete(int id);
public List<T> getAll();
}
5.login mapper 类:
除了基础方法,还可以封装login mapper特有的方法
public interface LoginMapper extends BaseMapper<Login>{
public Login findByUsername(String user_name);
}
6.login mapper impl类:
base mapper 不用实现,因为具体的类会具体实现。
使用注解。
但实际上并不需要实现具体的方法,只需要把接口的方法写出来就好了。
@Repository
public class LoginMapperImpl implements LoginMapper {
@Autowired
@Qualifier("loginMapper")
private LoginMapper mapper;
public void insert(Login t) {
}
public Login findById(int id) {
// TODO Auto-generated method stub
return null;
}
public void update(Login t) {
// TODO Auto-generated method stub
}
public void delete(int id) {
// TODO Auto-generated method stub
}
public List<Login> getAll() {
return null;
}
public Login findByUsername(String user_name) {
return mapper.findByUsername(user_name);
}
}
7.service也使用通用接口:
public interface BaseService<T> {
public void insert(T t);
public T findById(int id);
public void update(T t);
public void delete(int id);
public List<T> getAll();
}
8.login service:
注意我们这里方法(login)和mapper的方法(findByUsername)不同,因为这是service层,我们将mapper的方法封装,实现我们需要的功能就可以了。
public interface LoginService extends BaseService<Login> {
public boolean login(Login login);
}
9.login service impl:
也不用实现通用service:
可以看到login方法调用findByUsername方法对登陆用户是否合法进行了验证。
@Service("loginService")
public class LoginServiceImpl implements LoginService {
@Autowired
@Qualifier("loginMapper")
private LoginMapper mapper;
public void insert(Login t) {
mapper.insert(t);
}
public Login findById(int id) {
return mapper.findById(id);
}
public void update(Login t) {
}
public void delete(int id) {
}
public List<Login> getAll() {
return mapper.getAll();
}
public boolean login(Login login) {
Login login2 = mapper.findByUsername(login.getUser_name());
if (null != login2) {
if(login2.getUser_name().equals(login.getUser_name()) && login2.getLogin_password().equals(login.getLogin_password())) {
return true;
}
}
return false;
}
}
MyBatis配置文件:
10.LoginMapper文件:
<?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="employee_management.mapper.LoginMapper">
<resultMap type="employee_management.entity.Login" id="loginList">
<id property="login_id" column="login_id" javaType="java.lang.Integer" />
<result property="user_name" column="user_name" javaType="java.lang.String" />
<result property="login_password" column="login_password" javaType="java.lang.String" />
</resultMap>
<select id="findByUsername" parameterType="String"
resultType="employee_management.entity.Login">
select * from login where user_name=#{user_name}
</select>
<insert id="insert">
insert into login
(user_id,user_name,login_password)
values(#{user_id},#{user_name},#{login_password})
</insert>
<delete id="delete" parameterType="int">
delete from login where
login_id=#{login_id}
</delete>
<update id="update">
<!-- update user u set
u.name=#{student.name},s.sex=#{student.sex} where id=#{id} -->
</update>
<select id="getAll" resultMap="loginList">
select * from login
</select>
</mapper>
11.mybatis-config.xml:
添加LoginMapper的路径。
<?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 resource="entity/LoginMapper.xml"/>
</mappers>
</configuration>
Spring配置文件:
12.applicationContext.xml:
将spring与mybatis能够无缝整合到一起。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/jdbc
http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/mvc/spring-mvc.xsd">
<context:annotation-config />
<context:component-scan base-package="employee_management" /> <!-- 自动扫描 -->
<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:mysql/config.properties" />
<!-- 配置数据源的方式 从properties文件读取 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource属性指定要用到的连接池 -->
<property name="dataSource" ref="dataSource" />
<!--configLocation属性指定mybatis的核心配置文件 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
</bean>
<bean id="loginMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例 -->
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
<!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象 -->
<property name="mapperInterface" value="employee_management.mapper.LoginMapper" />
</bean>
</beans>
13.数据库配置文件:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/user_management?characterEncoding=GBK
jdbc.username=root
jdbc.password=root
#
jdbc.initialPoolSize=20
jdbc.maxIdleTime=60
jdbc.maxPoolSize=200
jdbc.minPoolSize=10
#
jdbc.acquireIncrement=3
jdbc.acquireRetryDelay=1000
jdbc.acquireRetryAttempts=30
jdbc.breakAfterAcquireFailure=false
到此Spring与MyBatis已经整合好了
14.Test.java:
public class Test {
@org.junit.Test
public void printInfo() {
ApplicationContext context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
LoginService service = (LoginService) context.getBean("loginService");
System.out.println("Login account----->>>>" + service.getAll().toString());
}
15.测试结果:
我们已经获取了账号信息:
接下来开始整合SpringMVC:
16.LoginController:
@EnableWebMvc
@Controller
public class UserController {
@RequestMapping(value="jsp/login",method=RequestMethod.POST)
public ModelAndView testLogin(@ModelAttribute User user){
String username = user.getUsername();
String pswd = user.getPswd();
if(!"admin".equals(username) || !"admin".equals(pswd))
{
return new ModelAndView("error");
}
return new ModelAndView("hello");
}
}
15.login.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
<form action="login.do" method="post">
账号:<input type="text" name="user_name" ><br>
密码:<input type="password" name="login_password" ><br>
<input id="btn" type="submit" value="submit">
</form>
<br>
</body>
</html>
17.hello.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>Login success!!</p><br>
hello ${user.username}
</body>
</html>
18.error.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
Wrong page
</body>
</html>
19.springmvc-servlet.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 http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 启用spring mvc 注解 -->
<context:annotation-config />
<!-- scan the package and the sub package -->
<context:component-scan base-package="employee_management" />
<!-- don't handle the static resource -->
<mvc:default-servlet-handler />
<!-- if you use annotation you must configure following setting -->
<mvc:annotation-driven />
<!-- 完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
<!-- configure the InternalResourceViewResolver 一种试图解析器 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
20.web.xml
<?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>Management System</display-name>
<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/springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 设置默认访问界面 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/showLogin.do</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>showLogin.do</welcome-file>
</welcome-file-list>
<!-- Spring配置 -->
<!-- ====================================== -->
<!--监听器 自动装配ApplicationContext的配置信息 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 自动装配ApplicationContext的配置信息 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml
</param-value>
</context-param>
<!-- 乱码问题 -->
<filter>
<filter-name>SpringEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringEncodingFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
</web-app>
21:启动sever,测试结果:
1)登陆界面:
2)登陆成功:
3)登陆失败:
至此整个SSM的环境已经搭建完毕,可以开始开发了,稍候会在此版本基础上,做一个小demo,加深框架的使用。