- 浏览: 84501 次
- 性别:
- 来自: 杭州
-
最新评论
-
supremehover:
讲得很好,我看了源码也确实如此,受益匪浅!
源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后 -
azyubing:
拜读好文!找到一个笔误,把postProcessAfterIn ...
也谈Spring Bean的生命周期 -
淡竹叶:
可以参考open source perfspy:http:// ...
Spring之LoadTimeWeaver——一个需求引发的思考 -
real_junlin:
在jetty下能够运行的解决方法是啥?
一个XML解析失败排查过程的分享 -
Charles2628:
哥,你没说清楚额。要输出这样一行codeInitSequenc ...
源码解析:init-method、@PostConstruct、afterPropertiesSet孰先孰后
犹记得去年的这个时候,iBatis忽然声明迁移至Google Code,并改名为MyBatis。时已一载多,不怕众看官笑话,今天第一次试用MyBatis,缘由还是问答频道的一个问题。
Hmmm…本文是分享给MyBatis初学者的。如果你是MyBatis老者,那建议不用去阅读下面的内容,也可提提建议、揪揪问题神马。J
MyBatis在配置和使用上,都发生了一定的变化。因为iBatis使用的较多,所以无论搭建MyBatis测试环境,还是使用MyBatis里面的一些API,都还算比较轻松。
闲话少说,本次测试使用的是MyBatis-3.0.1 + mybatis-spring-1.0.0-RC3进行测试的,并使用Maven (maven 2.1.x) 管理测试工程。
先说下为什么用mybatis-spring:由于目前Spring官方还没有出整合MyBatis的API所以需要引入mybatis-sping这个工具包(该工具包是由MyBatis官方推出的)。
首先,我们使用Maven创建一个测试工程,Maven指令如下:
mvn archetype:create -DgroupId=com.shansun.mybatis -DartifactId=lb-ibatis-test
然后,我们在pom文件中添加mybatis及mybatis-spring的依赖。如下:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.0.0-RC3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.9</version> </dependency>
注意,这里我们额外还引入了mysql,commons-dbcp这两个依赖,他们在数据库访问时会用到,否则会报类似"com.mysql.jdbc.Driver not found"的错误。
然后,我们再src/main/resources目录下新建一个配置文件mybatis-test-ds.xml,里面配置数据源、Mapper的ConfigLocations等信息,具体内容如下:
<?xml version="1.0" encoding="GBK"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 设置应用Spring注解扫描的包路径,我们后面的DAO会使用注解方式@Component配置Bean --> <context:component-scan base-package="com.shansun.mybatis.model"></context:component-scan> <!-- 设置数据源信息 --> <bean id="dataSourceImpl" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://[数据库地址]:3306/[数据库名称]?characterEncoding=UTF-8</value> </property> <property name="username"> <value>[用户名]</value> </property> <property name="password"> <value>[密码]</value> </property> </bean> <!-- 设置MyBatis的SessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSourceImpl"/> <!-- 这里指定Mapper路径的配置信息 --> <property name="configLocation" value="classpath:ibatis/sqlMapConfig.xml"/> </bean> </beans>
同时,我们再于src/main/resources/ibatis/路径下新建上述配置文件中提到的sqlMapConfig.xml,这个文件时用于配置Mapper的路径的,这样处理的好处是方便mapper的统一管理。文件内容如下:
<?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> <mappers> <mapper resource="ibatis/UserMapper.xml" /> </mappers> </configuration>
观察上面这个文件,我们发现,在mappers中又指定了一个路径UserMapper.xml。没错,这个就是(动态)SQL语句等编写的地方。例如,我们要实现一个查询方法:根据用户编号(user_id)查询得到用户信息——用户名、性别、年龄等。
好了,到这里我们暂停一下,先不去关心UserMapper的内容。还是先说明下User表结构会对后文的理解有所帮助。User表结构如下:
字段名 |
类型 |
长度 |
备注 |
Id |
Bigint |
20 |
主键 |
User_id |
Bigint |
20 |
用户编号 |
User_nick |
Varchar |
20 |
用户昵称 |
Sex |
Tinyint |
1 |
性别:0-男,1-女 |
Age |
Tinyint |
3 |
年龄 |
Gmt_create |
Date |
|
创建时间 |
Gmt_modified |
Date |
|
修改时间 |
在了解User表结构后,我们紧接着创建UserDO类,也就是Hibernate中所谓的Entity。创建DO的原则是与数据表一一对应。多说一句,DO、DAO、Mapper这些其实都可以借助abator工具自动生成代码。看下UserDO这个类:
package com.shansun.mybatis.model; import java.util.Date; public class UserDO { private Long id; private Long userId; private String userNick; private Byte sex; private Byte age; private Date gmtCreate; private Date gmtModified; ......setter/getter...... }
至此,我们了解了表结构并创建完Entity类后,我们再继续上面打断的内容,完成UserMapper.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.shansun.mybatis.model.UserMapper"> <resultMap id="ibatorgenerated_BaseResultMap" type="com.shansun.mybatis.model.UserDO"> <result column="id" property="id" jdbcType="BIGINT" /> <result column="user_id" property="userId" jdbcType="BIGINT" /> <result column="user_nick" property="userNick" jdbcType="BIGINT" /> <result column="sex" property="sex" jdbcType="SMALLINT" /> <result column="age" property="age" jdbcType="SMALLINT" /> <result column="gmt_create" property="gmtCreate" jdbcType="TIMESTAMP" /> <result column="gmt_modified" property="gmtModified" jdbcType="TIMESTAMP" /> </resultMap> <sql id="commonColumns"> id, user_id, user_nick, sex, age, gmt_create, gmt_modified </sql> <select id="queryUserByUID" parameterType="Long" resultMap="ibatorgenerated_BaseResultMap"> select <include refid="commonColumns"/> from user where user_id=#{userId} limit 1; </select> </mapper>
个中的标签含义,我就不多介绍了,网上这些信息一搜一箩筐,而且比我介绍的要详细易懂。整个配置就完成了一个DB操作,即根据user_id查询用户信息,返回UserDO。
配置方面的东东,我们都已经搞定了,下面可以编码实现上述提到的查询用户信息的DAO操作了。UserDAO及其实现类如下所示:
package com.shansun.mybatis.model; public interface UserDAO { public UserDO queryUserByUID(Long userId); }
package com.shansun.mybatis.model; import org.mybatis.spring.support.SqlSessionDaoSupport; @Component public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO { @Override public UserDO queryUserByUID(Long userId) { return (UserDO) getSqlSession().selectOne("com.shansun.mybatis.model.UserMapper.queryUserByUID", userId); } }
细心的你会主要到UserDAOImpl继承了SqlSessionDaoSupport,这样做的目的是方便获取sqlSession。
好了,上述的DAO操作代码业已完成,我们编写测试的主方法吧(笔者很懒,没有做单元测试了)。
public class Main { public static void main(String[] args) { long userId = 198805; ApplicationContext aContext = new FileSystemXmlApplicationContext("classpath:ibatis-test-ds.xml"); UserDAO userMapper = aContext.getBean(UserDAO.class); UserDO userDO = userMapper.queryUserByUID(userId); System.out.println(userDO.toString()); } }
嗯,测试下有没有查询到你期待已久的数据记录吧 J
By Mr.Chris
评论
有必要么?

