SpringMVC+Mybatis+mybatis-generator快速开发架构

来源:互联网 发布:mac上怎样打开pdf文件 编辑:程序博客网 时间:2024/06/05 16:41

这个是我自己搭建使用的架构,对于中小型项目使用该架构还是没有什么问题的,但是对于大型架构那么这个就不要去使用了,话不多说,直接开始架构步骤吧!


1.首先是Maven pom.xml

使用到的架包主要是spring里面的核心架包,以及mybatis的核心架包,对于数据分页我选择使用了com.github.pagehelper,它是一款mybatis插件,直接在mybaits-config.xml配置即可,这个之后后会介绍,数据源我们使用阿里的druid,权限管理则使用apache shrio。


<dependencies>    <!-- mybatis与spring集成架包 -->    <dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis-spring</artifactId>  <version>1.2.3</version></dependency><!--  mybastis架包 --><dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>3.3.0</version></dependency><!-- pringmvc 架包 --><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-web</artifactId>  <version>4.2.4.RELEASE</version></dependency><!-- mybatis分页架包 --><dependency>  <groupId>com.github.pagehelper</groupId>  <artifactId>pagehelper</artifactId>  <version>4.1.0</version></dependency><!-- net.sf.json --><dependency>  <groupId>net.sf.json-lib</groupId>  <artifactId>json-lib</artifactId>  <version>2.4</version></dependency><!-- pring webmvc --><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-webmvc</artifactId>  <version>4.2.4.RELEASE</version></dependency><!-- spring-tx --><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-tx</artifactId>  <version>4.2.4.RELEASE</version></dependency><!-- c3p0 --><dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-c3p0</artifactId>  <version>4.3.0.Beta3</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency>    <groupId>com.alibaba</groupId>    <artifactId>druid</artifactId>    <version>1.1.0</version></dependency><!-- jsp --><dependency>  <groupId>javax.servlet.jsp</groupId>  <artifactId>jsp-api</artifactId>  <version>2.2.1-b03</version></dependency><!-- servletAPI -->    <dependency>  <groupId>javax.servlet</groupId>  <artifactId>servlet-api</artifactId>  <version>3.0-alpha-1</version></dependency><!-- spring jdbc --><dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-jdbc</artifactId>  <version>4.2.4.RELEASE</version></dependency><!-- common-fileupload --><dependency>  <groupId>commons-fileupload</groupId>  <artifactId>commons-fileupload</artifactId>  <version>1.3.1</version></dependency><!-- aspectjweaver --><dependency>  <groupId>org.aspectj</groupId>  <artifactId>aspectjweaver</artifactId>  <version>1.8.7</version></dependency><!-- shiro --><dependency>  <groupId>org.apache.shiro</groupId>  <artifactId>shiro-web</artifactId>  <version>1.2.4</version></dependency><dependency>  <groupId>org.apache.shiro</groupId>  <artifactId>shiro-core</artifactId>  <version>1.2.4</version></dependency><!-- shiro-spring --><dependency>  <groupId>org.apache.shiro</groupId>  <artifactId>shiro-spring</artifactId>  <version>1.2.4</version></dependency><!-- shiro-ehcache --><dependency>  <groupId>org.apache.shiro</groupId>  <artifactId>shiro-ehcache</artifactId>  <version>1.2.4</version></dependency><!-- Oracle驱动包 --><dependency>    <groupId>com.oracle</groupId>    <artifactId>ojdbc6</artifactId>    <version>1.0</version></dependency><dependency>    <groupId>org.mybatis.generator</groupId>    <artifactId>mybatis-generator-core</artifactId>    <version>1.3.2</version></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency>    <groupId>log4j</groupId>    <artifactId>log4j</artifactId>    <version>1.2.17</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency>    <groupId>org.apache.poi</groupId>    <artifactId>poi</artifactId>    <version>3.15</version></dependency>

2.spring配置文件

在bean.xml中主要是dataSource等实例进行配置,在加上 service与dao层的对象实例,其中我将service与dao层进行文件分离而已,这样层次清洗,代码如下!

