下面是我这个项目的结构,包括什么类目,什么jar包
我觉得这个这个东西的难点主要是在于配置文件,所以我先把配置文件贴出来,不知道哪个地方需要改进。配置文件我是直接从另外一个地方考过来改写的,也不知道对错
SqlMapConfig.xml
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6 7 <!-- 定义别名 --> 8 <typeAliases> 9 <package name="com.etc.po" /> 10 </typeAliases> 11 <!-- 配置mapper映射文件 --> 12 <mappers> 13 <!-- 加载 原始dao使用映射文件 --> 14 <!-- <mapper resource="sqlmap/User.xml" /> --> 15 16 <!--批量mapper扫描 遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同 --> 17 <package name="com.etc.mapper" /> 18 </mappers> 19 </configuration>
applicationContext-dao.xml
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 7 http://www.springframework.org/schema/mvc 8 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-3.1.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> 15 16 <!-- 配置SqlSessionFactory --> 17 <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> 18 <!-- 数据源 --> 19 <property name="dataSource" ref="dataSource"/> 20 <!-- 配置SqlMapConfig.xml --> 21 <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/> 22 </bean> 23 24 <!-- 配置userDao --> 25 <!-- <bean id="userDao" class="cn.itcast.ssm.dao.old.UserDaoImpl"> 26 注入会话工厂 27 <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/> 28 </bean> --> 29 30 31 <!-- mapper动态代理 --> 32 <!-- 配置userMapper 33 MapperFactoryBean:用于生成 代理对象 34 --> 35 <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 36 注入会话工厂 37 <property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/> 38 mapper接口 39 <property name="mapperInterface" value="cn.itcast.ssm.dao.mapper.UserMapper"/> 40 </bean> --> 41 42 <!-- 使用mapper批量扫描器扫描mapper接口 43 规则:mapper.xml和mapper.java在一个目录 且同名即可 44 扫描出来mapper,自动让spring容器注册,bean的id就是mapper类名(首字母小写) 45 --> 46 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 47 <!-- 会话工厂 --> 48 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/> 49 <!-- 扫描包路径 50 多个包中间用半角逗号分隔 51 --> 52 <property name="basePackage" value="com.etc.mapper"/> 53 </bean> 54 55 56 </beans>
applicationContext-service.xml
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 7 http://www.springframework.org/schema/mvc 8 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-3.1.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> 15 16 17 <!-- 用户管理 --> 18 <bean id="userService" class="com.etc.service.ProductServiceImpl"/> 19 </beans>
applicationContext.xml
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 7 http://www.springframework.org/schema/mvc 8 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-3.1.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> 15 16 17 <!-- 加载配置文件 --> 18 <context:property-placeholder location="classpath:db.properties" /> 19 <!-- 使用第三方的数据库连接池dbcp --> 20 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 21 destroy-method="close"> 22 <property name="driverClassName" value="${jdbc.driver}" /> 23 <property name="url" value="${jdbc.url}" /> 24 <property name="username" value="${jdbc.username}" /> 25 <property name="password" value="${jdbc.password}" /> 26 <!-- 开发阶段数据库最大连接数建议设置小一点够用即可,设置为3 --> 27 <property name="maxActive" value="${jdbc.maxActive}" /> 28 <property name="maxIdle" value="${jdbc.maxIdle}" /> 29 </bean> 30 31 <!-- 事务管理 --> 32 33 <!-- 事务管理器 34 mybatis使用jdbc事务管理 35 --> 36 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 37 <!-- 数据源 --> 38 <property name="dataSource" ref="dataSource"/> 39 </bean> 40 41 <!-- 通知 --> 42 <tx:advice id="txAdvice" transaction-manager="transactionManager"> 43 <!-- 配置传播行为 --> 44 <tx:attributes> 45 <tx:method name="save*" propagation="REQUIRED" /> 46 <tx:method name="insert*" propagation="REQUIRED"/> 47 <tx:method name="update*" propagation="REQUIRED"/> 48 <tx:method name="delete*" propagation="REQUIRED"/> 49 <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> 50 <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> 51 <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> 52 </tx:attributes> 53 </tx:advice> 54 55 <!-- aop配置 --> 56 <aop:config> 57 <aop:advisor advice-ref="txAdvice" 58 pointcut="execution(* cn.itcast.ssm.service.impl.*.*(..))"/> 59 </aop:config> 60 61 62 </beans>
springmvc.xml
1 <beans xmlns="http://www.springframework.org/schema/beans" 2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 3 xmlns:context="http://www.springframework.org/schema/context" 4 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans 6 http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 7 http://www.springframework.org/schema/mvc 8 http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context-3.1.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 13 http://www.springframework.org/schema/tx 14 http://www.springframework.org/schema/tx/spring-tx-3.1.xsd "> 15 16 <!-- 组件扫描 只扫描action --> 17 <context:component-scan base-package="com.etc.controller" /> 18 19 20 <!-- 使用<mvc:annotation-driven />替换上边定义的处理器映射器和适配器 --> 21 <mvc:annotation-driven /> 22 23 <!-- 视图解析器 解析jsp视图,默认使用jstl,要求classpath下有jstl的jar包 --> 24 <bean 25 class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 26 <!-- 视图的前缀 --> 27 <property name="prefix" value="/WEB-INF/jsp/" /> 28 <!-- 视图的后缀 --> 29 <property name="suffix" value=".jsp" /> 30 31 </bean> 32 33 34 </beans>
web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 5 id="WebApp_ID" version="2.5"> 6 <display-name>mybatis1218_ssm</display-name> 7 8 <!-- 加载spring容器 --> 9 <context-param> 10 <param-name>contextConfigLocation</param-name> 11 <param-value>/WEB-INF/classes/spring/applicationContext.xml,/WEB-INF/classes/spring/applicationContext-*.xml</param-value> 12 </context-param> 13 <listener> 14 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 15 </listener> 16 17 <!-- post乱码处理 --> 18 <filter> 19 <filter-name>CharacterEncodingFilter</filter-name> 20 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 21 <init-param> 22 <param-name>encoding</param-name> 23 <param-value>utf-8</param-value> 24 </init-param> 25 </filter> 26 <filter-mapping> 27 <filter-name>CharacterEncodingFilter</filter-name> 28 <url-pattern>/*</url-pattern> 29 </filter-mapping> 30 31 <!-- 前端控制器 --> 32 <servlet> 33 <servlet-name>springmvc</servlet-name> 34 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 35 <!-- contextConfigLocation指定 springmvc的全局配置文件 如果 contextConfigLocation不指定,默认找配置文件名称:servlet的name+"-servlet.xml" --> 36 <init-param> 37 <param-name>contextConfigLocation</param-name> 38 <param-value>classpath:spring/springmvc.xml</param-value> 39 </init-param> 40 </servlet> 41 42 <servlet-mapping> 43 <servlet-name>springmvc</servlet-name> 44 <url-pattern>*.action</url-pattern> 45 </servlet-mapping> 46 47 <welcome-file-list> 48 <welcome-file>index.html</welcome-file> 49 <welcome-file>index.htm</welcome-file> 50 <welcome-file>index.jsp</welcome-file> 51 <welcome-file>default.html</welcome-file> 52 <welcome-file>default.htm</welcome-file> 53 <welcome-file>default.jsp</welcome-file> 54 </welcome-file-list> 55 </web-app>
以上是除了db.properties和log4j.properties以外的全部配置文件。下面我把代码贴出来
ProductServiceImpl.java
1 package com.etc.service; 2 3 import java.util.List; 4 5 import org.springframework.beans.factory.annotation.Autowired; 6 7 import com.etc.mapper.ProductMapper; 8 import com.etc.po.Product; 9 import com.etc.po.ProductExample; 10 11 public class ProductServiceImpl implements ProductService{ 12 13 @Autowired 14 private ProductMapper productMapper; 15 @Override 16 public List<Product> getProducts() { 17 // TODO Auto-generated method stub 18 ProductExample example = new ProductExample(); 19 example.setDistinct(true); 20 return productMapper.selectByExample(example); 21 } 22 23 @Override 24 public Product getProductById(int id) { 25 // TODO Auto-generated method stub 26 return productMapper.selectByPrimaryKey(id); 27 } 28 29 }
这四个是有mybatis生成的,所以应该是不会有错,就没有贴出代码。
下面是JUNIT测试类还有控制台的内容,求高手指导
ProductMapperTest.java
1 package com.etc.test; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.List; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 import org.junit.Before; 12 import org.junit.Test; 13 14 import com.etc.mapper.ProductMapper; 15 import com.etc.po.Product; 16 import com.etc.po.ProductExample; 17 18 public class ProductMapperTest { 19 20 private SqlSessionFactory sqlSessionFactory; 21 22 @Before 23 public void setUp() { 24 String resource = "mybatis/SqlMapConfig.xml"; 25 InputStream inputStream = null; 26 try { 27 inputStream = Resources.getResourceAsStream(resource); 28 } catch (IOException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } 32 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 33 } 34 35 @Test 36 public void test1() { 37 SqlSession sqlSession = sqlSessionFactory.openSession(); 38 ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class); 39 Product product = productMapper.selectByPrimaryKey(2); 40 System.out.println(product); 41 42 } 43 44 @Test 45 public void test2(){ 46 47 SqlSession sqlSession = sqlSessionFactory.openSession(); 48 ProductMapper productMapper = sqlSession.getMapper(ProductMapper.class); 49 50 ProductExample example = new ProductExample(); 51 example.setDistinct(true); 52 List<Product> products = productMapper.selectByExample(example); 53 System.out.println(products.toString()); 54 55 56 57 } 58 59 }
用的是MYSQL数据库,字段如图,很简单的一个表
源码放到百度云上面共享http://pan.baidu.com/s/1nvlHg6H,坐等高手指导