实验报告4-MyBatis与Spring的整合

资料下载链接

实验报告4-MyBatis与Spring的整合

一、需求分析

实现Spring和MyBatis整合,使用基于XML方式实现声明式事务,完成service层批量插入数据功能并验证事物管理。

二、编码实现

1、数据库环境

mybatis数据库,t_employee表

2、新建项目

引入pom.xml文件,导入applicationContext.xml、db.properties、log4j.properties、mybatisConfig.xml

3、数据封装类

com.sw.pojo包,Employee类

java 复制代码
@Data
public class Employee {
    private int id;
    private String name;
    private int age;
    private String position;
}
4、mapper层

com.sw.mapper包,EmployeeMapper接口

java 复制代码
public interface EmployeeMapper {
    int insertOne(Employee employee);
}

com/sw/mapper目录,EmployeeMapper.xml文件

java 复制代码
    <insert id="insertOne" parameterType="com.sw.pojo.Employee">
        insert into t_employee set name=#{name},age=#{age},position=#{position}
    </insert>
5、配置Spring

resources目录,applicationContext.xml

1)配置数据源
XML 复制代码
    <!--引入属性文件-->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${mysql.driver}"/>
        <property name="url" value="${mysql.url}"/>
        <property name="username" value="${mysql.username}"/>
        <property name="password" value="${mysql.password}"/>
    </bean>
2)配置SqlSessionFactory
XML 复制代码
    <!--配置SqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!--加载MyBatis配置文件-->
        <property name="configLocation" value="classpath:mybatisConfig.xml"/>
    </bean>
3)配置Mapper扫描器
XML 复制代码
    <!--配置Mapper扫描器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定要扫描的mapper的包-->
        <property name="basePackage" value="com.sw.mapper"/>
    </bean>
4)配置Spring IOC容器的注解扫描
XML 复制代码
    <!--配置Spring IOC容器的注解扫描-->
    <context:component-scan base-package="com.sw"/>
6、测试Spring和MyBatis整合

com.sw.mapper包,EmployeeMapper类的insertOne方法,右键→Generate→Test

java 复制代码
    private EmployeeMapper employeeMapper;
​
    @Before
    public void setUp() throws Exception {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        employeeMapper = applicationContext.getBean("employeeMapper", EmployeeMapper.class);
    }
​
    @Test
    public void insertOne() {
        Employee employee = new Employee();
        employee.setName("a1");
        employee.setAge(11);
        employee.setPosition("员工");
        int res = employeeService.insertOne(employee);
        if (res>0){
            System.out.println("新增一条数据成功");
        }else {
            System.out.println("新增一条数据失败");
        }
    }
7、service层

com.sw.service包,EmployeeService接口

java 复制代码
public interface EmployeeService {
    int insertList(List<Employee> employeeList);
}

com.sw.service.impl包,EmployeeServiceImpl类

java 复制代码
@Service
public class EmployeeServiceImpl implements EmployeeService {
​
    @Resource
    private EmployeeMapper employeeMapper;

    public int insertList(List<Employee> employeeList) {
        if (employeeList==null){
            return 0;
        }
        if (employeeList.size()==0){
            return 0;
        }
        for (int i = 0; i < employeeList.size(); i++) {
            if (i==1){
                throw new RuntimeException("模拟运行时异常");
            }
            employeeMapper.insertOne(employeeList.get(i));
        }
        return employeeList.size();
    }
}
8、配置Spring

resources目录,applicationContext.xml

1)配置事务管理器
XML 复制代码
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>
2)配置事务通知
XML 复制代码
    <!--配置事务通知-->
    <tx:advice id="txAdvice">
        <tx:attributes>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
3)配置AOP
XML 复制代码
    <!--配置AOP-->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* com.sw.service.*.insert*(..))
        ||execution(* com.sw.service.*.update*(..))
        ||execution(* com.sw.service.*.delete*(..))
        ||execution(* com.sw.service.*.tx*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
    </aop:config>
9、测试事物管理

com.sw.service.impl包,EmployeeServiceImpl类的insertList方法,右键→Generate→Test

java 复制代码
    private EmployeeService employeeService;

    @Before
    public void setUp() throws Exception {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        employeeService = applicationContext.getBean("employeeServiceImpl", EmployeeService.class);
    }

    @Test
    public void insertList() {
        List<Employee> employeeList = new ArrayList<Employee>();
        Employee employee1 = new Employee();
        employee1.setName("a1");
        employee1.setAge(11);
        employee1.setPosition("员工");
        Employee employee2 = new Employee();
        employee2.setName("a2");
        employee2.setAge(22);
        employee2.setPosition("员工");
        Employee employee3 = new Employee();
        employee3.setName("a3");
        employee3.setAge(33);
        employee3.setPosition("员工");
        employeeList.add(employee1);
        employeeList.add(employee2);
        employeeList.add(employee3);
        int res = employeeService.insertList(employeeList);
        if (res>0){
            System.out.println("批量插入成功,共插入"+res+"条数据");
        }else {
            System.out.println("批量插入失败");
        }
    }
相关推荐
m0_571957581 小时前
Java | Leetcode Java题解之第543题二叉树的直径
java·leetcode·题解
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
NiNg_1_2343 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
测开小菜鸟4 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
P.H. Infinity5 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天5 小时前
java的threadlocal为何内存泄漏
java
caridle6 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^6 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx