SSM反向生成和批量删除,文件上传

SSM框架小Demo,使用反向生成工具

上传图片,批量删除,反向生成工具的使用。

一、数据库用的mysql,建表,添加测试数据

在这里插入图片描述

二、导入反向生成的工具文件夹,把配置文件修改一下,主要是数据库名,账号和密码,表名。还是很简单的,
修改好之后直接运行就可以自动生成pojo和dao还有mapper映射文件

在这里插入图片描述
反向生成的配置文件信息:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	<context id="testTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/stumanager" userId="root"
			password="hx123">
		</jdbcConnection>
		<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
			connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" 
			userId="yycg"
			password="yycg">
		</jdbcConnection> -->

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="pojo"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="dao.mapper" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="dao" 
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		<!-- 指定数据库表 -->
		<table tableName="user">
			<!-- 是否启用跟字段名一样的pojo属性名 -->
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="role">
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="post">
			<property name="useActualColumnNames" value="true"/>
		</table>
		<table tableName="classtab">
			<property name="useActualColumnNames" value="true"/>
		</table>
	</context>
</generatorConfiguration>

三、把生成之后的dao、mapper和pojo拷贝到工程中,这里我新建了一个maven的web工程
导入相关的依赖

四、引入spring和springmvc还有mybatis的配置文件

(1)这是spring的配置文件,applicationContext.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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	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/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.2.xsd 
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
                         
	<!-- 加载配置文件 -->
	<context:property-placeholder location="classpath:db.properties"/>
	<!-- Druid数据库连接池 -->
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
		destroy-method="close">
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="maxActive" value="10" />
		<property name="minIdle" value="5" />
	</bean>
	
	
	<!--整合mybatis-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		<!-- 自动扫描mapping.xml文件 -->
		<property name="mapperLocations" value="classpath:dao/mapper/*.xml"/>
		<!-- 自动扫描pojo包并取别名 -->
		<property name="typeAliasesPackage" value="pojo"/>
		<!-- 启用分页插件 -->
		<property name="plugins">
			<array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <value>
                        <!--这个为了控制分页的上下限,不出现负数页和超过最大页-->
                            reasonable=true
                        </value>
                    </property>
                </bean>
            </array>
		</property>
	</bean>
	
	<!--spring扫描mapper接口-->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="dao"/>
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
	</bean>
	
	<!--扫描service-->
	<context:component-scan base-package="service"/>
	
	
	
	 <!--配置事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--声明式事务注解方式-->
    <tx:annotation-driven transaction-manager="txManager"/>
			
</beans>

(2)springMVC的配置文件 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:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

	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/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.2.xsd 
		http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
		http://www.springframework.org/schema/tx
		http://www.springframework.org/schema/tx/spring-tx-3.2.xsd ">
	
	<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
	<context:component-scan base-package="controller" />
	
	<!--开启注解扫描器-->
	<mvc:annotation-driven/>

	
	<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- 不拦截资源文件 -->
	<mvc:resources location="/statics/" mapping="/statics/**"/>
	
	<!-- 配置MultipartResolver,用于文件上传 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="5000000"/>
		<property name="defaultEncoding" value="UTF-8"/>
	</bean>
 
</beans>

(3) 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_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name></display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!--解决全局中文乱码问题-->
  <filter>
<filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

  <!-- Spring和mybatis的配置文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
	</context-param>
	<!-- Spring监听器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- 防止Spring内存溢出监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
	</listener>
	<!-- Spring MVC servlet -->
	<servlet>
		<servlet-name>DispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:springmvc-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>DispatcherServlet</servlet-name>
		<!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
		<url-pattern>/</url-pattern>
	</servlet-mapping>
</web-app>

(4)db.properties 的数据库连接的属性文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/stumanager?characterEncoding=utf-8
jdbc.username=root
jdbc.password=hx123

(5) log4j日志属性文件 log4j.properties

log4j.rootLogger=DEBUG, Console  
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG  

*因为spring整合了mybatis,这里我没有单独使用mybatis的配置文件,而是整合在了spring的配置文件中

这样框架搭建完成,可以开始敲代码了。

在这里插入图片描述

三、先运行试试看,会不会报异常。这里我使用的是插件启动的tomcat7

在这里插入图片描述

还好,运行没有报异常。成功进入登录页面。

UserServiceImpl中的分页工具,这里参数中的PageSearch 对象是把查询的条件封装到了对象中

@Service
@Transactional
public class UserServiceImpl implements UserService {
	@Autowired
	private UserMapper userMapper;
	
	public PageInfo<User> getUserListByConditions(Integer pageIndex, PageSearch pageSearch) {
		//开始分页,当前第pageIndex页,一页显示5条
		PageHelper.startPage(pageIndex, 5);
		UserExample example=new UserExample();
		Criteria criteria = example.createCriteria();
		if(StringUtils.isNotBlank(pageSearch.getUserName())){
			criteria.andUserNameLike("%"+pageSearch.getUserName()+"%");
		}
		if(pageSearch.getClassId()!=null && pageSearch.getClassId()!=-1){
			criteria.andClassIdEqualTo(pageSearch.getClassId());
		}
		if(pageSearch.getPostId()!=null && pageSearch.getPostId()!=-1){
			criteria.andPostIdEqualTo(pageSearch.getPostId());
		}
		if(pageSearch.getRoleId()!=null && pageSearch.getRoleId()!=-1){
			criteria.andRoleIdEqualTo(pageSearch.getRoleId());
		}
		List<User> list = userMapper.selectByExample(example);
		PageInfo<User> info=new PageInfo<User>(list,4);
		return info;
	}

全选和反选,批量删除

$(function(){
		$("#ckbAll").click(function(){
			var status=$(this).prop("checked");
			$("[name='ckb']").each(function(index,item){
				$(item).prop("checked",status);
			})
		});
		
		$("[name='ckb']").click(function(){
			var status=true;
			$("[name='ckb']").each(function(index,item){
				if(!$(item).prop("checked")){
					status=false;
					return;
				}
			});
			$("#ckbAll").prop("checked",status);
		})
function deletSelect(){
		if(!confirm('确定要删除选中的信息吗?')){
			return;
		}
		var ids=new Array();
		$("[name='ckb']:checked").each(function(index,item){
			ids.push($(item).val());
		});
		if(ids!=null&&ids.length>0){
			$.ajax({
				url:'${pageContext.request.contextPath}/ajaxDelete',
				data:{'ids':ids},
				type:'post',
				dataType:'text',
				success:function(res){
					alert(res);
					location.href='${pageContext.request.contextPath}/index';
				},
				error:function(){
					alert('出错了~');
				}
			})
		}else{
			alert('请选择要删除的信息~');
		}
	}

后台controller

@RequestMapping(value="/ajaxDelete",method=RequestMethod.POST,produces="text/html;charset=UTF-8")
	@ResponseBody
	public String deleteSelected(@RequestParam("ids[]") Integer[] ids){
		Integer count=userService.deleteSelected(ids);
		if(count>0){
			return "成功删除"+count+"条记录";
		}else{
			return "删除失败!";
		}
	}

后台service

public Integer deleteSelected(Integer[] ids) {
		List<Integer> list=Arrays.asList(ids);
		UserExample example=new UserExample();
		Criteria criteria = example.createCriteria();
		criteria.andMidIn(list);
		Integer count=userMapper.deleteByExample(example);
		return count;
	}

图片上传:(后台)

@RequestMapping(value="/uploadImage",method=RequestMethod.POST)
	@ResponseBody
	public String uploadImg(@RequestParam(value="pic",required=false) MultipartFile file,
							HttpSession session){
		JSONObject jsonObject=new JSONObject();
		String oldName = file.getOriginalFilename();
		String suffix = FilenameUtils.getExtension(oldName);
		int fileSize=500000;
		if(file.getSize()>fileSize){
			jsonObject.put("error", "error");
		}else{
			if(suffix.equalsIgnoreCase("jpg")||
					suffix.equalsIgnoreCase("jpeg")||
					suffix.equalsIgnoreCase("png")||
					suffix.equalsIgnoreCase("pneg")){
				String finalName=System.currentTimeMillis()+UUID.randomUUID().toString()+"."+suffix;
				File finalFile=new File("f:/images",finalName);
				if(!finalFile.exists()){
					finalFile.mkdirs();
				}
				try {
					file.transferTo(finalFile);
				} catch (Exception e) {
					jsonObject.put("error", "error");
				} 
				jsonObject.put("url", finalName);
			}
		}
		return jsonObject.toJSONString();
	}

图片上传(前台):此处用到了jquery的一个表单异步上传文件的插件

function upload(){
	var $form={
			type:'post',
			url:'${pageContext.request.contextPath}/college/uploadImage',
			dataType:'JSON',
			success:function(data){
				//目的是把data里的url属性赋给img标签里的src属性值
				$("#img").attr("src",data.url);
				$("#cpic").val(data.url);
			},
			error:function(){
				alert("出错了!");
			}
	};
	//是基于form表单上传提交,
	$("#addForm").ajaxSubmit($form);
}	
<td>
					<input type="file" name="pic" id="pic" onchange="upload()"/>
					<img src="" id="img" alt="预览图片" style="width:100px;height:100px"/>
				</td>
				<input type="hidden" name="cpic" id="cpic"/>

写的不是很完整,时间比较晚了,大家勉强看看吧 - -

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章