项目前一段时间用ibatis,后续的开发可否用mybatis?
HI,你这边试验过mybatis,ibatis共存么
有必要么?

项目前一段时间用ibatis,后续的开发可否用mybatis?
用bboss persistent吧,提供全套解决方案,详情参考文章:
http://www.iteye.com/wiki/bbossgroups/3092-mvc-bboss-config
有必要么?

项目前一段时间用ibatis,后续的开发可否用mybatis?
有必要么?

相当的被催
我的配置如果SQL语句出错控制台连异常信息都不输出,只有JSP页面有异常。
刚看了下MyBatis的日志结构,如果要输出执行的sql(Executing SQL),只要做到在log4j.xml/log4j.properties里有
java.sql.PreparedStatement的logger配置并且保证log4j.xml/log4j.properties在classpath下即可。
可以参看下PreparedStatementLogger这个类,这个类代理了PreparedStatement,并且在execute、executeUpdate、executeQuery等方法执行前,输出executing sql的。
我的配置如果SQL语句出错控制台连异常信息都不输出,只有JSP页面有异常。
纠结了很长时间,没弄出来,报错时不显示SQL
刚才试了一下,是OK的,我的依赖包是:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>
log4j.properties
# Rules reminder: # DEBUG < INFO < WARN < ERROR < FATAL # Global logging configuration log4j.rootLogger=INFO, stdout ## Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %C: %m%n log4j.logger.org.apache.ibatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG
1.首先搂主给出的例子和代码明显是ibatis的风格.并不是mybatis.因为mybatis已经不建议使用DAO类(虽然楼主例子的名字叫mapper)了,而是Mapper接口.所以看到extends SqlSessionDaoSupport感到很怪,因为是在介绍Mybatis.
2.ibatis和mybatis在xml的映射配置变化很大,这也是mybatis区别与ibatis的重要特点之一.比如:1对1,1对多,解决N+1,多条件判断. 楼主的例子(最简单的select)一个都没涉及到,都是ibatis风格,所以没有mybatis特点.
3.我没用过spring,不知道spring是怎么管理session的. Mybatis明确指出每次操作要对session进行处理,但是又没有看到.
4.Mybatis对annotation支持.虽然我个人不是很喜欢这个,很乱.但是如果楼主把例子弄成 @Select ...... 至少也看到了mybatis的特点.(毕竟一个都没有嘛...)
综上所述,感觉是在介绍ibatis,不是mybatis.
呵呵 有道理啊。
本文主要还是偏向配置MyBatis的,而且确实有很多ibatis的风格,比如继承了SqlSessionDaoSupport。
至于MyBatis的新特性,呵呵,我本想就写个10 Minute Tutorial的。
And我也是MyBatis的新手,所以写出来也是让大家帮忙看有哪些误区、盲点神马的。
总之,很感谢你的批评和建议吧。
1.首先搂主给出的例子和代码明显是ibatis的风格.并不是mybatis.因为mybatis已经不建议使用DAO类(虽然楼主例子的名字叫mapper)了,而是Mapper接口.所以看到extends SqlSessionDaoSupport感到很怪,因为是在介绍Mybatis.
2.ibatis和mybatis在xml的映射配置变化很大,这也是mybatis区别与ibatis的重要特点之一.比如:1对1,1对多,解决N+1,多条件判断. 楼主的例子(最简单的select)一个都没涉及到,都是ibatis风格,所以没有mybatis特点.
3.我没用过spring,不知道spring是怎么管理session的. Mybatis明确指出每次操作要对session进行处理,但是又没有看到.
4.Mybatis对annotation支持.虽然我个人不是很喜欢这个,很乱.但是如果楼主把例子弄成 @Select ...... 至少也看到了mybatis的特点.(毕竟一个都没有嘛...)
综上所述,感觉是在介绍ibatis,不是mybatis.
一看就是没有好好看mybatis文档,能跑起来才怪。
#userId#是ibatis2.×写法
#{userId}才是mybatis的写法
好吧 学到了 但是这么用这是OK的 不信你试试
这还用试?我用了半年了
谢谢chat的指点,我刚看了mybatis的源码,确实不再支持#name#的写法了。
在SqlSourceBuilder中,parse方法如下:
public SqlSource parse(String originalSql, Class parameterType) { ParameterMappingTokenHandler handler = new ParameterMappingTokenHandler(configuration, parameterType); GenericTokenParser parser = new GenericTokenParser("#{", "}", handler); String sql = parser.parse(originalSql); return new StaticSqlSource(configuration, sql, handler.getParameterMappings()); }
一看就是没有好好看mybatis文档,能跑起来才怪。
#userId#是ibatis2.×写法
#{userId}才是mybatis的写法
好吧 学到了 但是这么用这是OK的 不信你试试
这还用试?我用了半年了
http://topic.csdn.net/u/20110516/20/6eeb1cd8-ca01-4539-baf8-ddb1b45434f6.html
#mybatis
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,Stdout
纠结了很长时间,没弄出来,报错时不显示SQL
刚才试了一下,是OK的,我的依赖包是:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.6</version> </dependency>
log4j.properties
# Rules reminder: # DEBUG < INFO < WARN < ERROR < FATAL # Global logging configuration log4j.rootLogger=INFO, stdout ## Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %C: %m%n log4j.logger.org.apache.ibatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG
纠结了很长时间,没弄出来,报错时不显示SQL
XML code
# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=INFO, stdout
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %C: %m%n
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
MyBatis的还没用过哦,但是你可以看看这个帖子—— 如何输出mybatis里的SQL?,或许对你有帮助哦……我明天去公司也试一下

