MyBatis代码实例系列-03:MyBatis单张表简单实现增删改查 + log4j + 手动事务控制

超级通道:MyBatis代码实例系列-绪论

本章主要记录MyBatis单表增删改查 + log4j + 手动事务控制,涉及到的技术点有:
- SqlSession:MyBatis数据库连接会话,用来进行数据库操作。
- SqlSessionFactory:MyBatis数据库连接会话工厂,用来创建SqlSession连接。
- mybatis-config.xml:MyBatis总配置文件(名字随意),用来配置实体类别名、数据源、XML映射文件等。
- XML映射文件:实体对应的SQL配置文件,主要用来配置SQL方法、参数类型、返回类型和SQL语句。
- IDAODAO层接口,与XML映射文件对应,优化SqlSession的数据库操作方式。
- log4j:日志
- 手动事务控制:利用SqlSession完成对事务的提交commit()、回滚rollback()、关闭close()等.

1.业务场景与SQL

业务场景很简单,如下:

  1. 根据话题id查询一个话题信息。
  2. 查询所有的话题信息。
  3. 新增一个话题信息。
  4. 修改一个话题信息。
  5. 删除一个话题信息。
drop table topic;
create table `topic`(
    `id` int(5) unsigned not null auto_increment comment '话题',
    `title` varchar(20) not null comment '题目',
    `score` int(3) not null comment '分数',
    `answer` varchar(100) comment '答案',
    primary key(id)
)engine=InnoDB comment='话题' auto_increment=1 default charset=utf8;
insert into topic values(99999,'题目1',100,'你好吗?');

2.目录结构

src
\---main
    \---java
    |   \---pers
    |       \---hanchao
    |           \---himybatis
    |               \---curd
    |                   \---Topic.java
    |                   \---ITopicDAO.java
    |                   \---TopicApp.java
    \---resources
        \---mybatis-mappers
            \---Topic.xml
        \---log4j.properties
        \---mybatis-config.xml

3.MyBatis配置文件mybatis-config.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">
<!--MyBatis的总配置文件-->
<configuration>
    <!--类型依赖:配置Java类对应的别名,与Question.xml中的resultType相互对应-->
    <typeAliases>
        <!--通过XML+IDAO的配置方式,实现单表的增删改查-->
        <typeAlias type="pers.hanchao.himybatis.curd.Topic" alias="Topic"/>
    </typeAliases>
    <!--mybatis的数据库连接-->
    <environments default="dev">
        <environment id="dev">
            <!--事务管理-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/exam?useSSL=false"/>
                <property name="username" value="****"/>
                <property name="password" value="****"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射xml的路径配置-->
    <mappers>
        <mapper resource="mybatis-mappers/Topic.xml"/>
    </mappers>
</configuration>

4.实体类+IDAO+XML

4.1.Topic.java

package pers.hanchao.himybatis.curd;

/**
 * <p>话题</p>
 * @author hanchao 2018/1/26 23:56
 **/
public class Topic {
    /** 话题id */
    private Integer id;
    /** 题目 */
    private String title;
    /** 分数 */
    private Integer score;
    /** 答案 */
    private String answer;
    //constructor/toString/setter/getter
}

4.2.ITopicDAO.java

package pers.hanchao.himybatis.curd;

import java.util.List;
/**
 * <p>Topic的DAO层接口</p>
 * @author hanchao 2018/1/27 0:01
 **/
public interface ITopicDAO {
    /** 新增一个题目 */
    void insertTopic(Topic topic);
    /** 修改一个题目 */
    void updateTopic(Topic topic);
    /** 删除一个题目 */
    void deleteTopic(Integer id);
    /** 查询一个题目 */
    Topic queryTopicById(Integer id);
    /** 查询所有题目 */
    List<Topic> queryTopicList();
}

4.3.Topic.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">
<!--MyBatis的分配置文件,分别对应每个实体,用来配置SQL操作及SQL语句-->
<!--namespace,定义这个映射的命名域,这里指向Dao层接口-->
<!--先开发ITopicDAO,在开发Topic.xml-->
<mapper namespace="pers.hanchao.himybatis.curd.ITopicDAO">
    <!--新增一个话题-->
    <insert id="insertTopic" parameterType="Topic">
        INSERT INTO `topic`(id,title,score,answer) VALUE(#{id},#{title},#{score},#{answer})
    </insert>
    <!--修改一个话题-->
    <update id="updateTopic" parameterType="Topic">
        UPDATE `topic` SET title = #{title},score = #{score},answer = #{answer} WHERE id = #{id}
    </update>
    <!--删除一个话题-->
    <delete id="deleteTopic" parameterType="Integer">
        DELETE FROM `topic` WHERE id = #{id}
    </delete>
    <!--查询一个话题-->
    <select id="queryTopicById" parameterType="Integer" resultType="Topic">
        SELECT * FROM `topic` WHERE id = #{id}
    </select>
    <!--查询全部话题-->
    <select id="queryTopicList" resultType="Topic">
        SELECT * FROM `topic`
    </select>
</mapper>

说明:

  1. XMLnamespace(作用域)要与IDAO的类路径相对应
  2. XMLid要与IDAO的方法名相对应
  3. XMLparameterType(参数类型)要与IDAO的参数相对应
  4. XMLresultType(返回类型)要与IDAO的返回类型相对应
  5. XMLparameterType(参数类型)="Topic"中的"Topic"是实体Topic的别名,在总配置文件mybatis-config.xmltypeAlias配置的。可以不使用别名,直接使用全类名,如"pers.hanchao.himybatis.curd.Topic"
  6. XMLSQL语句中,#{}表征的是参数字段

5.测试类TopicApp.java

注意MyBatis执行过程和事务控制方式。

IDAO+XML配置的MyBatis执行过程简述:

  1. 通过Reader读取总配置文件
  2. 通过配置文件的数据源信息创建SqlSessionFactory(会话工厂)
  3. 通过SqlSessionFactory(会话工厂)打开SqlSession(会话)
  4. SqlSession(会话)通过IDAO.class创建DAO层的实例化对象,如problemDAO等等
  5. 通过调用DAO层的实例化对象(如problemDAO)的方法,实现SQL语句的查询。
  6. 如果SQL执行无问题,则进行SqlSession(会话)提交(commit
  7. 如果SQL执行有异常,则进行SqlSession(会话)回滚(rollback
  8. SqlSession(会话)关闭(close
  9. 结束

MyBatis的JDBC事务控制方式:

//创建数据库会话
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
    //增删改查
    ...
    //事务提交
    sqlSession.commit();
}catch (Exception e){
    //事务回滚
    sqlSession.rollback();
}finally {
    //关闭连接
    sqlSession.close();
}

TopicApp.java完整代码

package pers.hanchao.himybatis.curd;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>通过XML+IDAO配置MyBatis,实现单表的增删改查</p>
 * @author hanchao 2018/1/27 0:35
 **/
public class TopicApp {
    /** SqlSessionFactory用于创建SqlS */
    private static SqlSessionFactory sqlSessionFactory;
    /** Reader用于读取配置文件 */
    private static Reader reader;
    private static final Logger LOGGER = Logger.getLogger(TopicApp.class);

    static{
        try{
            //读取MyBatis总配置文件
            reader = Resources.getResourceAsReader("mybatis-config.xml");
            //根据配置文件创建SqlSessionFactory
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (IOException e) {
            e.printStackTrace();
            LOGGER.error("加载MyBatis配置文件出错!");
        }
    }

    /**
     * <p>简单的增删改查</p>
     * @author hanchao 2018/1/27 0:37
     **/
    public static void main(String[] args) {
        //创建数据库会话
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try{
            //调用IDAO
            ITopicDAO topicDAO = sqlSession.getMapper(ITopicDAO.class);
            //查询所有的话题
            showTopicList(topicDAO.queryTopicList());

             //新增一个话题
            Topic topic = new Topic(1,"題目1",100,"答案1");
            topicDAO.insertTopic(topic);
            LOGGER.info("新增一个话题:" + topic.toString());
            //查询所有的话题
            showTopicList(topicDAO.queryTopicList());

            //修改一個话题
            topic = new Topic(1,"题目1",88,"答案1111");
            topicDAO.updateTopic(topic);
            LOGGER.info("修改一个话题:" + topic.toString());
            //查询所有的话题
            showTopicList(topicDAO.queryTopicList());

            //删除一个话题
            topicDAO.deleteTopic(1);
            LOGGER.info("删除一个话题:id = 1");
            //查询所有的话题
            showTopicList(topicDAO.queryTopicList());

            //新增5个话题
            for (int i = 0; i < 5; i++) {
                int index = 5 + i;
                topic = new Topic(index,"题目" + index,60 + index,"答案" + index);
                topicDAO.insertTopic(topic);
                LOGGER.info("新增一个话题:" + topic.toString());
            }
            //查询所有的话题
            showTopicList(topicDAO.queryTopicList());

            //查询一个题目
            Topic topic1 = topicDAO.queryTopicById(9);
            LOGGER.info("查询一个话题,id = 9,result:" + topic1.toString());
            //事务提交
            sqlSession.commit();
        }catch (Exception e){
            //事务回滚
            sqlSession.rollback();
        }finally {
            //关闭连接
            sqlSession.close();
        }
    }

    /**
     * <p>打印所有话题</p>
     * @author hanchao 2018/1/27 0:21
     **/
    private static void showTopicList(List<Topic> topicList) {
        LOGGER.info("===================================显示当前所有话题===================================");
        //如果List无值,则打印无信息
        if (null == topicList || topicList.size() == 0){
            LOGGER.info("暂无话题.");
        }else {
            for (Topic topic : topicList){
                LOGGER.info(topic.toString());
            }
        }
        LOGGER.info("====================================================================================\n");
    }
}

6.result

日志级别=INFO的控制台信息

2018-01-28 14:45:09 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:45:09 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:45:09 INFO  TopicApp:53 - 新增一个话题:Topic{id=1, title='題目1', score=100, answer='答案1'}
2018-01-28 14:45:09 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=1, title='題目1', score=100, answer='答案1'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:45:09 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:45:09 INFO  TopicApp:60 - 修改一个话题:Topic{id=1, title='题目1', score=88, answer='答案1111'}
2018-01-28 14:45:09 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=1, title='题目1', score=88, answer='答案1111'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:45:09 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:45:09 INFO  TopicApp:66 - 删除一个话题:id = 1
2018-01-28 14:45:09 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:45:09 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:45:09 INFO  TopicApp:75 - 新增一个话题:Topic{id=5, title='题目5', score=65, answer='答案5'}
2018-01-28 14:45:09 INFO  TopicApp:75 - 新增一个话题:Topic{id=6, title='题目6', score=66, answer='答案6'}
2018-01-28 14:45:09 INFO  TopicApp:75 - 新增一个话题:Topic{id=7, title='题目7', score=67, answer='答案7'}
2018-01-28 14:45:09 INFO  TopicApp:75 - 新增一个话题:Topic{id=8, title='题目8', score=68, answer='答案8'}
2018-01-28 14:45:09 INFO  TopicApp:75 - 新增一个话题:Topic{id=9, title='题目9', score=69, answer='答案9'}
2018-01-28 14:45:09 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=5, title='题目5', score=65, answer='答案5'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=6, title='题目6', score=66, answer='答案6'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=7, title='题目7', score=67, answer='答案7'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=8, title='题目8', score=68, answer='答案8'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=9, title='题目9', score=69, answer='答案9'}
2018-01-28 14:45:09 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:45:09 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:45:09 INFO  TopicApp:82 - 查询一个话题,id = 9,result:Topic{id=9, title='题目9', score=69, answer='答案9'}

日志级别=DEBUG的控制台信息

2018-01-28 14:46:14 DEBUG LogFactory:54 - Logging initialized using 'class org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl' adapter.
2018-01-28 14:46:14 DEBUG PooledDataSource:54 - PooledDataSource forcefully closed/removed all connections.
2018-01-28 14:46:14 DEBUG PooledDataSource:54 - PooledDataSource forcefully closed/removed all connections.
2018-01-28 14:46:14 DEBUG PooledDataSource:54 - PooledDataSource forcefully closed/removed all connections.
2018-01-28 14:46:14 DEBUG PooledDataSource:54 - PooledDataSource forcefully closed/removed all connections.
2018-01-28 14:46:15 DEBUG JdbcTransaction:54 - Opening JDBC Connection
2018-01-28 14:46:15 DEBUG PooledDataSource:54 - Created connection 133250414.
2018-01-28 14:46:15 DEBUG JdbcTransaction:54 - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7f13d6e]
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==>  Preparing: SELECT * FROM `topic` 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==> Parameters: 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - <==      Total: 1
2018-01-28 14:46:15 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:46:15 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 1(Integer), 題目1(String), 100(Integer), 答案1(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:53 - 新增一个话题:Topic{id=1, title='題目1', score=100, answer='答案1'}
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==>  Preparing: SELECT * FROM `topic` 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==> Parameters: 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - <==      Total: 2
2018-01-28 14:46:15 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=1, title='題目1', score=100, answer='答案1'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:46:15 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:46:15 DEBUG updateTopic:54 - ==>  Preparing: UPDATE `topic` SET title = ?,score = ?,answer = ? WHERE id = ? 
2018-01-28 14:46:15 DEBUG updateTopic:54 - ==> Parameters: 题目1(String), 88(Integer), 答案1111(String), 1(Integer)
2018-01-28 14:46:15 DEBUG updateTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:60 - 修改一个话题:Topic{id=1, title='题目1', score=88, answer='答案1111'}
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==>  Preparing: SELECT * FROM `topic` 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==> Parameters: 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - <==      Total: 2
2018-01-28 14:46:15 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=1, title='题目1', score=88, answer='答案1111'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:46:15 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:46:15 DEBUG deleteTopic:54 - ==>  Preparing: DELETE FROM `topic` WHERE id = ? 
2018-01-28 14:46:15 DEBUG deleteTopic:54 - ==> Parameters: 1(Integer)
2018-01-28 14:46:15 DEBUG deleteTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:66 - 删除一个话题:id = 1
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==>  Preparing: SELECT * FROM `topic` 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==> Parameters: 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - <==      Total: 1
2018-01-28 14:46:15 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:46:15 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 5(Integer), 题目5(String), 65(Integer), 答案5(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:75 - 新增一个话题:Topic{id=5, title='题目5', score=65, answer='答案5'}
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 6(Integer), 题目6(String), 66(Integer), 答案6(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:75 - 新增一个话题:Topic{id=6, title='题目6', score=66, answer='答案6'}
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 7(Integer), 题目7(String), 67(Integer), 答案7(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:75 - 新增一个话题:Topic{id=7, title='题目7', score=67, answer='答案7'}
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 8(Integer), 题目8(String), 68(Integer), 答案8(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:75 - 新增一个话题:Topic{id=8, title='题目8', score=68, answer='答案8'}
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==>  Preparing: INSERT INTO `topic`(id,title,score,answer) VALUE(?,?,?,?) 
2018-01-28 14:46:15 DEBUG insertTopic:54 - ==> Parameters: 9(Integer), 题目9(String), 69(Integer), 答案9(String)
2018-01-28 14:46:15 DEBUG insertTopic:54 - <==    Updates: 1
2018-01-28 14:46:15 INFO  TopicApp:75 - 新增一个话题:Topic{id=9, title='题目9', score=69, answer='答案9'}
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==>  Preparing: SELECT * FROM `topic` 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - ==> Parameters: 
2018-01-28 14:46:15 DEBUG queryTopicList:54 - <==      Total: 6
2018-01-28 14:46:15 INFO  TopicApp:99 - ===================================显示当前所有话题===================================
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=5, title='题目5', score=65, answer='答案5'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=6, title='题目6', score=66, answer='答案6'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=7, title='题目7', score=67, answer='答案7'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=8, title='题目8', score=68, answer='答案8'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=9, title='题目9', score=69, answer='答案9'}
2018-01-28 14:46:15 INFO  TopicApp:105 - Topic{id=99999, title='题目1', score=100, answer='你好吗?'}
2018-01-28 14:46:15 INFO  TopicApp:108 - ====================================================================================

2018-01-28 14:46:15 DEBUG queryTopicById:54 - ==>  Preparing: SELECT * FROM `topic` WHERE id = ? 
2018-01-28 14:46:15 DEBUG queryTopicById:54 - ==> Parameters: 9(Integer)
2018-01-28 14:46:15 DEBUG queryTopicById:54 - <==      Total: 1
2018-01-28 14:46:15 INFO  TopicApp:82 - 查询一个话题,id = 9result:Topic{id=9, title='题目9', score=69, answer='答案9'}
2018-01-28 14:46:15 DEBUG JdbcTransaction:54 - Rolling back JDBC Connection [com.mysql.jdbc.JDBC4Connection@7f13d6e]
2018-01-28 14:46:15 DEBUG JdbcTransaction:54 - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@7f13d6e]
2018-01-28 14:46:15 DEBUG JdbcTransaction:54 - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@7f13d6e]
2018-01-28 14:46:15 DEBUG PooledDataSource:54 - Returned connection 133250414 to pool.
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值