myeclipse的ssm框架整合(实现增删改查)

一、实验效果:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述二、环境搭建说明:
myEclipse+jdk1.8+mysql1.6+ssm框架
ssm所有的jar包(百度网盘):
https://pan.baidu.com/s/1tPw0tYy-LKLyX3p3yp6wxQ
提取码:9lr5
三、项目分层截图:
在这里插入图片描述四、数据库设计截图:
在这里插入图片描述五、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>nueo_ssmOne</display-name>
  <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>
  <!-- SpringMVC前端控制器配置 -->
  <servlet>
		<servlet-name>springMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!--设定初始化参数,在初始化的时候就加载配置文件信息-->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!--加载spring配置文件-->
			<param-value>classpath:applicationContext.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>
  
  <!-- 解决中文乱码	spring带的解决乱码的配置 -->
	<filter>
		<filter-name>charcterEncoding</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>charcterEncoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
  
  	<!-- 启动tomcat容器时候,加载spring的ioc容器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 指定spring的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
</web-app>

六、applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!--这是各类命名空间,这个有提示作用,导入命名空间,myEclipse会自动加载资源-->
<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:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	 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-3.2.xsd 
	http://www.springframework.org/schema/mvc
	http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-3.2.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
	<!-- 前端视图名的配置,例子:你访问..../index.jsp,那么用了前端视图配置,就直接在控制器层写
	..../inde即可,它与index.jsp相同,就是想以.jsp结尾的都几种统一写了 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!--前缀名,这里主要是指定jsp页面在什么目录下面如果在根目录下就写 / -->
		<property name="prefix" value="/"></property>
		<!--后缀名,视图资源的后缀名是,这里是 .jsp -->
		<property name="suffix" value=".jsp"></property>
	</bean>
	
	<!-- 配置数据源的bean,高效连接数据库,这是连接数据库的配置 -->
	<bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://192.168.191.144:3306/ssm?useUnicode=true&amp;characterEncoding=UTF-8">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="123456"></property>
	</bean>
	
	<!--让Spring管理mybatis中的核心对象SqlSessionFactory,将SQL工厂由spring来创建-->
	<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
			<!-- 注入依赖对象:dataSource  注意这里的名字,一定不能乱起 -->
		<property name="dataSource" ref="dataSource"></property>
			<!-- mybatis配置文件 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
	</bean>
	
	<!-- Mapper接口所在包名,Spring会自动查找其下的类并生成接口的实现类 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="com.nueo.mapper"></property>
		<!--sqlSessionFactory 指定SqlSessionFactoryBean 对象 -->
		<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"></property>
	</bean>
	
	<!--配置事务处理类 ,配置了事务处理就不需要在service实现层管自己去管理事务了,但是要注意增删改的方法名 -->
	<bean id="tm"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<!-- 这里会引用上面的数据源 -->
		<property name="dataSource" ref="dataSource"></property>
	</bean>
	<!-- 配置事务通知属性 -->  
    <tx:advice id="txAdvice"  transaction-manager="tm">  
        <!-- 
        	定义事务传播属性 这里的事务就限定了你在实现类中起名字的规定,需要事务的
        	增删改以update、add、delete开头
         -->  
        <tx:attributes>  
        <!--以update开头的方法名会执行spring管理的事务-->
            <tx:method name="update*" propagation="REQUIRED" />  
            <tx:method name="add*" propagation="REQUIRED" />  
            <tx:method name="delete*" propagation="REQUIRED" />  
            <tx:method name="*" propagation="REQUIRED" read-only="true" />  
        </tx:attributes>  
    </tx:advice>
	
	<!-- 配置事务切面 -->  
    <aop:config>  
        <aop:pointcut id="mycut"  
            expression="execution(* com.nueo.service.impl.*.*(..))" />  
        <aop:advisor advice-ref="txAdvice" pointcut-ref="mycut" />  
    </aop:config>
	
	<!-- 扫描包中的注解,实现依赖注入 -->
	<context:component-scan base-package="com.nueo.controller,com.nueo.service.impl"></context:component-scan>
	<!-- 开启注解功能 -->
	<mvc:annotation-driven />
	<!-- 开启静态资源功能 -->
	<mvc:resources location="/js/" mapping="/js/**"/>
	<mvc:resources location="/img/" mapping="/img/**"/>
	
	</beans>