纠结好几天了,还没弄出来,期待您的答复。
log4j-1.2.13.jar
commons-logging-1.1.1.jar
commons-logging-api-1.0.4.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
这些jar 包都回进去了还是不行。
不报错时显示SQL,一报错就不显示SQL了, 而且报错时JSP 页面输出异常信息,控制台不输出异常信息。
同一个MyEclipse, 同一个Tomcat, 别的项目正常,就这个项目有问题,
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- Copyright 2010 The myBatis Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-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/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" default-autowire="byName"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@**"/> <property name="username" value="**"/> <property name="password" value="**"/> <property name="maxActive" value="150"/> </bean> <!-- transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- enable component scanning (beware that this does not enable mapper scanning!) --> <context:component-scan base-package="com.apeksys.qms.service" /> <context:component-scan base-package="com.apeksys.qms.action" /> <!-- enable autowire <context:annotation-config /> --> <!-- enable transaction demarcation with annotations --> <tx:annotation-driven /> <aop:aspectj-autoproxy/> <!-- propagration 表示事务传播特性, 使用required 时表示:当检测到以create开关的方法时先看有没有 开启事务,如果开启事务则放进事务中去,如果没有则新建一个事务放进去; read-only="true" 数据库的只读属性,当该方法在读时,其它方法不能再去写,保证一个事务的完整性; --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="create*" propagation="REQUIRED" read-only="true" rollback-for="Throwable"/> <tx:method name="update*" propagation="REQUIRED" read-only="true" rollback-for="Throwable"/> <tx:method name="delete*" propagation="REQUIRED" read-only="true" rollback-for="Throwable"/> <tx:method name="import*" propagation="REQUIRED" read-only="true" rollback-for="Throwable"/> <!-- 除了上面的方法,其它方法全部是只读 --> <tx:method name="*" read-only="true"/> </tx:attributes> </tx:advice> <aop:config proxy-target-class="true"> <!-- service 切入点 --> <aop:pointcut id="serviceMethods" expression="execution(* com.apeksys.qms.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/> </aop:config> <!-- define the SqlSessionFactory, notice that configLocation is not needed when you use MapperFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> </bean> <!-- scan for mappers and let them be autowired --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.apeksys.qms.mapper.dao" /> </bean> <!-- <bean id="rootService" class="com.apeksys.qms.service.RootService"> <constructor-arg index="0" ref="sysUserInfoService"/> </bean> --> </beans>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 节点加载顺序 context-param > listener > filter > servlet --> <display-name>Quanlity Management System</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- <listener> <listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class> </listener> --> <filter> <filter-name>loginFilter</filter-name> <filter-class>com.apeksys.qms.support.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> </filter-mapping> <servlet> <servlet-name>JSONRPCServlet</servlet-name> <servlet-class>com.metaparadigm.jsonrpc.JSONRPCServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JSONRPCServlet</servlet-name> <url-pattern>/JSON-RPC</url-pattern> </servlet-mapping> <taglib> <taglib-uri>/page</taglib-uri> <taglib-location>/WEB-INF/pageTag.tld</taglib-location> </taglib> <!-- <error-page> <exception-type>java.lang.Exception</exception-type> <location>/system/error.jsp</location> </error-page> <error-page> <error-code>404</error-code> <location>/system/error.jsp</location> </error-page> <error-page> <error-code>500</error-code> <location>/system/error.jsp</location> </error-page> --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
用到的Jar 包
aopalliance-1.0.jar
asm-3.1.jar
aspectjweaver-1.5.4.jar
cglib-2.2.jar
commons-beanutils-1.8.0.jar
commons-cli-2.0-SNAPSHOT.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-dbcp-1.3.jar
commons-fileupload-1.2.1.jar
commons-httpclient-3.0.1.jar
commons-io-1.3.2.jar
commons-lang-2.3.jar
commons-logging-api-1.0.4.jar
commons-pool-1.5.5.jar
ezmorph-1.0.3.jar
freemarker-2.3.16.jar
javassist-3.4.ga.jar
json-lib-2.1-jdk15.jar
jsonrpc-1.0.jar
jstl-1.2.jar
junit-3.8.1.jar
log4j-1.2.13.jar
mybatis-3.0.4.jar
mybatis-spring-1.0.0.jar
ognl-3.0.jar
org.springframework.aop-3.0.4.RELEASE.jar
org.springframework.asm-3.0.4.RELEASE.jar
org.springframework.aspects-3.0.4.RELEASE.jar
org.springframework.beans-3.0.4.RELEASE.jar
org.springframework.context-3.0.4.RELEASE.jar
org.springframework.context.support-3.0.4.RELEASE.jar
org.springframework.core-3.0.4.RELEASE.jar
org.springframework.expression-3.0.4.RELEASE.jar
org.springframework.jdbc-3.0.4.RELEASE.jar
org.springframework.test-3.0.4.RELEASE.jar
org.springframework.transaction-3.0.4.RELEASE.jar
org.springframework.web-3.0.4.RELEASE.jar
spring-tx-3.0.5.RELEASE.jar
struts2-convention-plugin-2.2.1.jar
struts2-core-2.2.1.jar
struts2-json-plugin-2.2.1.jar
struts2-junit-plugin-2.2.1.jar
struts2-spring-plugin-2.2.1.jar
xwork-core-2.2.1.jar
ojdbc15.jar
commons-logging-1.1.1.jar
slf4j-api-1.5.8.jar
slf4j-log4j12-1.5.8.jar
纠结了很长时间,没弄出来,报错时不显示SQL
XML code
# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=INFO, stdout
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %5p %C: %m%n
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
MyBatis的还没用过哦,但是你可以看看这个帖子—— 如何输出mybatis里的SQL?,或许对你有帮助哦……我明天去公司也试一下