<?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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-4.2.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-4.2.xsd         http://www.springframework.org/schema/aop         http://www.springframework.org/schema/aop/spring-aop-4.2.xsd         http://www.springframework.org/schema/tx          http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">                     <context:property-placeholder location="classpath:jdbc.properties"/>        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">               <property name="url" value="${jdbc.url}" />      <property name="username" value="${jdbc.username}" />      <property name="password" value="${jdbc.password}" />              <!-- 配置初始化大小、最小、最大 -->      <property name="initialSize" value="20" />      <property name="minIdle" value="10" />       <property name="maxActive" value="100" />         <!-- 配置获取连接等待超时的时间 -->      <property name="maxWait" value="60000" />         <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->      <property name="timeBetweenEvictionRunsMillis" value="60000" />         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->      <property name="minEvictableIdleTimeMillis" value="300000" />          <property name="validationQuery" value="SELECT 'x'" />      <property name="testWhileIdle" value="true" />      <property name="testOnBorrow" value="false" />      <property name="testOnReturn" value="false" />         <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->      <property name="poolPreparedStatements" value="true" />      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />         <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->      <property name="filters" value="stat" />            </bean>        <bean id="druid-stat-interceptor"        class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor">    </bean>    <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"        scope="prototype">        <property name="patterns">            <list>                <value>com.goldenbridge.official.service.*</value>                <value>com.goldenbridge.official.dao.*</value>            </list>        </property>    </bean>    <aop:config>        <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut" />    </aop:config>    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <!-- 声明式事务 -->    <tx:annotation-driven transaction-manager="transactionManager"        proxy-target-class="true" />    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" /><property name="configLocation" value="classpath:mybatis-config.xml"></property>      </bean>        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">             <constructor-arg index="0" ref="sqlSessionFactory" />       </bean><!-- 打开Spring的Annotation支持 --><context:annotation-config /><import resource="classpath:goldenbridge-dao.xml"/><import resource="classpath:goldenbridge-service.xml"/><import resource="classpath:goldenbridge-cxf.xml"/>    <!--<import resource="classpath:goldenbridge-shiro.xml"/> <import resource="classpath:goldenbridge-cxf.xml"/> --></beans>

3.myabits-generator配置

mybatis-generator配置文件如下

主要配置数据源的地址,以及生成的JavaBean、Mapper接口、以及Mapper.xml文件位置所在路径


<?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="oracleTables"><commentGenerator><property name="suppressDate" value="true" /><property name="suppressAllComments" value="true" /><property name="mergeable" value="true"></property></commentGenerator><jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver"connectionURL="jdbc:oracle:thin:@192.168.2.254:1521:orcl" userId="certific"password="certific"></jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><javaModelGenerator targetPackage="com.goldenbridge.certificicsystem.model"targetProject="src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"><property name="enableSubPackages" value="true" /></sqlMapGenerator><javaClientGenerator type="XMLMAPPER"targetPackage="com.goldenbridge.certificicsystem.mapper"targetProject="src/main/java"><property name="enableSubPackages" value="true" /></javaClientGenerator><table tableName="NEWS_INFO" domainObjectName="NewsInfo"></table></context></generatorConfiguration>


myabits-generaotr运行主要依赖maven的org.mybatis.generator插件,pom.xml的插件配置代码如下!

<plugins>    <plugin>        <groupId>org.mybatis.generator</groupId>        <artifactId>mybatis-generator-maven-plugin</artifactId>        <version>1.3.2</version>         <configuration>            <verbose>true</verbose>            <overwrite>true</overwrite>        </configuration>        <dependencies>        <dependency>    <groupId>org.mybatis.generator</groupId>    <artifactId>mybatis-generator-core</artifactId>    <version>1.3.2</version></dependency><dependency>    <groupId>com.oracle</groupId>    <artifactId>classes12</artifactId>    <version>10.2.0.2.0</version></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency>    <groupId>log4j</groupId>    <artifactId>log4j</artifactId>    <version>1.2.17</version></dependency>  </dependencies>    </plugin>    <plugin>      <groupId>org.apache.maven.plugins</groupId>      <artifactId>maven-compiler-plugin</artifactId>      <configuration>        <source>1.7</source>        <target>1.7</target>        <encoding>UTF-8</encoding>      </configuration>    </plugin>    </plugins>

运行方式则为:mybatis-generate:generator

4. mybatis配置

这个没什么好说的,主要是将mybatis-generator生成的Mapper.xml导入进去,以及配置PageHelper分页信息,代码如下

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <settings>                <setting name="logImpl" value="STDOUT_LOGGING" />    </settings><plugins> <!-- com.github.pagehelper为PageHelper类所在包名 -->    <plugin interceptor="com.github.pagehelper.PageHelper">        <property name="dialect" value="oracle"/>        <!-- 该参数默认为false -->        <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->        <!-- 和startPage中的pageNum效果一样-->        <property name="offsetAsPageNum" value="true"/>        <!-- 该参数默认为false -->        <!-- 设置为true时,使用RowBounds分页会进行count查询 -->        <property name="rowBoundsWithCount" value="true"/>        <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->        <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->        <property name="pageSizeZero" value="true"/>        <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->        <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->        <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->        <property name="reasonable" value="true"/>        <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->        <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->        <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 -->        <property name="params" value="pageNum=start;pageSize=limit;pageSizeZero=zero;reasonable=heli;count=contsql"/>    </plugin></plugins><!-- 实体接口映射资源 --><!--说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml--><mappers><mapper resource="mapper/NewsInfoMapper.xml"/></mappers></configuration>  

