目录
1.SSM是什么?
SSM是三个主流技术框架的缩写,分别为Spring、S大型的pringMVC以及MyBatis,三者的协调运用成为了目前主流的Java EE框架,适用于搭建各种大型的企业级应用系统。
2.搭建SSM所需的基本配置文件有哪些?
(1)Spring下的配置文件:Spring-Config.xml 属于全局配置文件(配置文件名是自定义,作为Spring的核心配置文件,里面包括了:1-用Spring的数据源替换MyBatis的数据源,并且绑定mybatis配置文件以及注册mapper.xml映射器,即Spring整合MyBatis。2-注入sqlSessionFactory 基本代码如下:
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- DataSource:使用Spring的数据源替换mybatis的配置-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="abc15976582078"/>
</bean>
<!--sqlSessionFactory-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--绑定mybatis配置文件-->
<property name="configLocation" value="classpath:config.xml"/>
<!--注册Mapper.xml映射器-->
<property name="mapperLocations" value="classpath:com/zhan/Dao/*.xml"/>
</bean>
<!-- sqlSessionTemplate:就是我们使用的sqlSession-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<!-- 只能使用构造器注入sqlSessionFactory,因为它没有set方法-->
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!-- <!–扫描自定义的Mapper接口–>-->
<!-- <bean id="UserDao" class="com.zhan.Dao.UserDaoImpl">-->
<!-- <property name="sqlSession" ref="sqlSession"/>-->
<!-- </bean>-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<property name="basePackage" value="com.zhan.Dao"/>
</bean>
</beans>
注意:这里的包扫描基于自己项目的目录结构进行扫描。
(2)MyBatis配置文件:config.xml
其实在用Spring整合了MyBatis后,其工作大部分已经被取代了(例如数据源的配置),里面的配置内容基本上可以说是空壳,但为了保留SSM的完整痕迹,还是需要将其保留下来,被Spring-config.xml扫描。
<?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>
<!-- <environments default="development">-->
<!-- <environment id="development">-->
<!-- <transactionManager type="JDBC"></transactionManager>-->
<!-- <dataSource type="POOLED">-->
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="abc15976582078"/>-->
<!-- </dataSource>-->
<!-- </environment>-->
<!-- </environments>-->
<!-- <mappers>-->
<!-- <mapper resource="UserMapper.xml"/>-->
<!-- </mappers>-->
</configuration>
(3)Springmvc核心配置文件:springmvc.xml
这也是必不可少的一环。作用包括扫描并管理控制器Controller中的各种bean对象、配置视图解析器等,它是被web.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: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.xsd
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
">
<!-- SpringMVC配置文件:控制器的bean对象在这被扫描 -->
<context:component-scan base-package="com.zhan"/>
<!-- 启动mvc的注解驱动-->
<mvc:annotation-driven/>
<!-- 配置视图解析器的配置--> <!-- 调用视图解析器的方法:InternalResourceViewResolver-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix" value="/"/><!--默认访问路径是webapp根路径下的,如果webapp下还有其他文件夹就写:/webapp/文件夹名-->
<!-- 后缀 -->
<property name="suffix" value=".jsp"/><!-- 如果是index.html文件,就写html -->
</bean>
</beans>
(4)web-app目录下的核心配置文件:web.xml
最核心的部分之一,其它配置文件像spring-config.xml以及springmvc.xml都将被它读取,同时它也是被tomcat以及其他类型服务器率先读取并打包部署的必备读取文件。除此之外,还包括配置字符过滤器、拦截器和静态资源的加载等等。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 字符编码过滤器-->
<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>
<!-- Spring配置-->
<!-- 1、让监听器知道spring的配置文件的位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<!-- spring配置文件的文件名 -->
<param-value>classpath:spring.xml</param-value>
</context-param>
<!-- 2.创建监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springmvc的 核心\前端\中央 控制器-->
<!-- servlet的封装-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- servlet读取springmvc的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- springmvc配置文件的文件名 -->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 在容器创建servlet对象的优先级. 数字越小越先创建-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- 设置访问路径后必须加.do才能进行访问-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 加载静态资源-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
</web-app>
(5)MyBatis下的映射文件配置:Mapper.xml
该配置文件是用于编写sql语句的地方,便于pojo与SQL间的映射关系,常见的基本操作包括增删改查等等,一般是在Dao设置了映射接口后,具体的业务实现(sql语句)在mapper.xml中体现。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.zhan.Dao.UserDao">
<!-- 添加查询-->
<insert id="addUser">
insert into test.product(pid,pname,price,category_id) values (#{pid},#{pname},#{price},#{category_id})
</insert>
<!-- 更新查询-->
<update id="adaptUser">
update test.product set pname=#{pname},price=#{price},category_id=#{category_id} where pid=#{pid} ;
</update>
<!-- 删除查询-->
<delete id="deleteUser">
delete from test.product where pid=#{pid}
</delete>
<!--查询全部语句 -->
<select id="getList" resultType="com.zhan.pojo.User">
select * from test.product
</select>
<!-- 根据id查询-->
<select id="getById" resultType="com.zhan.pojo.User">
select *from test.product where pid=#{pid}
</select>
</mapper>
注意:这里的数据库表是基于我自己的,不同的数据库表需要有对应的pojo类进行映射。
3.其他的辅助配置文件:MyBatis逆向工程
我们知道,MyBatis是属于半自动(ORM)的持久化框架,一个数据库表对应一个pojo类,同时对应着一个相映射的mapper.xml文件。这使得我们需要花部分时间在pojo类的编写和mapper.xml的繁琐编写上。而逆向工程就是通过数据库表来自动帮我妈构建相应的pojo类和mapper.xml的,让我们能更加集中在业务代码的编写上。可以说,MyBatis逆向工程是一种“懒人的必备配置”。
mybaits-generation.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="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8"
userId="root"
password="abc15976582078">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 我写的是entity实体类-->
<javaModelGenerator targetPackage="com.bjpowernode.crm.settings.pojo"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper" targetProject="./src/main/resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.bjpowernode.crm.settings.mapper"
targetProject="src/main/java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="crmdb" tableName="tbl_user"></table>
<!-- <table schema="crm" tableName="product_info"></table>-->
<!-- <table schema="" tableName="product_type"></table>-->
</context>
</generatorConfiguration>
通过上述代码可以看到,逆向工程配置文件大体上包括数据库连接、指定数据库表、指定pojo类和mapper.xml的生成位置。
4.配置文件的读取关系图
为了更直观地看清各配置文件的读取与被读取关系,用一幅图来显示说明: