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"/>

寫的不是很完整,時間比較晚了,大家勉強看看吧 - -

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