八、各层代码的实现:
1、实体类pojo:
Person

public class Person implements Serializable {
	private int pid;
	private String pname;
//	年龄
	private int page;
	
	public int getPid() {
		return pid;
	}
	public void setPid(int pid) {
		this.pid = pid;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	public Person() {
	}
	public Person(int pid, String pname, int page) {
		super();
		this.pid = pid;
		this.pname = pname;
		this.page = page;
	}
	@Override
	public String toString() {
		return "Person [pid=" + pid + ", pname=" + pname + ", page=" + page
				+ "]";
	}
}

PageBean.java

/**
 * 分页Model类
 * @author 
 *
 */
public class PageBean {
	/**
	 * 总记录数
	 */
	private int total;
	/**
	 * 总页数
	 */
	private int totalPage;
	private int page; // 第几页
	private int pageSize; // 每页记录数
	private int start;  // 起始页
	
	
	public int getTotal() {
		return total;
	}
	public void setTotal(int total) {
		this.total = total;
	}
//	计算总页数
	public int getTotalPage() {
		return total%pageSize==0?total/pageSize:(total/pageSize+1);
	}
	public void setTotalPage(int totalPage) {
		this.totalPage = totalPage;
	}
	public PageBean(int page, int pageSize) {
		super();
		this.page = page;
		this.pageSize = pageSize;
	}
	
	public int getPage() {
		return page;
	}
	public void setPage(int page) {
		this.page = page;
	}
	
	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getStart() {
		return (page-1)*pageSize;
	}
	@Override
	public String toString() {
		return "PageBean [total=" + total + ", totalPage=" + totalPage
				+ ", page=" + page + ", pageSize=" + pageSize + ", start="
				+ start + "]";
	}
}

2、mapper:
接口:PersonMapper.java

public interface PersonMapper {
	public List<Person> getAll();
	public void add(Person person);
	public void delete(int pid);
	public Person getById(int pid);
	public void update(Person person);
		//分页
	public List<Person> findPage(Map<String,Object> map);
	public Long getTotal();
}

映射mapper:PersonMapper.xml

<mapper namespace="com.nueo.mapper.PersonMapper">
	
