配置SpringMVC+Mybatis+SQLServer (1)
来源:互联网 发布:dwf转换cad软件 编辑:程序博客网 时间:2024/06/16 22:41
之前的文章中写到了怎么配置SpringMVC项目,下面在SpringMVC项目中配置MyBatis,数据库为SQLServer。
准备工作:
1、新建数据库mydb及数据表student
CREATE TABLE student( id int not null, student_name nvarchar(20) not null)INSERT INTO student (id,student_name)values(1,'张三')INSERT INTO student (id,student_name)values(2,'李四')INSERT INTO student (id,student_name)values(3,'王五')
开始配置SpringMVC+MyBatis+SQLServer
1、在tomcat文件下的context.xml文件中配置数据源<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" logAbandoned="true" maxActive="100" maxIdle="20" maxWait="10000" name="jdbc/sqlServerMydb" password="123456" removeAbandoned="true" removeAbandonedTimeout="120" type="javax.sql.DataSource" url="jdbc:sqlserver://localhost:1433;DatabaseName=mydb" factory="org.apache.commons.dbcp.BasicDataSourceFactory" username="userName"/>数据库用户名为username,密码为123456
2、pom.xml文件中引入myBatis,myBatis-spring,common-pool,commons-dbcp,spring-jdbc等依赖包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springVersion}</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool --> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <!-- spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springVersion}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency>
3、创建pojo类student,StudentDao,StudentService以及对应的student.xml文件。
Student.java
package com.xtli.pojo;public class Student { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
StudentDao.java
package com.xtli.dao;import org.springframework.stereotype.Repository;import com.xtli.pojo.Student;/* * 测试MyBatisDao */@Repositorypublic interface StudentDao { public Student getStudentById(Integer id);}
StudentService.java
package com.xtli.service;import com.xtli.pojo.Student;public interface StudentService { public Student getStudentById(Integer id);}
StudentServiceImpl.java
package com.xtli.service.Impl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.xtli.dao.StudentDao;import com.xtli.pojo.Student;import com.xtli.service.StudentService;@Servicepublic class StudentServiceImpl implements StudentService { @Autowired private StudentDao studentDao; @Override @Transactional(readOnly = false, rollbackFor = Throwable.class) public Student getStudentById(Integer id) { return studentDao.getStudentById(id); }}
student.xml文件,此文件命名空间要与StudentDao路径保持一致
<?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"><mapper namespace="com.xtli.dao.StudentDao"> <select id="getStudentById" parameterType="int" resultType="student"> SELECT id,student_name AS name FROM student WHERE id=#{id} </select></mapper>
4、添加applicationContext.xml文件以及sqlMapConfig.xml文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" > <!-- datasource define --> <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName"> <value>java:comp/env/jdbc/sqlServerMydb</value> </property> </bean> <!--MyBatis 的sqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlMapConfig.xml"></property> </bean> <!-- sqlSessionTemplate --> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype"> <constructor-arg index="0" ref="sqlSessionFactory"/> </bean> <!-- 事务管理(Spring事务会覆盖JDBC事务) --> <!-- <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"/> --> <!-- 采用自动扫描方式创建mapper bean --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com"/> <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/> <property name="annotationClass" value="org.springframework.stereotype.Repository"/> </bean></beans>
sqlMapConfig.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> <settings> <!-- 这个配置使全局的映射器启用或禁用缓存 --> <setting name="cacheEnabled" value="true"/> <!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true,则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) --> <setting name="useGeneratedKeys" value="true"/> <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 --> <setting name="defaultExecutorType" value="REUSE"/> <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 --> <setting name="defaultStatementTimeout" value="25000"/> </settings> <!-- 自定义别名 --> <typeAliases> <!-- 单个别名定义 --> <typeAlias type="com.xtli.pojo.Student" alias="student"/> <!-- 批量别名定义(推荐) --> <!-- package:指定包名称来为该包下的po类声明别名,默认的别名就是类名(首字母大小写都可) --> <!-- <package name="com.xtli.pojo" /> --> </typeAliases> <!-- 指定映射器路径 --> <mappers> <mapper resource="com\xtli\dao\student.xml" /> <!-- 批量加载映射文件 --> <!-- <package name="com.xtli.dao" /> --> </mappers></configuration>
5、创建StudentController
StudentController.java
package com.xtli.controller;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.xtli.pojo.Student;import com.xtli.service.StudentService;@Controller@RequestMapping(value="/studentController")public class StudentController { private static final String STUDENT = "/xtli/student/studentList.jsp"; @Autowired private StudentService studentService; /** * 测试MyBatis */ @RequestMapping(value="/getStudent") public ModelAndView getStudent(HttpServletRequest request) { ModelAndView mv = new ModelAndView(STUDENT); Integer id = 1; Student student = studentService.getStudentById(id); return mv.addObject("student", student); } }
创建studentList.jsp展示数据。
最终目录结构如下:
6、以上完成后,如果此时将项目放在Tomcat下,启动时,会报如下错误
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'studentServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.xtli.dao.StudentDao com.xtli.service.Impl.StudentServiceImpl.studentDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xtli.dao.StudentDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1146) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) at ...Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.xtli.dao.StudentDao com.xtli.service.Impl.StudentServiceImpl.studentDao; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xtli.dao.StudentDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:517) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:286) ... Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.xtli.dao.StudentDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at ...
这是因为我们配置的applicationContext.xml文件未在web.xml文件中配置,所配置的bean没有注入到Spring容器中,在web.xml中增加以下配置
<!-- 配置ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext.xml</param-value> </context-param> <!-- 配置ContextLoaderListener --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>ContextLoaderListener监听器,启动容器时,默认执行其中的 contextInitialize方法,此方法自动装配applicationContext.xml的配置,初始化webApplicationContext。源码如下
public void contextInitialized(ServletContextEvent event) { this.contextLoader = createContextLoader(); if (this.contextLoader == null) { this.contextLoader = this; } this.contextLoader.initWebApplicationContext(event.getServletContext()); }
7、再次启动Tomcat,并输入URL,出现以下结果
配置完成。
阅读全文
0 0
- 配置SpringMVC+Mybatis+SQLServer (1)
- maven+sqlserver+spring+mybatis+springmvc
- 配置SpringMVC+Mybatis+SQLServer (2)——配置过程中常见问题
- springmvc/mybatis/maven环境配置1
- springMVC+mybatis配置详解
- springMVC + mybatis 事务配置
- springmvc+mybatis+velocity配置
- springMVC +mybatis的配置
- spring,springmvc,mybatis配置
- springmvc+mybatis 数据库配置
- spring+springMVC+Mybatis配置
- springmvc+mybatis 配置
- springmvc+mybatis配置
- springMvc + mybatis 配置
- SpringMvc+mybatis 配置
- springMVC+mybatis事务管理配置
- SpringMVC+MyBatis+MAVEN配置
- springMVC+Mybatis整合配置
- 关于Linux系统启动的流程
- poj2985(名次树(treap))找第k大 The k-th Largest Group
- Spring事件(Application Event)
- android文件系统挂载分析(1)---正常开机挂载
- C语言可变参数列表
- 配置SpringMVC+Mybatis+SQLServer (1)
- 莫比乌斯反演入门
- Nginx教程-http_core_module变量
- Android 优化-->应用退出方式
- c/c++文本单词查询
- HDU 1087 Super Jumping! Jumping! Jumping!(基础DP)
- [编程题] DNA合成
- 操作类对象
- 《TCP/IP网络编程》(尹圣雨)笔记