0.整个源码下载
GitHub - DillonPu/ssm: ssm三大框架完整整合练习示例
1.导包
2.准备数据库表
#创建数据库ssm
drop database if exists ssm;
create database ssm;
use ssm;
#创建书本表
drop table if exists ssm_book;
create table ssm_book (
id int(11) primary key auto_increment not null,
name varchar(111),
detail varchar(256),
userId int(22)
);
insert into ssm_book(id, name,detail,userId) values
(1,"javaWeb","JavaWeb从入门到精通",1),
(2,"PhotoShop","图片图像处理",1),
(3,"mysql从入门到精通","数据库专业书籍",2);
select * from ssm_book;
# 创建用户表
create table ssm_user (
id int(11) primary key auto_increment not null,
username varchar(111),
password varchar(256)
);
insert into ssm_user(id, username,password) values
(1,"aa","aa"),
(2,"bb","bb"),
(3,"cc","cc");
select * from ssm_userssm_user;
select * from ssm_book where userId = 1;
3.准备pojo
3.1.Book.java
package com.ssm.pojo;
public class Book {
private Integer id;
private String name;
private String detail;
private Integer userId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", detail=" + detail + ", userId=" + userId + "]";
}
}
3.2.User.java
package com.ssm.pojo;
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + "]";
}
}
4. 准备jdbc.properties文件
我直接放在了src下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=admin
5.applicationContext.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
<!-- 配置读取properties文件jdbc.properties以连接数据库 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置数据源-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!-- 配置sqlSessionFactory -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="druidDataSource"></property>
</bean>
<!-- 配置mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ssm.mapper"></property>
</bean>
<!-- 配置servic扫描器 -->
<context:component-scan base-package="com.ssm.service"/>
<!-- 配置事物 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="druidDataSource"></property>
</bean>
<!--配置事物-通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="REQUIRED"/>
<tx:method name="edit*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置事物-切面 -->
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.ssm.service.*.*(..))"/>
</aop:config>
</beans>
6.springMVC.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:p="http://www.springframework.org/schema/p"
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-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">
<!--配置Controller扫描 -->
<context:component-scan base-package="com.ssm.controller"></context:component-scan>
<!-- 配置注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
7.dao之mapper
由于在applicationContext.xml配置了自动扫描mapper,所以需要把mapper类和其对应的mapper.xml文件放在同一目录下,命名也是一样
7.1.BookMapper.java
package com.ssm.mapper;
import java.util.List;
import com.ssm.pojo.Book;
public interface BookMapper {
//添加一本书
public void addBook(Book book);
//根据id删除一本书
public void deleteBookById(Integer id);
//根据ID查询书
public Book findBookById(Integer id);
//根据书名模糊查询书
public List<Book> findBooksByKeyname(String keyname);
//根据id编辑修改书的信息
public void editBookInformationById(Book book);
//根据用户id查询
public List<Book> findBooksByUserId(Integer userId);
}
7.2.BookMapper.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.ssm.mapper.BookMapper">
<insert id="addBook" parameterType="com.ssm.pojo.Book" >
insert into ssm_book(id, name,detail,userId) values(#{id},#{name},#{detail},#{userId})
</insert>
<delete id="deleteBookById" parameterType="Integer">
delete from ssm_book where id = #{id}"
</delete>
<select id="findBookById" parameterType="Integer" resultType="com.ssm.pojo.Book">
select * from ssm_book where id = #{id}
</select>
<select id="findBooksByKeyname" parameterType="String" resultType="com.ssm.pojo.Book">
select * from ssm_book where name = "%"#{value}"%"
</select>
<update id="editBookInformationById" parameterType="Integer">
update ssm_book
set name=#{name},detail=#{detail},userId=#{userId}
where id=#{id}
</update>
<select id="findBooksByUserId" parameterType="Integer" resultType="com.ssm.pojo.Book">
select * from ssm_book where userId = #{value}
</select>
</mapper>
7.3.UserMapper.java
package com.ssm.mapper;
import org.apache.ibatis.annotations.Param;
import com.ssm.pojo.User;
public interface UserMapper {
//查找用户
public User findUserbyNameAndPwd(@Param("username") String username,@Param("password") String password);
public User findUserbyName(String username);
}
7.4.UserMapper.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.ssm.mapper.UserMapper">
<select id="findUserbyNameAndPwd" resultType="com.ssm.pojo.User">
select * from ssm_user where username=#{username,jdbcType=VARCHAR} and password=#{password,jdbcType=VARCHAR}
</select>
<select id="findUserbyName" parameterType="String" resultType="com.ssm.pojo.User">
select * from ssm_user where username=#{username}
</select>
</mapper>
8.Controller层
package com.ssm.controller;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ssm.pojo.Book;
import com.ssm.pojo.User;
import com.ssm.service.BookService;
import com.ssm.service.LoginService;
@Controller
public class Login {
/**
* @author AL
* 登录
*/
@Autowired
private LoginService loginService;
@Autowired
private BookService bookService;
@RequestMapping("login")
public String login(String username,String password,Model model) {
User user = this.loginService.findUserByNameAndPwd(username,password);
if(user!=null) {
Integer userId = user.getId();
List<Book> books = bookService.findBooksByUserId(userId);
for(Book book : books) {
System.out.println(book);
}
model.addAttribute("user",user);
model.addAttribute("books",books);
return "my";
}
return "index";
}
}
9.Service层
9.1.BookService接口
用于操作书籍
package com.ssm.service;
import java.util.List;
import com.ssm.pojo.Book;
public interface BookService {
public List<Book> findBooksByUserId(Integer userId);
}
9.2.BookServiceImpl实现类
package com.ssm.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ssm.mapper.BookMapper;
import com.ssm.pojo.Book;
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookMapper bookMapper;
@Override
public List<Book> findBooksByUserId(Integer userId) {
List<Book> books = bookMapper.findBooksByUserId(userId);
return books;
}
}
9.3.登录接口
package com.ssm.service;
import com.ssm.pojo.User;
public interface LoginService {
public User findUserByNameAndPwd(String username, String password);
}
9.4.登录实现类
package com.ssm.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ssm.mapper.UserMapper;
import com.ssm.pojo.User;
@Service
public class LoginServiceImpl implements LoginService {
@Autowired
private UserMapper userMapper;
@Override
public User findUserByNameAndPwd(String username, String password) {
User user = userMapper.findUserbyNameAndPwd(username, password);
return user;
}
}
10.页面导入到WEB-INF下
10.1 index.jsp首页导入
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>index</title>
<style type="text/css">
div{
margin: 10px;
}
input{
width: 200px;
}
</style>
</head>
<body>
<form action="${pageContext.request.contextPath }/login.action" method="post">
<div>
<div>
username:<input type="text" name="username" placeholder="Please enter your username">
</div>
<div>
password:<input type="password" name="password" placeholder="Please enter your password">
</div>
<div>
<input type="submit" value="login in">
</div>
</div>
</form>
</body>
</html>
10.2 登录成功后的页面显示my.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div>
<div>welcome:${user.username}</div>
<div>
<h1>your book list</h1>
<table>
<c:forEach items="${books }" var="book" varStatus="vs" >
<tr>
<td>${vs.index }</td>
<td>${book.id }</td>
<td>${book.name }</td>
<td>${book.detail }</td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>