纠结好几天了,还没弄出来,期待您的答复。
相关推荐
MyBatis是一款流行的Java持久层框架,它的设计理念是通过简单的XML或注解用于配置和映射原始类型、接口和Java POJOs(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。MyBatis可以与各种数据库交互,...
在MyBatis中,`mybatis-3-config.dtd` 和 `mybatis-3-mapper.dtd` 是两个至关重要的DTD(Document Type Definition)文件,它们定义了MyBatis配置文件和映射文件的结构和规则。 首先,让我们深入了解一下`mybatis-3...
MyBatis3 是一款流行的Java持久层框架,它简化了数据库操作,使开发人员能够将SQL语句直接集成到XML映射文件或Java代码中,实现了数据访问对象(DAO)与业务逻辑的解耦。本教程旨在深入讲解MyBatis3的核心概念、配置...
MyBatis3是一款深受开发者喜爱的持久层框架,它提供了灵活的SQL映射和对象关系映射功能,使得Java开发人员能够方便地处理数据库操作。本教程旨在带你从零开始,逐步掌握MyBatis3的核心概念和技术,实现数据库操作的...
MyBatis 3.x 源码深度解析与最佳实践 MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计...
在mybatis-3-mybatis-3.5.8.zip源码中,我们可以深入理解MyBatis的工作原理和设计模式。这个版本的MyBatis包含以下几个主要模块: 1. **SqlSessionFactoryBuilder**: 用于构建SqlSessionFactory,它是MyBatis的核心...
mybatis3 中文手册, 官方版本,mybatis入门必读
mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架mybatis框架...
mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis练习3mybatis...
3. **SqlSessionFactory**:这是MyBatis的核心,用于创建SqlSession实例。SqlSessionFactory是线程安全的,可以长期保存,多次重复使用。 4. **SqlSession**:SqlSession代表数据库的一次会话,可以执行SQL命令和...
mybatis3 jar mybatis3 jar mybatis3 jar
MyBatis 3 是一款流行的Java持久层框架,它提供了灵活的映射机制,使得数据库操作与对象模型之间能够高效地进行数据交换。本用户指南包括了中文和英文两个版本,帮助开发者深入理解和使用MyBatis 3。 一、MyBatis...
然后打开eclipse ->Window->prefenrence->XML->XML Catalog->User Specifiled Entreis->Add->Location(此处是你放dtd文件的位置例如:D:\mybatis\mybatis-3-config.dtd)->Key(如果更改config,此处应该是:-//...
Mybatis3Demo是一个示例项目,它展示了Mybatis3框架的各种使用方式。Mybatis3是一个优秀的持久层框架,它简化了Java开发中的数据库操作,通过XML或注解方式配置,可以将SQL语句与Java代码紧密集成,提供更加灵活的...
在 Mybatis 中,`mybatis-3-mapper.dtd` 文件扮演着至关重要的角色,它是 Mybatis 映射器接口的定义文件,用于验证 XML 映射文件的语法正确性。 `mybatis-3-mapper.dtd` 文件是基于 DTD(Document Type Definition...
MyBatis3是一款深受开发者喜爱的轻量级Java持久层框架,它简化了数据库操作,提供了灵活的SQL映射机制,使得开发人员可以更方便地处理数据库查询、更新等任务。这个“MyBatis3 教程 中文完整版”包含的PDF文件,将为...