springMVC.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:tx="http://www.springframework.org/schema/tx"
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-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-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">
<!-- 1.默认的注解映射的支持 -->
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="cacheSeconds" value="0" />
<!-- <property name="webBindingInitializer"> <bean class="com.xuanyan.uebuycar.admin.util.WebDataBinder4DateAndTime"/> </property> -->
</bean>
<!-- 2.视图解释类 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
<property name="suffix" value=".jsp" />
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
<!-- 3.对静态资源文件的访问 方案一 (二选一) -->
<mvc:default-servlet-handler />
<!-- 对静态资源文件的访问 方案二 -->
<!-- <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/>
<mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/>
<mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/> -->
<!-- 4.对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->
<context:component-scan base-package="com.yz.ssi.*">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository" />
</context:component-scan>
<!-- 拦截器 -->
<!-- <mvc:interceptors> <bean class="com.core.mvc.MyInteceptor" /> </mvc:interceptors> -->
</beans>
applicationConext.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:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
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-4.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
<!--配置通用属性文件拿属性通过${属性名}拿取 -->
<!-- <context:property-placeholder location="classpath:jdbc.properties" /> -->
<!-- 1.启用spring注解支持 不启动也可也不知道为什么 -->
<!-- <context:annotation-config /> -->
<!-- 2.设置DataSource -->
<!-- org.apache.commons.dbcp.BasicDataSource -->
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="admin" />
<property name="password" value="123456" />
<!-- <property name="maxActive" value="100"></property> <property name="maxIdle"
value="30"></property> <property name="maxWait" value="500"></property> <property
name="defaultAutoCommit" value="true"></property> -->
</bean>
<!-- 3.设置SessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis.xml" />
<!-- <property name="mapperLocations" value="classpath*:com/yz/ssi/domain/*.xml"></property> -->
<!-- <property name="mapperLocations"> <list> <value>classpath:com/yz/ssi/domain/*.xml</value>
<value>classpath:com/yz/ssi/mapper/*.xml</value> </list> </property> -->
</bean>
<!--4.事务相关控制只有在Web层才会执行事务 Junit4里事务出错不回滚或直接报错不执行代码 -->
<!-- XMl事务控制(2选1) -->
<!-- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property> </bean> <tx:advice
id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method
name="add*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"
/> <tx:method name="delete*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"
/> <tx:method name="modify*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"
/> <tx:method name="update*" propagation="REQUIRED" read-only="false" rollback-for="java.lang.Exception"
/> <tx:method name="find*" read-only="true" /> <tx:method name="get*" read-only="true"
/> <tx:method name="select*" read-only="true" /> </tx:attributes> </tx:advice>
<aop:config> <aop:pointcut id="pc" expression="execution(public * com.yz.ssi.dao.impl.*.*(..))"
/> <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" /> </aop:config> -->
<!--注解事务控制(2选1) -->
<!-- <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven
transaction-manager="txManager" /> -->
<!-- 5.创建一个sqlSession实例,线程安全的,可以在所有DAO实例共享,原理是将sqlSession,事务与当前线程挂钩 -->
<!-- 5.1如果打算不映射MAPPER BEAN 那就继承SqlSessionDaoSupport用方法getSqlSession()得到当前的Seeion
在从中得到Mapper -->
<!-- 5.2注入SqlSessionTemplate用方法getSqlSession() 得到当前的Seeion 在从中得到Mapper -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>
<!-- 6.搜索加载实例MapperBean以注入需要的Dao中,可以在 第5步 sqlSession实例直接得到Mapper -->
<!-- 6.1通过扫描的模式,扫描目录在com/yz/ssi/mapper目录下,所有的mapper都继承SqlMapper接口的接口, 这样一个bean就可以了 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.yz.ssi.mapper" />
<property name="markerInterface" value="com.yz.ssi.mapper.SqlMapper" />
</bean>
<!-- 6.2单独配置一个Mapper; 这种模式就是得给每个mapper接口配置一个bean -->
<!-- <bean id="accountMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.hoo.mapper.AccountMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <bean
id="companyMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property
name="mapperInterface" value="com.hoo.mapper.CompanyMapper" /> <property
name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> -->
<!-- 7.Bean注入容器 注解探测器 , 在JUnit测试的时候需要 -->
<!-- 7.1.自动扫描组件,这里要把controler下面的 controller去除, 他们是在spring3-servlet.xml中配置的,如果不去除会影响事务管理的。 -->
<context:component-scan base-package="com.yz.ssi" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" />
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 7.2 手动方式注入容器 -->
<!-- <bean id="userDAOImpl" class="com.yz.ssi.dao.impl.UserDaoImpl"> <property name="sqlSession" ref="sqlSession" /> </bean> -->
</beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
id="WebApp_9" version="2.4">
<display-name>SSH</display-name>
<!-- 1.Start 加载Spring容器配置 -->
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
<!-- 2.设置Spring容器加载配置文件路径 -->
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationConext*.xml</param-value></context-param>
<!-- 3.Start 配置SpringMVC核心控制器 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<!-- 不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml -->
<param-value>classpath*:springMVC*.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
<!-- <url-pattern>*.do</url-pattern> --></servlet-mapping>
<!-- 4.Start 解决工程编码过滤器 -->
<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>
</web-app>
log4j.properties
- # debug<info<warn<error
- log4j.rootLogger=debug, LOGFILE
- #log4j.debug=true
- # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
- #设置包日志输出级别
- #log4j.logger.com.xy6=INFO, CONSOLE
- # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
- #输出到控制台
- log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
- log4j.appender.CONSOLE.Threshold=INFO
- log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
- log4j.appender.CONSOLE.layout.ConversionPattern=%d %p [%c] - <%m>%n
- #输出到文件
- log4j.appender.LOGFILE=org.apache.log4j.RollingFileAppender
- log4j.appender.LOGFILE.File=${webappRoot}/log/AllLog.log
- log4j.appender.LOGFILE.MaxFileSize=10000KB
- log4j.appender.LOGFILE.MaxBackupIndex=1000
- log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
- log4j.appender.LOGFILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
- #mybatis显示SQL语句日志配置
- log4j.logger.com.ibatis=DEBUG
- log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
- log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
- log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
- log4j.logger.java.sql.Connection=DEBUG
- log4j.logger.java.sql.Statement=DEBUG
- log4j.logger.java.sql.PreparedStatement=DEBUG
mybatis.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>
<!-- 别名 -->
<!-- <typeAliases> <typeAlias type="com.yz.ssi.domain.User" alias="gguser"/> </typeAliases> -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="admin" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/yz/ssi/domain/user-resultmap.xml" />
<mapper resource="com/yz/ssi/mapper/user-mapper.xml" />
</mappers>
</configuration>
user-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和定义的Mapper接口对应,并实现其中的方法 -->
<mapper namespace="com.yz.ssi.mapper.UserMapper">
<insert id="addUser" parameterType="com.yz.ssi.domain.User">
<selectKey keyProperty="id" order="BEFORE" resultType="int">
select USER_SEQUENCES.Nextval from dual
</selectKey>
<![CDATA[insert into t_user(id,name,pwd) values(#{id},#{name},#{pwd})]]>
</insert>
<!-- 自动生成id策略 mysql 用 useGeneratedKeys="true" oracle 用 selectKey -->
<!-- <insert id="addAccount" useGeneratedKeys="true" keyProperty="account_id"
parameterType="account"> insert into account(account_id, status, username,
password) values(#{accountId}, #{status}, #{username}, #{password}) </insert> -->
<!-- <insert id="add" parameterType="vo.Category"> <selectKey resultType="java.lang.Short"
order="BEFORE" keyProperty="id"> SELECT SEQ_TEST.NEXTVAL FROM DUAL </selectKey>
insert into category (name_zh, parent_id, show_order, delete_status, description
) values (#{nameZh,jdbcType=VARCHAR}, #{parentId,jdbcType=SMALLINT}, #{showOrder,jdbcType=SMALLINT},
#{deleteStatus,jdbcType=BIT}, #{description,jdbcType=VARCHAR} ) </insert> -->
<select id="getAllUser" resultMap="com.yz.ssi.domain.userResultMap">
select * from t_user
</select>
<!-- <select id="getAllUser" resultType="list" resultMap="com.yz.ssi.domain.userResultMap">
<![CDATA[ select * from t_user ]]> </select> -->
<!-- <select id="getAccountById" parameterType="string" resultType="com.hoo.entity.Account"
resultMap="accountResultMap"> <![CDATA[ select * from account where account_id
= #{id} ]]> </select> -->
<!-- 根据selectKey语句生成主键 -->
<!-- <insert id="addAccount4Key" parameterType="account">
<selectKey keyProperty="account_id" order="BEFORE"
resultType="int">
select cast(random() * 10000 as Integer) a from #Tab
</selectKey>
insert into account(account_id, status, username,password)
values(#{accountId}, #{status}, #{username}, #{password})
</insert>
<update id="editAccount" parameterType="account">
update account set status = #{status}, username = #{username}, password = #{password}
where account_id = #{accountId}
</update>
<delete id="removeAccount" parameterType="int">
delete from account where account_id = #{id}
</delete> -->
</mapper>
user-resultmap.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">
<mapper namespace="com.yz.ssi.domain">
<resultMap type="com.yz.ssi.domain.User" id="userResultMap">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="pwd" column="pwd" />
</resultMap>
</mapper>
SqlMapper.java
package com.yz.ssi.mapper;
public interface SqlMapper {}
UserMapper.java
package com.yz.ssi.mapper;
import java.util.List;
import com.yz.ssi.domain.User;
public interface UserMapper extends SqlMapper {
public List<User> getAllUser();
public void addUser(User user);
}
public static void main(String[] args) throws Exception {
String resource = "\\mybatis.xml";
System.out.println(resource);
File f=new File(resource);
if (f.exists()) {
System.out.println("file exists");
}else throw new Exception("file exists");
// 加载mybatis 的配置文件(它也加载关联的映射文件)
Reader reader = Resources.getResourceAsReader(resource);
// 构建sqlSession 的工厂
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
.build(reader);
// 创建能执行映射文件中sql 的sqlSession
SqlSession session = sessionFactory.openSession();
// 映射sql 的标识字符串
String statement = "com.yz.ssi.mapper.UserMapper"
+ ".getAllUser";
// 执行查询返回一个唯一user 对象的sql
List<User> users = session.selectList(statement);
for (User user : users) {
System.out.println(user.getName());
}
}