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";}
代码差不多就这么多了,小伙伴赶紧动手试试吧!
- SpringMVC+Mybatis+mybatis-generator快速开发架构
- maven+Spring+SpringMVC+mybatis+mybatis-generator 搭建SSM开发环境
- IDEA中使用MyBatis Generator快速开发
- 使用springboot+springmvc+mybaits-spring+mybatis-generator开发
- 通过MyBatis Generator快速配置Mybatis
- spring springmvc mybatis 开发框架搭建 + mybatis-generator dao层代码生成 + restful
- SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
- SpringMVC,Spring,Hibernate,Mybatis架构开发搭建之SpringMVC部分
- SpringMVC+MyBatis整合(1)generator篇
- Mybatis generator
- Mybatis generator
- mybatis generator
- mybatis-generator
- MYBATIS Generator
- MyBatis Generator
- Mybatis-Generator
- mybatis generator
- Mybatis-Generator
- 在不知道json格式的情况下如何使用cjson进行解析
- C++枚举
- 二叉树中和为某一值得路径
- ffmpeg开发之旅(7):Android视频直播核心技术(架构)详解
- Recycle 通过OKHTTP请求数据ImageLoader请求图片
- SpringMVC+Mybatis+mybatis-generator快速开发架构
- python函数的基本使用与参数
- Java 文件上传 MultipartFile
- React组件嵌套
- 2017.11.1开始学习FFMPEG音视频编解码,通过学习雷霄骅文章
- 介绍Spring Cloud分布式微服务云架构
- 《网安法》让CIO变身高危职业?一位零售老兵的思考和建议
- Java调用Python脚本(需要传参)
- 前端面试题(7)前端页面由哪三层构成,分别是什么,作用是什么