第一步创建一个Maven项目:

第二步:
2.1引入框架所需jar包
项目所依赖的jar包如下,其中加粗的是SpringMVC所需要的依赖包:
Maven: aopalliance:aopalliance:1.0
Maven: com.google.protobuf:protobuf-java:3.11.4
Maven: commons-dbcp:commons-dbcp:1.4
Maven: commons-pool:commons-pool:1.6
Maven: javax.servlet:javax.servlet-api:3.1.0
Maven: jstl:jstl:1.2
Maven: junit:junit:4.13
Maven: log4j:log4j:1.2.17
Maven: mysql:mysql-connector-java:8.0.25
Maven: org.aspectj:aspectjweaver:1.9.6
Maven: org.hamcrest:hamcrest:2.2
Maven: org.hamcrest:hamcrest-core:2.2
Maven: org.mybatis:mybatis:3.5.6
Maven: org.mybatis:mybatis-spring:2.0.6
Maven: org.springframework:spring-aop:5.3.8
Maven: org.springframework:spring-beans:5.3.8
Maven: org.springframework:spring-context:5.3.8
Maven: org.springframework:spring-core:5.3.8
Maven: org.springframework:spring-expression:5.3.8
Maven: org.springframework:spring-jcl:5.3.8
Maven: org.springframework:spring-jdbc:5.3.8
Maven: org.springframework:spring-tx:5.3.8
Maven: org.springframework:spring-web:5.3.8
Maven: org.springframework:spring-webmvc:5.3.8
完整的pom文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bdqn</groupId>
<artifactId>mavens</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mavens</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 引入mybatis包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- 引入Log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- 引入mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--引入servlet包-->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.41</version>
</dependency>
<!--引入jstl包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--引入Redis包-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.2.0-beta4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.aspectj</groupId>-->
<!-- <artifactId>aspectjweaver</artifactId>-->
<!-- <version>1.9.6</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.6</version>
</dependency>
<!--Spring框架与MyBatis框架整合jar包装 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<!--Spring框架对数据源支持的jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!--具体的数据源操作使用的技术 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.2.0</version>
</dependency>
<!-- 引入MyBait(数据库操作框架) -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.16</version>
</dependency>
<!-- 引入Log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<!-- 引入Spring MVC 框架所需的 jar 文件 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.15</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.15</version>
</dependency>
</dependencies>
</project>
2.2 按规范建立项目目录结构
第三步 建立项目目录结构
分包管理项目资源可以让项目结构更清晰,组织更合理,并且按照业界标准执行,大家都能看懂你的项目结构,这里就不要随意发挥了,一定按这个目录结构来!