5.SpringMVC配置

springmvc配置不多说,文件如下

<?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: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-4.0.xsd          http://www.springframework.org/schema/context          http://www.springframework.org/schema/context/spring-context-4.0.xsd          http://www.springframework.org/schema/mvc          http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">       <bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"></bean> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">      <property name="messageConverters">          <list>              <bean class="com.goldenbridge.certificicsystem.utils.UTF8StringHttpMessageConverter" />          </list>      </property>     <property name="webBindingInitializer"><beanclass="com.goldenbridge.certificicsystem.utils.MyWebBindingInitializer" /></property> </bean> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="102857600"></property> </bean> <context:component-scan base-package="com.goldenbridge.certificicsystem.controller" /></beans>

web.xml配置如下

其中SimpleCORSFilter主要是为了允许跨域访问而配置的

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>  <welcome-file-list>      <welcome-file>pages/index.html</welcome-file>  </welcome-file-list>  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <!-- Spring 的监听器可以通过这个上下文参数来获取beans.xml的位置 -->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:beans.xml</param-value>  </context-param>      <servlet>  <servlet-name>certificicsystem</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  </servlet>    <servlet-mapping>  <servlet-name>certificicsystem</servlet-name>  <url-pattern>/</url-pattern>  </servlet-mapping>    <filter>      <filter-name>encodingFilter</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>encodingFilter</filter-name>      <url-pattern>/*</url-pattern>    </filter-mapping>    <filter>   <filter-name>DruidWebStatFilter</filter-name>          <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>        </filter>        <filter-mapping>          <filter-name>DruidWebStatFilter</filter-name>          <url-pattern>/*</url-pattern>        </filter-mapping>       <servlet>          <servlet-name>DruidStatView</servlet-name>          <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>      </servlet>      <servlet-mapping>          <servlet-name>DruidStatView</servlet-name>          <url-pattern>/druid/*</url-pattern>      </servlet-mapping>            <filter>       <filter-name>SimpleCORSFilter</filter-name>       <filter-class>com.goldenbridge.certificicsystem.utils.SimpleCORSFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>SimpleCORSFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    </web-app>


以上核心配置文件就到这里结束了


6.底层核心代码

为了是开发更加的简单,不用再去为每个Bean对象去写一套底层的crud的dao层代码,我通过泛型与反射技术编写了一套通用的底层代码BaseDao,主要封装了crud等方法,之后通过类继承的方式集成BaseDao则就可以自动实现,代码如下

BaseDao.java

package com.goldenbridge.certificicsystem.dao;import java.util.List;import java.util.Map;import org.apache.ibatis.session.SqlSession;import com.goldenbridge.certificicsystem.model.PageBean;public interface BaseDao<T,S> {PageBean findByExample(PageBean<T> pagebean,S arg0);T getBeanById(String id);T getByName(String name);T getByExample(S arg0);void insert(T t);void update(T t);void delete(String id);void deleteByExample(S s);List<T> findAll();List<T> findListByExample(S s);SqlSession getSession();int count(S s);String getSequencesByName(String name);Map<String, Object> executeSql(String sql,String value[]);}

BaseDaoImpl.java

package com.goldenbridge.certificicsystem.dao.impl;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.ParameterizedType;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.annotation.Resource;import org.apache.commons.lang.StringUtils;import org.apache.ibatis.session.SqlSession;import org.mybatis.spring.SqlSessionTemplate;import org.springframework.beans.factory.annotation.BeanFactoryAnnotationUtils;import com.github.pagehelper.PageHelper;import com.goldenbridge.certificicsystem.dao.BaseDao;import com.goldenbridge.certificicsystem.model.PageBean;public class BaseDaoImpl<T,S> extends BeanFactoryAnnotationUtils implements BaseDao<T, S>{@Resource SqlSessionTemplate sqlSession;protected Class clazz_t,clazz_s;protected Object object;protected T t;protected S s;protected Method method;protected Class mapperclass;public BaseDaoImpl(){ParameterizedType pt = null;try {pt =  (ParameterizedType) this.getClass().getGenericSuperclass();} catch (Exception e1) {pt =  (ParameterizedType) this.getClass().getSuperclass().getGenericSuperclass();}clazz_t = (Class) pt.getActualTypeArguments()[0];clazz_s = (Class) pt.getActualTypeArguments()[1];//String mapperClassName = clazz_t.getName()+"Mapper";String classname = clazz_t.getName();classname = classname.substring(0,classname.lastIndexOf("."));classname = classname.substring(0,classname.lastIndexOf(".")+1);String mapperClassName = classname +"mapper."+ clazz_t.getSimpleName() + "Mapper";try {mapperclass = Class.forName(mapperClassName);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public PageBean<T> findByExample(PageBean<T> pagebean,S arg0){//根据条件查询集合分页List<T> list = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByExample", clazz_s);PageHelper.startPage(pagebean.getPagenow(), pagebean.getPagesize());list = (List<T>) method.invoke(object, arg0);pagebean.setList(list);method = object.getClass().getDeclaredMethod("countByExample", clazz_s);Integer count = (Integer) method.invoke(object, arg0);pagebean.setCount(count);object = null;} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return pagebean;}public T getBeanById(String id){//通过id查询对象T t = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByPrimaryKey", id.getClass());t = (T) method.invoke(object, id);object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return t;}public int count(S s){//插入方法int resutl = 0;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("countByExample", s.getClass()); //通过反射获取方法对象resutl = (int) method.invoke(object, s); //执行方法object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return resutl;}public void insert(T t){//插入方法try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("insert", t.getClass()); //通过反射获取方法对象method.invoke(object, t); //执行方法object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}}public void update(T t){try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("updateByPrimaryKeySelective", clazz_t);//getDeclaredMethod()获取类的方法实例method.invoke(object, t);//invoke执行这个方法object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}}public void delete(String id){try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("deleteByPrimaryKey", id.getClass());method.invoke(object, id);object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}}/*public void setBeanFactory(BeanFactory arg0) throws BeansException { //获取spring容器this.beanFactory = arg0;ParameterizedType pt =  (ParameterizedType) this.getClass().getSuperclass().getGenericSuperclass();clazz_t = (Class) pt.getActualTypeArguments()[0];clazz_s = (Class) pt.getActualTypeArguments()[1];System.out.println(clazz_t+":"+clazz_s);try {t = (T) clazz_t.newInstance();s = (S) clazz_s.newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}String className = clazz_t.getSimpleName();String indexstart = className.substring(0, 1);className = indexstart.toLowerCase()+className.substring(1);object = beanFactory.getBean(className+"Mapper");}*/public List<T> findAll() {List<T> list = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByExample", clazz_s);list = (List<T>) method.invoke(object,clazz_s.newInstance());object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return list;}public T getByName(String name) {T t = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByExample", clazz_s);Object S_Example = clazz_s.newInstance();Method s_method = clazz_s.getDeclaredMethod("createCriteria");Object Criteria = s_method.invoke(S_Example);Method[] methods = Criteria.getClass().getMethods();Method EqualToName = Criteria.getClass().getMethod("andNameEqualTo", String.class);EqualToName.invoke(Criteria, name);List<T> list = (List<T>) method.invoke(object, S_Example);if(list != null && list.size() > 0){t = list.get(0);}object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return t;}public List<T> findListByExample(S arg0) {//根据条件查询集合List<T> list = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByExample", clazz_s);list = (List<T>) method.invoke(object, arg0);object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return list;}@Overridepublic void deleteByExample(S s) {try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("deleteByExample", clazz_s);method.invoke(object, s);object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}}@Overridepublic T getByExample(S arg0) {T result = null;List<T> list = null;try {object = sqlSession.getMapper(mapperclass);method = object.getClass().getDeclaredMethod("selectByExample", clazz_s);list = (List<T>) method.invoke(object, arg0);if(list !=null && list.size() > 0)result = list.get(0);object = null;} catch (NoSuchMethodException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{method = null;}return result;}@Overridepublic SqlSession getSession() {return sqlSession;}@Overridepublic String getSequencesByName(String name) {String result = sqlSession.selectOne("com.goldenbridge.certificicsystem.mapper.BaseUtils.getSequencesByName", name);/*Connection conn = sqlSession.getConnection();PreparedStatement ps = null;ResultSet rs = null;String sql = "select "+name+".NEXTVAL FROM DUAL";try {ps = conn.prepareStatement(sql);rs = ps.executeQuery();if(rs.next()){result = rs.getString("NEXTVAL");}} catch (SQLException e) {e.printStackTrace();}finally{try {if(rs != null){rs.close();rs = null;}if(ps != null){ps.close();ps = null;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}*/return result;}@Overridepublic Map<String, Object> executeSql(String sql,String values[]){Map<String, Object> result=new HashMap<String, Object>();Connection conn = sqlSession.getConnection();PreparedStatement ps = null;ResultSet rs = null;try {ps = conn.prepareStatement(sql);rs = ps.executeQuery();if(rs.next()){for(String value:values){if(StringUtils.isNotBlank(rs.getString(value.toUpperCase()))){result.put(value, rs.getString(value.toUpperCase()));}}}} catch (SQLException e) {e.printStackTrace();}finally{try {if(rs != null){rs.close();rs = null;}if(ps != null){ps.close();ps = null;}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return result;}}

如果需要创建Bean的Dao层代码,则只需要集成BaseDao就行了,里面的泛型对象文JavaBean与JavaBeanExample,这两个对象都是mybatis-generator生成的,不用手动创建,代码如下!

Dao层

NewsInfoDao.java

package com.goldenbridge.certificicsystem.dao;import com.goldenbridge.certificicsystem.model.NewsInfo;import com.goldenbridge.certificicsystem.model.NewsInfoExample;public interface NewsInfoDao extends BaseDao<NewsInfo, NewsInfoExample>{}
NewsInfoDaoImpl.java

package com.goldenbridge.certificicsystem.dao.impl;import com.goldenbridge.certificicsystem.dao.NewsInfoDao;import com.goldenbridge.certificicsystem.model.NewsInfo;import com.goldenbridge.certificicsystem.model.NewsInfoExample;public class NewsInfoDaoImpl extends BaseDaoImpl<NewsInfo, NewsInfoExample> implements NewsInfoDao{}

Service层

在Service层一样,这里只需要基层Dao层就行了,代码就不粘贴了!


Controller层

该层与平时使用SpringMVC一样没什么其他区别,代码类型如下!


package com.goldenbridge.certificicsystem.controller;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.goldenbridge.certificicsystem.model.CgbRole;import com.goldenbridge.certificicsystem.model.CgbRoleExample;import com.goldenbridge.certificicsystem.model.CgbUser;import com.goldenbridge.certificicsystem.model.PageBean;import com.goldenbridge.certificicsystem.service.IAuthorityService;import com.goldenbridge.certificicsystem.service.ICgbRoleService;import com.goldenbridge.certificicsystem.utils.JSONTools;import net.sf.json.JSONArray;import net.sf.json.JSONObject;@Controller@RequestMapping(value="/role")public class RoleController {@Resource IAuthorityService authorityService;@Resource ICgbRoleService cgbRoleService;@RequestMapping(value="/menulist")public @ResponseBody String getMenuList() {JSONArray object = cgbRoleService.getAuthorityList(null);return object.toString();}/** * @param sysRole * @param request * @return */@RequestMapping(value="/add",method=RequestMethod.POST)public @ResponseBody String add(@ModelAttribute CgbRole sysRole,HttpServletRequest request){try {CgbRoleExample cgbRoleExample = new CgbRoleExample();cgbRoleExample.createCriteria().andRolenameEqualTo(sysRole.getRolename());CgbRole cgbRole=cgbRoleService.getByExample(cgbRoleExample);if(cgbRole !=null ){return JSONTools.formatJSONObjectToString(0, "角色名称项目", null);}cgbRoleService.addRole(sysRole, request);return JSONTools.formatJSONObjectToString(1, "操作成功!", null);} catch (Exception e) {e.printStackTrace();return JSONTools.formatJSONObjectToString(0, "操作异常", null);}}@RequestMapping(value="/search",method=RequestMethod.POST)public @ResponseBody String Search(int pagenow,HttpSession session){try {PageBean<CgbRole> pagebean = new PageBean<CgbRole>();pagebean.setPagenow(pagenow);CgbUser sysUser = (CgbUser) session.getAttribute("sysUser");cgbRoleService.search(pagebean,sysUser);return JSONTools.formatJSONObjectToString(1, "成功", pagebean);} catch (Exception e) {e.printStackTrace();return JSONTools.formatJSONObjectToString(0, "失败", null);}}@RequestMapping(value="/authority",method=RequestMethod.GET)public @ResponseBody String authority(HttpSession session){CgbUser sysUser = (CgbUser) session.getAttribute("sysUser");JSONObject jsonObject = cgbRoleService.getObjectAuthorityList(sysUser);return jsonObject.toString();}/** * pengweikang 20161028 跳转到修改页面 * @param id * @return */@RequestMapping(value="/{id}/update",method=RequestMethod.GET)public String toupdate(@PathVariable String id){return "role/update";}


代码差不多就这么多了,小伙伴赶紧动手试试吧!





原创粉丝点击