:fa-hand-o-down:简单整理了一下利用Spring,Spring MVC,My Batis搭建系统框架的流程
根据顺序进行反向搭建:database–>Entity.java–>mapper.xml–>Mapper.java–>Dao.java–>DaoImpl.java–>Service.java–>ServiceImpl.java–>Controller.java–>xxx.jsp
一、数据库设计,数据表
1、建库
2、建表
3、初始化数据
二、创建实体类
设置私有化参数,并给出公有的get和set方法
三、Mapper实现增删查改的操作
1、创建Mapper的接口,定义操作的方法
2、创建mapper.xml实现Mapper接口的方法(格式如下,类名为Mapper接口)
<mapper namespace="包名.Mapper类名">
<resultMap type="包名.实体类名" id="结果集名称">
<id property="id" column="id" />
<result property="字段" column="字段" />
</resultMap>
<!-- 此处select标签的id值对应Mapper类中方法名 -->
<select id="方法名" parameterType="string" resultMap="结果集名称">
<!-- 此处写sql语句,#{Mapper类传入的参数} -->
select * from tableName where column= #{column_value}
</select>
</mapper>
四、数据库操作对象Dao
1、创建dao接口(与Mapper接口极为相似)
2、dao接口实现方法
@Repository("xxxDao")
public class xxxDaoImpl implements xxxDao {
//注解引用Mapper类资源
@Resource(name = "xxxMapper")
private xxxMapper xxxMapper;
/* 对应的操作方法*/
public Class xxx(String value) {
//调用Mapper类从数据库中得到User对象
return xxxMapper.xxx(value);
}
}
五、业务层service
1、创建业务层接口
2、业务层实现类,调用dao的方法进行操作,用注解@Resource进行不需要自己实例化
六、控制层Controller
1、@Controller对应表现层的Bean(Action)
注意:如果@Controller不指定其value【@Controller】则默认的bean名为这个类的的类名小写,若指定value【@Controller(value='XxxAction')】或【@Controller(“xxxAction”)】,则使用value值作为bean的名称
2、@Scope("prototype)标识将Action的范围声明为原型
可以利用容器的scope=“pototype"来保证每个请求都有一个独立的Action处理,避免struts中Action线程安全问题。spring默认是单例模式(scope="singleton"),这样只会创建一个Action对象,每次访问都是同一个,数据不安全。
3、RequestMapping("/xxx")
用来处理请求地址映射的注解,用于类或方法上,在类上标识所有请求的方法都是以改地址作为父路径的
@Controller
@Scope(value="prototype")
@RequestMapping("/xxx")
public class XxxController {
@Resource
private XxxService xxxService;
@RequestMapping(value="/login",method=RequestMethod.POST)
public String xxxFunc(XxxClass xxx,Model model) throws Exception {
xxx=xxxService.xxxFunc(xxx.getId());
if(xxx!=null){
model.addAttribute(xxx);
return "welcome";// 路径 WEB-INF/pages/welcome.jsp
}
return "fail";
}
}
六、所有配置文件的配置
1、applicationContext.xml(Sping公共配置文件)的配置
a.数据库配置文件引入
<bean id="property" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list ><value>classpath:database.properties</value></list>
</property>
</bean>
b.数据库连接池配置
<bean id="dataSource" class="org.springframework.aop.target.CommonsPoolTargetSource" destroy-method="close">
<!-- 指定数据库驱动 -->
<property name="driverClass"><value>${mysql.driver_class}</value></property>
<!-- 链接地址 -->
<property name="jdbcUrl"><value>${mysql.connection.url}</value></property>
<!-- 链接用户名 -->
<property name="user"><value>${mysql.connectiion.username}</value></property>
<!-- 链接密码 -->
<property name="password"><value>${mysql.connection.password}</value></property>
<!-- 最大连接数 -->
<property name="maxPoolSize"><value>30</value></property>
<!-- 最小连接数 -->
<property name="minPoolSize"><value>2</value></property>
<!-- 初始化链接数 -->
<property name="initialPoolSize"><value>2</value></property>
<!-- 连接池链接最大空闲时间(秒) -->
<property name="maxIdleTime"><value>10</value></property>
</bean>
c.自动扫描配置,使用
@Component@Controller@Service等注解,把这些类注册为bean 、
<context:component_scan base-pack="com.ven.*">
<!-- 不扫描controller类型 -->
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component_scan>
d.集成myBatis
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用配置连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- myBatis配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml" />
<!-- mapper配置路径 -->
<property name="mapperLocations">
<list>
<value>classpath:com/ven/mapper/*.xml</value>
</list>
</property>
</bean>
e.mapper扫描配置
<bean class="org.mybatis.spring.mapper.MapperScanerConfigurer">
<property name="basePackage" class="com.ven.mapper">
</bean>
f.myBatis事务管理
<bean id="transactionManager" class="org.springframework.jdbc.datasouce.DataSourcesTransactionManager">
<property name="dataSource" value="dataSource" />
</bean>
2、jdbc.properties(数据库链接)的配置
mysql.driver_class=com.mysql.jdbc.Driver
mysql.connection.url=jdbc:mysql://location:3306/DB
mysql.connection.user=root
mysql.connection.password=root
3、日志管理文件log4j.properties的配置
#log4j.rootLogger=DEBUG, A1, R
log4j.rootLogger=INFO, A1, R
#log4j.rootLogger=WARN,A1, R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.MaxFileSize=1024KB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.File=/log/xxx.log
#log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p] %m%n
#log4j.appender.R.layout.ConversionPattern=[%-d{yyyy-MM-dd HH:mm:ss}] %m%n
#log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
4、myBatis配置文件的配置
通过别名可以缩短类名长度,但只能在配置文件中使用
<configuration>
<!-- 别名 -->
<typeAliases>
<typeAlias type="com.ven.entity.xxx" alias="xxx" />
</typeAliases>
</configuration>
5、web.xml的配置
<!-- server下多个项目配置log打印到对应目录下
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>ProjectName.root</param-value>
</context-param>
<!-- spring 载入lo4j配置文件 -->
<context-param>
<param-name>lo4jConfigLocation</param-name>
<param-vanlue>classpath:log4j.properties<param-velue>
</context-param>
<!-- spring默认刷新log4j配置的时间,秒
<context-param>
<param-name>lo4gRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>
<!-- lo4j监听 -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigLocation<listener-class>
</listener>
<!-- 设置spring容器加载配置 -->
<context-param>
<param-name>contextConfgLocation</param-name>
<param-value>classpath:springContext/*Context.xml</param-value>
</context-param>
<!-- 加载spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContexLoaderListener</listener-class>
</listener>
<!-- 防止内存泄漏监听器 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorListener</listener-class>
</listener>
<!-- springmvc核心控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispacherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc.xml</param-value>
</init-param>
<!-- 立即启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet-mapping配置 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<filter-mapping>
6、springmvc.xml的配置
<!-- 注解Controller扫描器 -->
<context:component-scan base-pascage="com.ven.Controller" />
<!-- 静态资源访问 -->
<mvc:resources location="/img/" mapping="/img/**" />
<mvc:resources location="/js/" mapping="/js/**" />
<mvc:resources location="/commom/" mapping="/common/**" />
<!-- 注解功能的默认配置,处理器和映射器 -->
<bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
<!-- 前后缀配置 -->
<bean name="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INFO/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>