项目包结构说明:
java、resource、webapp这三个目录应该是在同一层级(src/main/java)中,IDEA是严格按照目录对应的用途进行功能划分的,各目录说明如下:
- java 源代码,此目录存放java源代码。
- controller 控制器,MVC模式的核心控制器层代码。
- service 业务逻辑层(也叫服务层),处理业务逻辑的代码,通常被控制器调用。
- mapper 数据访问层,处理数据访问相关的代码,这里使用MyBatis实现,通常被服务层调用。
- pojo 实体类,通常与数据库中的表对应,封装成实体类,在各层级之间传递数据。
- resources 配置文件,Spring、SpringMVC、MyBatis、数据源、日志等配置文件均放在此处。另外,使用MyBatis时通常我们会把Mapper映射配置放置在resources/mapper目录下。
- webapp Web页面资源,包含页面组件、CSS、JS、图片和页面等Web资源。
- webapp/WEB-INF Web资源中,受保护的目录,直接通过浏览器URL是访问不到该目录下的资源的,可以使用SpringMVC的视图解析器访问到这个目录下的视图。
- web.xml 是Web项目的核心配置文件(有时候项目中不一定有,没有的时候会默认使用Web容器中的web.xml配置),主要用来配置Filter、Listener、Servlet等。
三、编写配置文件
3.1 日志配置 log4j.properties
日志是用来记录项目中代码执行的流程,主要提供溯源和排错两大功能,几乎每个项目都会用到。log4j是一款优秀的日志工具,配置方法简单,放在resources目录下,并命名为log4j.properties将会被自动读取,注意:名字错了是读取不到的。
log4j.properties
log4j.rootLogger=DEBUG, CONSOLE,file
log4j.logger.com.bdqn.mapper=debug
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
log4j.logger.java.sql.ResultSet=debug
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m %n
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%n
log4j.logger.com.opensymphony.xwork2=error
3.2 编写实体类
/**
* SysUser 用户实体类
*
* @aurhor Administrator whs
* @since 2024/7/19
*/
public class SysUser {
private Integer id; // id
private String account; // 用户编码
private String realName; //用户名称
private String password; //用户密码
private Integer sex; //性别
private Date birthday; //出生日期
private String phone; // 电话
private String address; //地址
private Integer roleId; //创建者
private Date createdTime; //创建时间
private Integer updatedUserId; //更新者
private Date updateTime; // 更新时间
private Integer age; // 年龄
private String roleIdName; //角色名称
@Override
public String toString() {
return "SysUser{" +
"id=" + id +
", account='" + account + '\'' +
", realName='" + realName + '\'' +
", password='" + password + '\'' +
", sex=" + sex +
", birthday=" + birthday +
", phone='" + phone + '\'' +
", address='" + address + '\'' +
", roleId=" + roleId +
", createTime=" + createdTime +
", updatedUserId=" + updatedUserId +
", updateTime=" + updateTime +
", age=" + age +
", roleIdName='" + roleIdName + '\'' +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getPassWord() {
return password;
}
public void setPassWord(String passWord) {
this.password = passWord;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Date getCreateTime() {
return createdTime;
}
public void setCreateTime(Date createTime) {
this.createdTime = createTime;
}
public Integer getUpdatedUserId() {
return updatedUserId;
}
public void setUpdatedUserId(Integer updatedUserId) {
this.updatedUserId = updatedUserId;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getRoleIdName() {
return roleIdName;
}
public void setRoleIdName(String roleIdName) {
this.roleIdName = roleIdName;
}
}
3.3 数据库DAO接口 SysUserMapper.java
public interface SysUserMapper {
/**
* 添加用户信息
* @param sysUser
* @return
*/
public int addSysUser(SysUser sysUser);
/**
* 修改用户信息
* @param sysUser
* @return
*/
public int updateSysUser(SysUser sysUser);
/**
* 删除用户信息
* @param id
* @return
*/
public int deleteSysUser(int id);
}
3.4 MyBatis映射文件 SysUserMapper.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.bdqn.ch08.mapper.SysUserMapper">
<!-- 修改-->
<update id="updateSysUser" parameterType="sysUser">
update t_sys_user
<trim prefix="set" suffixOverrides="," suffix="where id =#{id} ">
<if test="account != null and account!='' ">
account=#{account},
</if>
<if test="realName != null and realName!=''">
realName=#{realName},
</if>
<if test="password != null and password!=''">
password=#{password},
</if>
<if test="phone != null and phone!=''">
phone=#{phone},
</if>
<if test="address != null and address!=''">
address=#{address},
</if>
</trim>
</update>
<!-- 删除-->
<delete id="deleteSysUser" parameterType="sysUser">
delete from t_sys_user where id = #{id}
</delete>
<!-- 添加-->
<insert id="addSysUser" parameterType="com.bdqn.ch08.pojo.SysUser">
insert into t_sys_user(account,realName,passWord,sex,birthday,phone,address,roleId,updatedUserId)
values (#{account},#{realName},#{passWord},#{sex},#{birthday},#{phone},#{address},#{roleId},#{updatedUserId})
</insert>
3.5 服务层接口 SysUserService.java
/**
* 用户模块业务接口
*/
public interface SysUserService {
/**
* 添加用户信息
* @param sysUser
* @return
*/
public int addSysUser(SysUser sysUser);
/**
* 修改用户信息
* @param sysUser
* @return
*/
public int updateSysUser(SysUser sysUser);
/**
* 删除用户信息
* @param id
* @return
*/
public int deleteSysUser(int id);
}
3.6 服务层接口实现类 SysUserServiceImpl.java
/**
* SysUserServiceImpl
*
* @aurhor Administrator whs
* @since 2024/7/19
*/
@Scope("prototype")
//@Transactional // 为该类的所有业务方法统一添加事务处理
@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {
@Autowired //@ Resource
private SysUserMapper sysUserMapper;
@Transactional(propagation = Propagation.SUPPORTS)
public SysUserMapper getSysUserMapper() {
return sysUserMapper;
}
public void setSysUserMapper(SysUserMapper sysUserMapper) {
this.sysUserMapper = sysUserMapper;
}
/**
* 添加用户信息
*
* @param sysUser
* @return
*/
@Override
public int addSysUser(SysUser sysUser) {
return sysUserMapper.addSysUser(sysUser);
}
/**
* 修改用户信息
*
* @param sysUser
* @return
*/
@Override
public int updateSysUser(SysUser sysUser) {
return sysUserMapper.updateSysUser(sysUser);
}
/**
* 删除用户信息
*
* @param id
* @return
*/
@Override
public int deleteSysUser(int id) {
return sysUserMapper.deleteSysUser(id);
}
}
3.6 配置MyBatis核心配置文件
<?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="logImpl" value="STDOUT_LOGGING"/>
<!--全自动映射级别-->
<setting name="autoMappingBehavior" value="FULL" />
</settings>
<!-- 类型别名 -->
<typeAliases>
<package name="com.bdqn.pojo" />
</typeAliases>
</configuration>
3.7 最重要的是 配置Spring 核心配置文件
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
">
<!-- 使用 Spring 配置文件配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
<!-- <value><![CDATA[jdbc:mysql://127.0.0.1:3306/dao?serverTimezone=GMT-8]]></value>-->
<property name="url" value="jdbc:mysql://localhost:3306/dao?serverTimezone=GMT-8"/>
<property name="username" value="root"></property>
<property name="password" value="whs"></property>
</bean>
<!-- 通过 Spring 配置文件创建SqlSessionFactory -->
<!-- 配置 SqlSessionFactoryBean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 引用数据源组件-->
<property name="dataSource" ref="dataSource"/>
<!-- 引用MyBatis配置文件中的配置-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!-- 配置SQL映射文件信息-->
<property name="mapperLocations">
<list>
<value>classpath:SysUserMapper.xml</value>
</list>
</property>
</bean>
<!-- 使用 MapperScannerConfigurer 注入映射器 配置DAO -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bdqn.ch08.mapper"/>
</bean>
<!-- 配置扫描注解定义的业务Bean-->
<context:component-scan base-package = "com.bdqn.ch08.service"/>
<!-- 使用Spring框架的声明事务实现事务管理 -->
<!-- 定义事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven/>
<!-- 设置事务属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" propagation="SUPPORTS"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 定义切面-->
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* com.bdqn.ch08.service..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
</aop:config>
<!-- 使用注解实现事务处理 -->
<!-- 定义事务管理器-->
<bean id="deleteUpdateSupplier" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven/>
<!-- 因为 <bean id="deleteUpdateSupplier"/> 指定了id 所以 <tx:annotation-driven/> 可以不再需要指定id-->
<!-- 设置事务属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" propagation="SUPPORTS"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="del*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 定义切面-->
<aop:config>
<aop:pointcut id="serviceMethod" expression="execution(* com.bdqn.ch08.service..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
</aop:config>
</beans>
3.8 配置测试类 测试 Test
public class SysUserMapperTest extends TestCase {
/**
* 测试添加
*/
public void testAddSysUser() {
Integer result;
try {
ApplicationContext ctx = new ClassPathXmlApplicationContext("SysUserProperties.xml");
SysUserService userService = (SysUserService) ctx.getBean("sysUserService");
SysUser user = new SysUser();
user.setAccount("啦啦啦啦啦");
user.setRealName("20240724测试添加");
user.setPassWord("hhhhh111");
user.setSex(1);
user.setBirthday(new Date());
user.setPhone("99999999999");
user.setAddress("湖南郴州");
user.setRoleId(1);
user.setUpdatedUserId(1);
user.setUpdateTime(new Date());
result = userService.addSysUser(user);
if (result==1){
System.out.println("添加成功!");
}else {
System.out.println("添加失败");
}
}catch (Exception e){
e.printStackTrace();
}
/**
* 21:24:29.546 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - ==> Preparing: insert into t_sys_user(account,realName,passWord,sex,birthday,phone,address,roleId,updatedUserId) values (?,?,?,?,?,?,?,?,?)
* 21:24:29.568 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - ==> Parameters: 啦啦啦啦啦(String), 20240724测试添加(String), hhhhh111(String), 1(Integer), 2024-07-24 21:24:28.864(Timestamp), 99999999999(String), 湖南郴州(String), 1(Integer), 1(Integer)
* 21:24:29.574 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - <== Updates: 1
*/
}
最后就行了
23:42:16.100 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2783717b]
23:42:16.107 [main] DEBUG org.mybatis.spring.transaction.SpringManagedTransaction - JDBC Connection [jdbc:mysql://localhost:3306/dao?serverTimezone=GMT-8, UserName=root@localhost, MySQL Connector/J] will be managed by Spring
23:42:16.111 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - ==> Preparing: insert into t_sys_user(account,realName,passWord,sex,birthday,phone,address,roleId,updatedUserId) values (?,?,?,?,?,?,?,?,?)
23:42:16.132 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - ==> Parameters: 啦啦啦啦啦(String), 20240724测试添加(String), hhhhh111(String), 1(Integer), 2024-07-24 23:42:15.292(Timestamp), 99999999999(String), 湖南郴州(String), 1(Integer), 1(Integer)
23:42:16.160 [main] DEBUG com.bdqn.ch08.mapper.SysUserMapper.addSysUser - <== Updates: 1
23:42:16.160 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2783717b]
23:42:16.161 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2783717b]
23:42:16.161 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2783717b]
23:42:16.161 [main] DEBUG org.mybatis.spring.SqlSessionUtils - Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2783717b]
23:42:16.161 [main] DEBUG org.springframework.jdbc.datasource.DataSourceTransactionManager - Initiating transaction commit
23:42:16.162 [main] DEBUG org.springframework.jdbc.datasource.DataSourceTransactionManager - Committing JDBC transaction on Connection [jdbc:mysql://localhost:3306/dao?serverTimezone=GMT-8, UserName=root@localhost, MySQL Connector/J]
23:42:16.170 [main] DEBUG org.springframework.jdbc.datasource.DataSourceTransactionManager - Releasing JDBC Connection [jdbc:mysql://localhost:3306/dao?serverTimezone=GMT-8, UserName=root@localhost, MySQL Connector/J] after transaction
添加成功!
搭建SpringMVC+MyBatis项目
518

被折叠的 条评论
为什么被折叠?



