application-context.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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context https://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 https://www.springframework.org/schema/aop/spring-aop.xsd">
<!--开启组件扫描-->
<context:component-scan base-package="com.lcz"/>
<!--引入属性文件-->
<context:property-placeholder location="classpath:db.properties"/>
<!--配置数据源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--创建sqlSession需要的数据源-->
<property name="dataSource" ref="dataSource"/>
<!--配置mybatis核心配置文件的路径-->
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<!--配置类的别名-->
<property name="typeAliasesPackage" value="com.lcz.pojo"/>
<!--配置分页插件-->
<property name="plugins">
<bean class="com.github.pagehelper.PageInterceptor">
<!--设置首页的上一页为最后一页,最后一页的下一页为首页-->
<property name="properties">
<props>
<prop key="reasonable">true</prop>
</props>
</property>
</bean>
</property>
</bean>
<!--配置mapper扫描器对象用于创建mapper对象-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--要扫描到的包-->
<property name="basePackage" value="com.lcz.mapper"/>
</bean>
<!--配置事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 开启事务注解 这是使用注解的方式 注解是在Service的实现类的对应方法上加上@Transactional
<tx:annotation-driven transaction-manager="transactionManager"/>-->
<!--以配置的方式实现事务,可以配置完之后无需额外的注解,一处配置,全部使用-->
<!--配置事务的属性-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!--匹配的是Service层的方法名,这里就是以add开头的方法,当有异常时就回滚-->
<tx:method name="add*" rollback-for="Exception"/>
<tx:method name="remove*" rollback-for="Exception"/>
<tx:method name="modify*" rollback-for="Exception"/>
<tx:method name="find*" read-only="true"/>
<!--Service层的所有方法,有异常时就回滚,可能有一些方法名前缀不是add、remove、等的-->
<tx:method name="*" rollback-for="Exception"/>
</tx:attributes>
</tx:advice>
<!--配置aop增强,用到增强的话就需要加入spring-aspects的依赖-->
<aop:config>
<!--配置增强的切点,* com.lcz.service.impl.*.*(..)--指的是所有修饰符返回值下的impl包下的所有类的所有方法,不管什么参数(可变参数)-->
<aop:pointcut id="pointCut" expression="execution(* com.lcz.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"/>
</aop:config>
</beans>
其中用到的文件:
db.properties
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/Students?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=数据库密码
log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug, stdout
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
mybatis核心配置文件:(部分功能已注释)
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
引入配置文件,数据源选择配置文件
这种是引用外部数据库的配置文件,使用的话是EL表达式读取
-->
<!--
<properties resource="db.properties"></properties>
-->
<!-- setting:如果有properties,必须要写在properties紧挨着的地方
setting是配置mybatis的-->
<settings>
<!--
延迟加载,只有在分步查询时才生效
因为一句SQL的话,不需要也无法进行延迟
延迟加载就是当需要执行这个数据的时候才会执行后面的那句SQL,当然前面的那句SQL一定是会执行的
例如,查员工信息 分步:先查员工除了部门的信息 再根据部门编号查询该员工的部门的信息
当只需要员工的信息,不需要部门信息时,延迟加载就不会执行后面的SQL
只有当需要到部门信息时,才会执行后面的那个SQL
-->
<!-- <setting name="lazyLoadingEnabled" value="true"/>-->
<!--
开启下划线命名到驼峰命名的自动映射 数据表列名user_id->实体类属性userId (mapUnderscoreToCamelCase为true时自动映射)
user_name->userName
user_passWord->userPassWord
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
<!–typeAliases:给实体类起别名 有顺序的,在setting的配置后面–>
<typeAliases>
<!–typeAlias type:要起别名的实体类 alias:起的别名
起完别名后,映射的xml文件中需要需要写实体类完整包名的地方就可以直接使用这个别名了 例如:resultType="别名"–>
<!–<typeAlias type="pojo.Emp" alias="emp"></typeAlias>
<typeAlias type="pojo.Dept" alias="dept"></typeAlias>–>
<!–不可修改别名,默认别名:实体类类名的首字母小写 User->user(也可以User)
例如:resultType="user" / resultType="User" 都可以–>
<package name="pojo"/>
</typeAliases>
<!– <typeHandlers>
<!–这个是数据库的枚举字段映射到实体类的枚举,例如数据库性别男女–>实体类性别male,female–>
<typeHandler handler="handler/GenderHandler" javaType="Gender"/>
</typeHandlers>–>
<!–
<properties>
在这里定义也可以,通过EL表达式读取
好处:
修改数据库配置时,可以只修改一处,多处使用
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
</properties>
–>
<!– <plugins>
<!–引入的是分页插件–>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!–当页码是最后一页时点击下一页则默认跳转至第一页–>
<property name="reasonable" value="true"/>
</plugin>
</plugins>–>
<!–environments 配置mybatis运行的环境 defalut选择使用哪个环境 –>
<environments default="development">
<!–一个environments下面可以有多个environment,具体匹配哪个是根据defalut的值和id的值匹配上 –>
<!–environment 定义一个具体的运行环境 id名是和上面的defalut匹配上了,证明就使用这个环境–>
<environment id="development">
<!–transactionManager 配置事务管理器–>
<transactionManager type="JDBC"/>
<!–dataSource 数据源–>
<dataSource type="POOLED">
<!–配置数据库的相关设置–>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/Students?useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="数据库密码"/>
<!–也可以通过读取配置文件里面的设置,可以通过EL表达式读取–>
<!–
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
–>
</dataSource>
</environment>
</environments>
<mappers>
<!–源要写成对应的xml路径–>
<!–<mapper resource="mapper/DeptMapper.xml"/>–>
<!–也可以写包名,会自动识别包下的所有映射源–>
<package name="mapper"/>
</mappers>-->
</configuration>