Spring整合Mybatis

Spring整合Mybatis

1.创建java项目,导入对应jar包

创建java项目,导入对应jar包(mysql驱动jar包,mybatis相关的jar包,spring的mybatis的jar包,spring的jdbc的jar包,lo4j的jar包,spring的aop的jar包,spring的ioc的jar包)

2.创建属性文件-log4j.properties,jdbc.properties

创建属性文件:log4j.properties,jdbc.properties放在src下
修改变量名为driverClass,user,防止driver和username的变量名与系统文件变量名冲突

log4j.properties文件内容:

# Global logging configuration
#\u5728\u5f00\u53d1\u73af\u5883\u4e0b\u65e5\u5fd7\u7ea7\u522b\u8981\u8bbe\u7f6e\u6210DEBUG\uff0c\u751f\u4ea7\u73af\u5883\u8bbe\u7f6e\u6210info\u6216error
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

jdbc.properties文件内容:


driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/studz10b?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
user=root
password=root

3.创建mybatis的核心配置文件

在src下,先创建mybatis的核心配置文件
里面只配置一个别名

  <!--配置类型别名-->
  <typeAliases>
    <package name="com.jr.entity"/>
    <package name="com.jr.vo"/>
  </typeAliases>

SqlMapConfig.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">
<configuration>
    <!--配置类型别名-->
    <typeAliases>
      <package name="com.jr.entity"/>
      <package name="com.jr.vo"/>
    </typeAliases>
</configuration>

4.配置Spring核心配置文件–重点

在src下,配置Spring核心配置文件()重点
1.加载外部属性文件,获得连接数据库的四要素 (需要添加一个context空间
2.配置数据源:数据库连接池
3.配置sqlSession对象
4.配置Mapper映射文件的扫描器对象
5.配置注解扫描路径
6.配置自动创建aop代理类 (需要添加一个aop空间)

如果要进行添加事务管理可以接着配置以下内容:

7.配置声明式事务管理对象
8.配置事物的传播策略 规范:传播策略都是配置在service层(需要导入tx空间)
9.配置xml方式的声明式事务

如果要使用注解的方式进行管理事务:
先把8和9的配置注释,加一个事务支持注解驱动的配置

<!--注释8和9后,配置 事务支持注解驱动-->  
<tx:annotation-driven transaction-manager="txManager"/>

applicationContext.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
	    http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/tx
	    http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">

    <!--1.加载外部属性文件,获得连接数据库的四要素 (需要添加一个context空间)-->
    <context:property-placeholder location="classpath*:jdbc.properties"/>

    <!--2.配置数据源:数据库连接池-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driverClass}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
    </bean>

    <!--3.配置sqlSession对象-->
    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/>
    </bean>

    <!--4.配置Mapper映射文件的扫描器对象-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.jr.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="factory"/>
    </bean>

    <!--5.配置注解扫描路径-->
    <context:component-scan base-package="com.jr"/>

    <!--6.配置自动创建aop代理类 (需要添加一个aop空间)-->
    <aop:aspectj-autoproxy/>

    <!--7.配置声明式事务管理对象-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--8.配置事物的传播策略 规范:传播策略都是配置在service层-->
    <!--
    需要再导入一个命名空间 tx
    xmlns:tx="http://www.springframework.org/schema/tx"
	   http://www.springframework.org/schema/tx
	   http://www.springframework.org/schema/tx/spring-tx-4.3.xsd

    -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <!--
                name : 一般使用通配符
                propagation:传播策略
                    REQUIRED:有事务加入,没事务就开启
                    SUPPORTS:有事务就在事务里运行,没事务就在非事务状态下执行
            -->
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="upd*" propagation="REQUIRED"/>
            <tx:method name="remove*" propagation="REQUIRED"/>
            <tx:method name="get*" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>

    <!--9.配置xml方式的声明式事务-->
    <aop:config>
        <aop:pointcut id="txpointcut" expression="execution(* com.jr.service.impl.DeptServiceImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txpointcut"/>
    </aop:config>
</beans>

5.创建实体类

Dept实体类文件内容:

package com.jr.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.stereotype.Component;

@Component/*等价bean标签*/
@Data/*自动生成get、set、toString*/
@AllArgsConstructor/*自动全参构造器*/
@NoArgsConstructor/*自动无参构造器*/

public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;
}

6.创建mapper接口

DeptMapper 接口文件内容:

package com.jr.mapper;

import com.jr.entity.Dept;
import java.util.List;

public interface DeptMapper {

    int insertDept(Dept dept);
    int deleteDept(int deptno);
    int updateDept(Dept dept);
    List<Dept> selectAll();
}

7.创建mapper.xml映射文件

创建mapper.xml映射文件(mapper映射文件放在与mapper接口相同的包下,并且文件名相同)

DeptMapper.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.jr.mapper.DeptMapper">
  <select id="selectAll" resultType="dept">
    select * from dept
  </select>

  <insert id="insertDept" parameterType="dept">
    insert into dept(deptno,dname,loc) values(#{deptno},#{dname},#{loc})
  </insert>

  <update id="updateDept" parameterType="dept">
    update dept set dname=#{dname},loc=#{loc} where deptno=#{deptno}
  </update>

  <delete id="deleteDept" parameterType="int">
    delete from dept where  deptno=#{deptno}
  </delete>
</mapper>

8.创建service接口

DeptService接口文件内容:

package com.jr.service;

import com.jr.entity.Dept;
import java.util.List;

public interface DeptService {
    boolean addDept(Dept dept);
    boolean updDept(Dept dept);
    boolean removeDept(int deptno);
    List<Dept> getAll();
}

9.创建ServiceImpl实现类

DeptServiceImpl实现类文件内容:

package com.jr.service.impl;

import com.jr.entity.Dept;
import com.jr.mapper.DeptMapper;
import com.jr.service.DeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(propagation= Propagation.REQUIRED)/*当前实现类的策略都用 REQUIRED  等价替换为applicationContext.xml中的第8,9个配置*/

public class DeptServiceImpl implements DeptService {

    @Autowired /*通过byType进行依赖注入*/
    private DeptMapper deptMapper;
    @Override
    public boolean addDept(Dept dept) {
        return deptMapper.insertDept(dept)==1?true:false;
    }

    @Override
    public boolean updDept(Dept dept) {

        int i = 0;
        i = deptMapper.insertDept(dept);
        dept.setLoc("长春");
        i +=deptMapper.updateDept(dept);
        if(i==2){
            return true;
        }else {
            return false;
        }

    }
    @Override
    public boolean removeDept(int deptno) {
        return deptMapper.deleteDept(deptno)==1?true:false;
    }

    @Override
    public List<Dept> getAll() {
        return deptMapper.selectAll();
    }
}

10.创建切面类-Advice

创建切面类(单独放在util包下,命名带上Advice)

Advice切面类文件内容:

package com.jr.util;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component/*添加该文件到bean*/
@Aspect/*设置该类为切面类*/
public class Advice {
    @Before("execution(* com.jr.service.impl.DeptServiceImpl.*Dept(..))")
    public void check(){
        System.out.println("权限检查。。。");
    }

    @After("execution(* com.jr.service.impl.DeptServiceImpl.*Dept(..))")
    public void log(){
        System.out.println("日志记录。。。");
    }
}

11.创建测试类

测试类内容:

public class DeptTest {

    @Test
    public void test01(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        DeptService deptService = context.getBean("deptServiceImpl",DeptService.class);
        List<Dept> list = deptService.getAll();
        for(Dept d: list){
            System.out.println(d);
        }
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值