下面的过程中我还没有使用Maven,在后面的学习过程中我会补上,此外,下面在整合的过程中我总会碰到路径的问题,所以将有的配置文件直接放在了src目录下,有的在放在了WEB-INF的目录下,下面列举一下所有的配置文件。
spring.xml(applicationContext.xml)--------------------spring配置文件
spring-mybatis.xml------------------------------------MyBatis配置文件
generatorConfig.xml-----------------------------------MyBatis Generator自动创建代码配置文件
spring-MVC.xml(springMVC.xml)-------------------------SpringMVC配置文件
web.xml-----------------------------------------------SpringMVC配置文件
log4j.properties--------------------------------------Log4j配置文件
jdbc.properties---------------------------------------数据源配置文件
上述的配置文件存放的位置很容易发生找不到文件的错误,所以一定要注意,后面我会继续整理配置文件的存放位置。
下面是我整合完成后文件的目录,感觉有点乱
1、Spring
Spring是一个开源框架,Spring是一个轻量级的Java开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只有可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单的来说,Spring是一个轻量级的
控制反转(IoC)和面向切面(AOP)的容器框架。
2、SpringMVC
SpringMVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面,Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3、MyBatis
MyBatis本来是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code ,并且改名为MyBatis。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Object(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射数据库
中的记录。
4、SSM整合
4.1 Spring与Mybatis的整合
所有的jar包都引入后,先将spring和MyBatris整合,然后写了个单元测试。
4.1.1、建立JDBC属性文件(设置属性为utf-8)
jdbc.properties
driverClassName=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=123
#定义初始连接数
initialSize=0
#定义最大连接数
maxActive=20
#定义最大空闲
maxIdle=20
#定义最小空闲
minIdle=1
#定义最长等待时间
maxWait=60000
4.1.3、Log4j的配置
之前我也简单的学习了一下Log4j,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
下面是我的基本配置,我之前写过一点关于Log4j的应用,下面是我的网址
http://blog.csdn.net/cwzhsi/article/details/41926467
还有转载的一篇Log4j使用的文章
http://blog.csdn.net/zhshulin/article/details/37937365
log4j.properties
#定义LOG输出级别
log4j.rootLogger=INFO,Console,File
#定义日志输出目的地为控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#灵活的指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x -%m%n
#文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File=org.apache.log4j.RollingFileAppender
#指定输出目录
log4j.appender.File.File=E:WorkSpace/logs/errors.log
#定义文件最大大小
log4j.appender.File.MaxFileSize=10MB
#输出所有日志,如果换成DEBUG表示输出DEBUG以上级别日志
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
上面基本完成了Spring和MyBatis的配置,下面来进行一个具体的测试。
4.1.4.1、创建测试用表
我之前就在oracle中创建了TD表,表的创建步骤之前也已经介绍过,这里就不再详述了。
4.1.4.2、利用MyBatis Generator
这个可根据表自动创建实体类,MyBatis映射文件及DAO接口,一般都习惯性的将接口改名为IUserDao,而不是直接用它生成的UserMapper,注意,这一步改了之后,千万要记得MyBatis映射文件也要改,我就是之前忘了改然后一直不知道哪里报错了。关于MyBatis Generator的具体实现可以看看我的另一篇博文
http://blog.csdn.net/cwzhsi/article/details/42041087
下面是生成目录图如下:
4.1.4.3、建立service接口和实现类
下面是我的具体的内容:
IUserService.java
public interface IUserService {
public User getUserById(BigDecimal userId);
public String addUser(User user);
}
IUserSerivceImpl.java
@Service("userService")
public class IUserServiceImpl implements IUserService{
private IUserDao userDao;
@Autowired
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
@Override
public User getUserById(BigDecimal userId) {
return this.userDao.selectByPrimaryKey(userId);
}
@Override
public String addUser(User user) {
System.out.println("zhsi");
userDao.insert(user);
return "success";
}
}
这里我使用了自动注解的功能,这样在注入时就不用在配置文件中进行设置了,不过也要注意这里的实现,这一步我也调试了很久主要是对注解的使用还不是很熟练。
4.1.4.4 建立测试类
@ContextConfiguration(locations={"spring-mybatis.xml","applicationContext.xml"})
public class SpringTest {
private static Logger logger=Logger.getLogger(SpringTest.class);
@Resource
private IUserService userService;
@Before
public void before(){
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"classpath:spring-mybatis.xml","classpath:applicationContext.xml"});
userService =(IUserService) context.getBean("userService");
PropertyConfigurator
.configure(".//WebContent/WEB-INF/cfg/log4j.properties");
}
@Test
public void test() {
User user=new User();
user.setUserName("mama");
user.setPassword("789");
user.setAge(new BigDecimal(21));
logger.info(userService.addUser(user));
}
}
测试结果如下:
上面的方式实现了Spring和MyBatis的整合,输出的信息使用的是Log4j打印到控制台。
这里我碰到了一个问题,就是使用注解的方式来引入配置文件和类,然后将service接口对象注入,但是这里我一直出现了空指针错误,找不到userService类。
哇塞,我终于解决问题了!
下面的测试类如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mybatis.xml","classpath:applicationContext.xml"})
public class SpringTest {
private static Logger logger=Logger.getLogger(SpringTest.class);
/**
* @Resource按名称注入(不需要setter方法了),@Autowired按类型注入
*/
@Resource
private IUserService userService;
@Autowired
public void setUserService(IUserService userService) {
this.userService = userService;
}
/*@Before
public void before(){
ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{"classpath:spring-mybatis.xml","classpath:applicationContext.xml"});
userService =(IUserService) context.getBean("userService");
PropertyConfigurator
.configure(".//WebContent/WEB-INF/cfg/log4j.properties");
}*/
@Test
public void test() {
PropertyConfigurator
.configure(".//WebContent/WEB-INF/cfg/log4j.properties");
User user=new User();
user.setUserName("baba");
user.setPassword("222");
user.setAge(new BigDecimal(21));
logger.info(userService.addUser(user));
}
}
这个问题整了我一天了,多谢师姐过来给我指点一下,太高兴了!
4.2、整合SpringMVC
SpringMVC的配置文件包括web.xml 和 springMVC.xml 这两个配置文件存放在WEB-INF目录下面
4.2.1、配置springMVC.xml文件(一般是spring-mvc.xml,我将其的名字改为了springMVC.xml)
该配置文件主要是自动扫描控制器、视图模式、注解的启动这三个。配置文件如下:
text/html;charset=UTF-8
4.2.2、配置web.xml文件
在这里对spring-mybatis.xml和配置文件springMVC.xml进行的引入就是完成了对SSM框架的整合。
web.xml
SSM_1
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
contextConfigLocation
classpath:spring-mybatis.xml,classpath:applicationContext.xml
log4jConfigLocation
classpath:log4j.properties
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
encodingFilter
/*
showUser.jsp 此页面仅输出一下用户名
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
ssm Test
${user.userName}
UserController.java
@Controller
@RequestMapping("/user")
public class UserController {
private static Logger logger=Logger.getLogger(SpringTest.class);
@Resource
private IUserService userService;
@RequestMapping("/addUser")
public String addUser(HttpServletRequest request,Model model){
//PropertyConfigurator.configure(".//WebContent/WEB-INF/cfg/log4j.properties");
User user=new User();
user.setUserName("weiwei");
user.setPassword("333");
user.setAge(new BigDecimal(21));
userService.addUser(user);
model.addAttribute("user", user);
return "showUser";
}
@RequestMapping("/getUser")
public String getUser(HttpServletRequest request,Model model){
int userId=Integer.parseInt(request.getParameter("id"));
User user=this.userService.getUserById(new BigDecimal(userId));
model.addAttribute("user", user);
return "showUser";
}
}
addUser方法被调用时,输入地址:http://localhost:8080/SSM_1/user/addUser
getUser方法被调用时,输入地址:http://localhost:8080/SSM_1/user/getUser?id=107
至此,SSM三大框架简单的整合就基本完成了,虽然是我是模仿的别人的例子,但是在整合的过程中通过碰到问题、解决问题这样反复折腾的
过程,我学习了很多,对框架整合的流程也基本上算是了解了,后面再进一步的学习吧。