	<select id="getAll" resultType="person">
		select * from person
	</select>
	<insert id="add" parameterType="person" useGeneratedKeys="true">
		insert into person(pname,page) values(#{pname},#{page})

	</insert>
	<delete id="delete" parameterType="int">
		delete from person where pid=#{pid}
	</delete>
	<select id="getById" resultType="person" parameterType="int">
		select * from person where pid=#{pid}
	</select>
	<update id="update" parameterType="person">
		update person set pname=#{pname}, page=#{page} where pid=#{pid}
	</update>
	<select id="getTotal" resultType="Long">
		select count(*) from person
	</select>
		<select id="findPage" parameterType="Map" resultType="person">
		select * from person limit #{start},#{size}
	</select>

	<select id="getTotal" resultType="Long">
		select count(*) from person
	</select>
</mapper> 

3、service层:
接口:PersonService.java

public interface PersonService {
	public List<Person> getAll();
	public void add(Person person);
	public void delete(int pid);
	public Person getById(int pid);
	public void update(Person person);
	public List<Person> findPage(Map<String,Object> map);
	
	public Long getTotal();
}

实现类:

//将service实现交给springIOC管理
@Service(value="personServiceImpl")
public class PersonServiceImpl implements PersonService{
	
	@Resource
	private PersonMapper personMapper;
	
	@Override
	public List<Person> getAll() {
		return personMapper.getAll();
	}

	@Override
	public void add(Person person) {
		personMapper.add(person);
	}

	@Override
	public void delete(int pid) {
		personMapper.delete(pid);
	}

	@Override
	public Person getById(int pid) {
		return personMapper.getById(pid);
	}

	@Override
	public void update(Person person) {
		personMapper.update(person);
	}
		@Override
	public List<Person> findPage(Map<String, Object> map) {
		return personMapper.findPage(map);
	}

	@Override
	public Long getTotal() {
		return personMapper.getTotal();
	}

}

4、controller控制器:
PersonController.java

@Controller
public class PersonController {
	@Resource
	private PersonService personService;
		@RequestMapping("/list")
	public String list(@RequestParam(value = "page", required = false,defaultValue="1")String page,ModelMap datamap){
//		if (page == null || page.equals("")) {
//			page = "1";
//		}
		//每页显示条数
		int pagesize=2;
		PageBean pageBean = new PageBean(Integer.parseInt(page), pagesize);
//		获得数据总条数
		long total = personService.getTotal();
//		将总数set进页面对象
		pageBean.setTotal(Integer.parseInt(total + ""));
		
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("start", pageBean.getStart());
		map.put("size", pageBean.getPageSize());
		List<Person> list = personService.findPage(map);
		System.out.println("pageBean:"+pageBean);
		System.out.println("list:"+list);
		datamap.put("page", pageBean);
		datamap.put("list", list);

		return "forward:/list.jsp";
	} 
	@RequestMapping("/getall")
	public String getAll(ModelMap datamap) {
		List<Person> list = personService.getAll();
		
		datamap.put("list", list);
		//return "forward:/list.jsp";
		return "list";

	}
	
	@RequestMapping("/add")
	public String add(Person p) {
		personService.add(p);
		return "redirect:/getall";

	}
	
	@RequestMapping("/delete")
	public String delete(int pid) {
		personService.delete(pid);
		return "redirect:/getall";
	}
	
	@RequestMapping("/getbyid")
	public String getById(int pid, ModelMap map) {
		Person p = personService.getById(pid);
		map.put("person", p);
		//return "forward:/update.jsp";
		return "update";
	}
	
	@RequestMapping("/update")
	public String update(Person p) {
		personService.update(p);
		return "redirect:/getall";
	}
}

九、前端页面的:
1、index.jsp

 <body>
  <%response.sendRedirect("getall"); %>
  </body>

2、list.jsp

<body>
	<a href="add.jsp">添加</a>
	<table>
		<tr>
			<td>编号</td>
			<td>姓名</td>
			<td>年龄</td>
			<td>操作</td>
		</tr>
		<c:forEach items="${list}" var="person">
			<tr>
				<td>${person.pid }</td>
				<td>${person.pname }</td>
				<td>${person.page }</td>
				<td><a href="delete?pid=${person.pid }">删除</a> <a
					href="getbyid?pid=${person.pid }">修改</a></td>
			</tr>
		</c:forEach>
	</table>
	<p>
		总页数:${page.totalPage } 当前页:${page.page }
		<c:if test="${page.page>1}">
			<a href="list?page=1">首页</a>
			<a href="list?page=${page.page-1 }">上一页</a>
		</c:if>
		<c:if test="${page.page<page.totalPage}">
			<a href="list?page=${page.page+1 }">下一页</a>
			<a href="list?page=${page.totalPage }">末页</a>
		</c:if>
	</p>
</body>

3、add.jsp

  <body>
  <form action="add" method="post">
  姓名:<input type="text" name="pname"><br>
 年龄:<input type="text" name="page"><br>
 <input type="submit" value="提交">
  
  </form>
  </body>

4、update.jsp

 <body>
  <form action="update" method="post">
  姓名:<input type="text" name="pname" value="${person.pname }"><br>
 年龄:<input type="text" name="page" value="${person.page }"><br>
 <input type="hidden" name="pid" value="${person.pid }">
 <input type="submit" value="修改">
  </form>
  </body>
  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值