public static void main(String[] arg) throws Exception { List<String> warnings = new ArrayList<String>(); boolean overwrite = true; File configFile = new File("mbg.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); }
Spring整合SpringMVC,须要涉及到配置文件web.xml、springmvc.xml、applicationconfig.xml配置web.xml,在web.xml中配置前端掌握、处理中文乱码过滤器等。详细如下
<!-- 配置处理中文乱码过滤器,一定要放在所有过滤器之前--> <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>forceRequestEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>forceResponseEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping> <!-- 配置支持直接put要求过滤器--> <filter> <filter-name>httpPutFormContentFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> <filter-mapping> <filter-name>httpPutFormContentFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping> <!-- 配置加载spring配置文件监听器--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationconfig.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><!-- 配置前端掌握器--> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 加载springmvc的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
配置springmvc.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:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- springMVC扫描包,关闭默认规则--> <context:component-scan base-package="com.pankx" > <!-- 配置只扫描掌握器的包--> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan> <!-- 配置视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <!--将springmvc不能处理的要求交结tomcat--> <mvc:default-servlet-handler/> <!--开启mvc表明支持,能支持springmvc的更高等的功能,JSR303校验,ajax等,映射动态要求--> <mvc:annotation-driven/></beans>
Spring整合MyBatis只需Spring的配置文件applicationconfig.xml中完成MyBatis的干系配置,配置数据库连接池、SqSessionFactory工厂Bean,利用MapperScannerConfigurer来配置Dao接口所在的包。详细配置如下
<!-- 扫描包设置不扫描Controller--> <context:component-scan base-package="com.pankx"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan><!-- 引入外部properties文件--> <context:property-placeholder location="classpath:mysqlproperties.properties"/><!-- 配置数据源,并利用c3p0连接池--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driverClass}"/> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--Spring整合Mybatis--><!-- 配置sqlSession工厂--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--配置分页--> <property name="plugins"> <array> <bean class="com.github.pagehelper.PageInterceptor"/> </array> </property><!-- 配置数据源--> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath:mappers/.xml"/> </bean><!-- 配置事务管理--><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/></bean><!-- 配置关照--> <tx:advice id="transactionInterceptor" transaction-manager="transactionManager"> <tx:attributes> <tx:method name=""/> <tx:method name="get" read-only="true"/> </tx:attributes> </tx:advice><!-- 配置aop增强--> <aop:config> <aop:advisor advice-ref="transactionInterceptor" pointcut="execution( com.pankx.service..(..))"/> </aop:config><!-- 配置扫描器,将mybatis的接口实现加入到ioc容器--> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.pankx.dao"/> </bean>
4.测试ssm环境创建service类文件TestService.java、controller文件TestController.java、测试要求页面testssm.jsp与成功跳转的页面testsuccess.jsp。如果通过testssm.jsp页面提交的要求成功跳转到testsuccess.jsp页面并显示从数据库查询到的值,则会表示环境搭建成功。文件代码内容可以查看源码。在此不再给出。分页实现本例利用pagehelper对查询到的数据进行分布显示引入pagehelper所依赖的jar包,由于刚开始已经引入项目所需jar,故不需再重复引入在applicationconfig.xml文件中的sqlSessionFactory的bean中加载分页配置利用PageHelper的startPage(pageNum,pageSize)方法进行分页,pageNum为第几页面开始,pageSize为一页有多少条记录利用PageInfo封装查询返回的结果,并设置连续显示页面的导航页数利用前端框架bootstrap搭建用户列表页面在webapp目录下创建static目录用于存放项目的静态资源,把下载好的bootstrap框架代码拷贝到static下在static目录下创建js目录,把Jquery也拷贝到js目录中在index.jsp中引入bootstrap的干系资源与jquery编写index.jsp显示用户列表的前审察干代码,紧张代码如下
<div class="container"> <div class="row"> <div class="col-sm-12"><h1>用户列表</h1></div> </div> <!--右侧按钮--> <div class="row"> <div class="col-sm-2"></div> <div class="col-sm-offset-10"> <button class="btn btn-primary">新增</button> <button class="btn btn-danger">删除</button> </div> </div> <!--用户列表信息--> <div class="row"> <div class="col-sm-12"> <table class="table table-hover" id="user_table"> <thead> <th>用户ID</th> <th>用户名</th> <th>姓别</th> <th>邮箱</th> <th>用户类型</th> <th>操作</th> </thead> <tbody> <td>1</td> <td>test1</td> <td>男</td> <td>test@qq.com</td> <td>普通用户</td> <td> <button class="btn btn-primary">编辑</button> <button class="btn btn-danger">删除</button> </td> </tbody> </table> </div> </div> <!--分页--> <div class="row"> <!--分页信息--> <div class="col-sm-6">当前第1页,总1000页,总10000记录</div> <!--分页导航条--> <div class="col-sm-6"> <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </div> </div> </div>
这个列表页面的数据为写去世的,下面利用ajax发要求到做事器获取用户列表数据动态显示到列表页。实现用户列表页面数据显示编写掌握器类的查询要求处理方法,紧张实当代码如下:
/ 查询所有用户信息,返回以json格式返回 @param pn @return / @RequestMapping(value = "/user",method = GET) @ResponseBody public Msg getusers(@RequestParam(value = "pn",defaultValue = "1") int pn){ //开始分页每页记录条数为5 PageHelper.startPage(pn,5); //查询所有用户记录 List<User> list = userService.getUsers(); //封装查询结果 PageInfo pageInfo = new PageInfo(list,5); Msg msg = Msg.success().add("pageinfo",pageInfo); return msg; }
在用户列表页面直接发送ajax要求获取到用户信息并显示,详细代码如下
<div class="container"> <div class="row"> <div class="col-sm-12"><h1>用户列表</h1></div> </div> <!--右侧按钮--> <div class="row"> <div class="col-sm-2"></div> <div class="col-sm-offset-10"> <button class="btn btn-primary">新增</button> <button class="btn btn-danger">删除</button> </div> </div> <!--用户列表信息--> <div class="row"> <div class="col-sm-12"> <table class="table table-hover" id="user_table"> <thead> <th>用户ID</th> <th>用户名</th> <th>姓别</th> <th>邮箱</th> <th>用户类型</th> <th>操作</th> </thead> <tbody><!--此处显示动态处理的用户信息--></tbody> </table> </div> </div> <!--分页--> <div class="row"> <!--分页信息--> <div class="col-sm-6" id="page_msg"></div> <!--分页导航条--> <div class="col-sm-6"> <nav aria-label="Page navigation"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav> </div> </div> </div> <script type="text/javascript"> //页面加载完成发送ajax要求到做事器获取数据 $(function(){ get_emps(1); }); //发送ajax要求方法 function get_emps (pn){ $.ajax({ url:"${APP_PATH}/user", data:"pn="+ pn, type:"GET", success:function(data){ console.log(data); //解析数据到table user_table(data); //处理显示分布的信息 page_msg(data); } }); } //解析数据到table function user_table(data){ //清空tbody内容再添加 $("#user_table tbody").empty(); var users = data.reldata.pageinfo.list; console.log(users); //遍历返回的数据并解析显示到table $.each(users,function(index,item){ //用户id单元格 var useridTd = $("<td></td>").append(item.userId); //用户名单元格 var userNameTd = $("<td></td>").append(item.userName); //用户姓别单元格 var genderTd = $("<td></td>").append(item.gender=="M"?"男":"女"); //用户邮箱单元格 var emailTd = $("<td></td>").append(item.email); //用户类型单元格 var uTypeTd = $("<td></td>").append(item.uType.utypeName); //编辑按钮 var edit_btn = $("<button></button>").addClass("btn btn-primary btn-sm").append("<span></span>").addClass("glyphicon glyphicon-pencil").append("编辑"); //删除按钮 var del_btn = $("<button></button>").addClass("btn btn-danger btn-sm").append("<span></span>").addClass("glyphicon glyphicon-trash").append("删除"); var btnTd = $("<td></td>").append(edit_btn).append(" ").append(del_btn); $("<tr></tr>").append(useridTd).append(userNameTd).append(genderTd).append(emailTd).append(uTypeTd).append(btnTd).appendTo($("#user_table tbody")); }); } //处理分页信息 function page_msg(data){ var pageInfo = data.reldata.pageinfo; $("#page_msg").append("当前第"+pageInfo.pageNum+"页,总"+pageInfo.pages+"页,总"+pageInfo.total+"记录") } </script>
员工列表效果图如下
至此通过ajax发送要求获取用户信息实现的用户列表页面已经基本完成,为缩短文章篇幅,改进阅读体验,项目的分页条干系实现,新增、删除用户等功能将在后续文章中推出,请关注后续的文章。本项目的源代码已发到github仓库,建议结合源代码阅读本文,项目源码在github上搜:pkx0128/UserManagement