业务需求:SSM整合实现商品列表的查询
一、系统架构
第一步:整合dao层
mybatis和spring整合,通过spring管理mapper接口。
使用mapper的扫描器自动扫描mapper接口在spring中进行注册。
第二步:整合service层
通过spring管理 service接口。
使用配置方式将service接口配置在spring配置文件中。
实现事务控制。
第三步:整合springmvc
由于springmvc是spring的模块,不需要整合。
二、准备环境
java环境
jdk1.7.0_72
eclipse indigo
springmvc版本:spring3.2
所需要的jar包
数据库驱动包:mysql5.1
dbcp数据库连接池包
mybatis的jar包
spring3.2所有jar包
mybatis和spring整合包
log4j包
jstl包
工程结构
最终的配置文件目录
三、整合DAO
mybatis和spring进行整合
mybatis自己的配置文件:sqlMapConfig.xml
整合DAO的配置文件
applicationContext-dao.xml
配置:
数据源
SqlSessionFactory
mapper扫描器
(1)逆向工程生成POJO类以及Mapper文件
什么是mybatis的逆向工程
mybatis官方为了提高开发效率,提高自动对单表生成sql,包括 :mapper.xml、mapper.Java、表名.java(po类)
在企业开发中通常是在设计阶段对表进行设计 、创建。 在开发阶段根据表结构创建对应的po类。
mybatis逆向工程的方向:由数据库表 —>java代码
逆向工程 使用配置
引入依赖包
<!-- mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- jdbc驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<!-- mybatis逆向工程 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
编写配置文件
<?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.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/db_test"
userId=""
password="">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="true" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.demo.mybatis_generator.po"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="false" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.demo.mybatis_generator.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.demo.mybatis_generator.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="customer"></table>
<!--<table schema="" tableName="orders"></table>-->
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>
需要配置的项:数据库名,数据库账号,数据库密码,生成的位置,指定数据库表等等
引入逆向工程的启动类并配置
public class GeneratorSqlmap {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
//指定 逆向工程配置文件
File configFile = new File("generatorConfig.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);
}
public static void main(String[] args) throws Exception {
try {
GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
generatorSqlmap.generator();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ps:在运行时可能会报错:找不到generatorConfig.xml文件,这时可以使用绝对路径或classpath路径
运行程序生成对应的内容,然后把生成的文件拷贝到项目对应的目录!
【注意】逆向工程一般都是针对单表的CRUD,多表的关联建议采用手动配置!上面只是个案例,具体业务看自己的项目需求。
(2)自定义Mapper
sql语句:
SELECT * FROM items WHERE items.name LIKE '%笔记本%'
ItemsMapperCustom.java
四、整合Service
让spring管理service接口
service接口
serviceImpl实现类
创建applicationContext-service.xml,文件中配置service
【提示】一般都用@Service配置了,不采用这种形式了!
事务控制applicationContext-transaction.xml
在applicationContext-transaction.xml中使用spring声明式事务控制方法
五、整合SpringMVC
创建springmvc.xml文件,配置处理器映射器、适配器、视图解析器。
配置前端控制器
在web.xml中配置
编写Controller
加载Spring容器
将mapper、service、controller加载到spring容器中
建议使用通配符加载上边的配置文件
在web.xml中,添加spring容器监听器,加载spring容器