SSM反向生成和批量刪除,檔案上傳
阿新 • • 發佈:2018-12-11
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"/>
寫的不是很完整,時間比較晚了,大家勉強看看吧 - -