Spring整合Mybatis-实现简单的增删改查功能案例实现

之前我们学习了spring整合数据源和工具类,但我们后期使用SSM框架,所以这里单独写一篇Spring整合Mybatis

Spring整合Mybatis案例

第一步:建表

  • 创建表accountbank:银行账户类

在这里插入图片描述

第二步:创建项目,配置环境,增加依赖

  • pom.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<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.offcn</groupId>
    <artifactId>SpringMybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spring.version>5.1.5.RELEASE</spring.version>
    </properties>

    <dependencies>
        <!--Spring框架核心库 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- aspectJ AOP 织入器 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        <!--mybatis-spring整合包 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!--Spring java数据库访问包,在本例中主要用于事务管理 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!--MySQL数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>
        <!--log4j日志包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- mybatis ORM框架 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>
        <!-- JUnit单元测试工具 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--c3p0 连接池 -->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <!-- spring-test:测试包 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.1.5.RELEASE</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

第三步:配置项目结构,创建实体类

  • 项目结构:

在这里插入图片描述

  • 实体类:Accountbank:
package com.offcn.pojo;


import java.io.Serializable;

public class Accountbank implements Serializable {

  private int id;
  private String username;
  private Double money;
  private String pwd;
  private String adress;


  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }


  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }


  public Double getMoney() {
    return money;
  }

  public void setMoney(Double money) {
    this.money = money;
  }


  public String getPwd() {
    return pwd;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }


  public String getAdress() {
    return adress;
  }

  public void setAdress(String adress) {
    this.adress = adress;
  }

  @Override
  public String toString() {
    return "Accountbank{" +
            "id=" + id +
            ", username='" + username + '\'' +
            ", money=" + money +
            ", pwd='" + pwd + '\'' +
            ", adress='" + adress + '\'' +
            '}';
  }
}

第四步:环境搭建

  • 创建Mybatis核心配置文件:

在这里插入图片描述

  • 配置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:context="http://www.springframework.org/schema/context"
       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/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd">


    <!--1.引入外部配置信息文件-->
    <context:property-placeholder location="db.properties"></context:property-placeholder>

    <!--2.开启注解配置-->
    <context:component-scan base-package="com.offcn"></context:component-scan>

    <!--3.配置数据源-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}"></property>
        <property name="jdbcUrl" value="${jdbc.url}"></property>
        <property name="user" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <!--当c3p0连接池中连接耗尽时一次同时获取的连接数-->
        <property name="acquireIncrement" value="5"></property>
        <!--初始连接池数量-->
        <property name="initialPoolSize" value="10"></property>
        <!--连接池中最小连接数量-->
        <property name="minPoolSize" value="5"></property>
        <!--连接池中最大连接数量-->
        <property name="maxPoolSize" value="20"></property>
      </bean>


    <!--4.配置SqlSessionFactoryBean  MyBatis整合Spring核心API之一
    作用是代替MyBatis核心配置文件,用来配置数据连接,别名,映射器等数据操作相关内容,
    也可以直接加载MyBatis核心配置文件-->

    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--指定数据源-->
        <property name="dataSource" ref="dataSource"></property>

        <!--给包取别名-->
        <property name="typeAliasesPackage" value="com.offcn.pojo"></property>

        <!--映射文件-->
        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property>
        
        <!--读取Mybatis核心配置文件-->
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>


    <!--5.将接口对象注入到容器中 MyBatis整合Spring核心API之一,作用是扫面接口所在包内容,
        按照SqlSessionFactoryBean中的相关信息,产生接口对象
        Spring使用当前配置将接口所在包下的所有的接口对象注入到容器中-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
        <property name="basePackage" value="com.offcn.mapper"></property>
    </bean>

</beans>
  • db.properties和log4j.properties文件分别如下:
<!--这里mysql驱动用的8.0高版本,所以url需要添加时区-->
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java1026?characterEncoding=utf-8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
# Global logging configuration\uff0c\u5efa\u8bae\u5f00\u53d1\u73af\u5883\u4e2d\u8981\u7528debug
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

第五步:代码书写

  • Mybatis接口代理,所以先定义一个AccountbankMapper接口:
package com.offcn.mapper;

import com.offcn.pojo.Accountbank;

public interface AccountbankMapper {
    //1.登录查询用户方法
    Accountbank queryLogin(Accountbank accountbank);

    //2.通过id获取用户信息
    Accountbank queryByid(int id);

    //3.通过id删除用户
    int deleteByid(int id);

    //4.修改用户信息
    int updateAccount(Accountbank accountbank);

    //5.增加用户信息
    int insertAccount(Accountbank accountbank);
}

  • 再区书写映射文件,实现sql语句:
<?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.offcn.mapper.AccountbankMapper" >

    <!--1.登录查询用户方法-->
    <select id="queryLogin" resultType="Accountbank" parameterType="Accountbank">
      select * from accountbank
      where username = #{username}
      and pwd = #{pwd}
    </select>

    <!-- 2.通过id获取用户信息-->
    <select id="queryByid"  resultType="Accountbank" parameterType="int">
        select * from accountbank
      where id= #{id}
    </select>

    <!--3.通过id删除用户-->
    <delete id="deleteByid"  parameterType="int">
       delete from accountbank where id = #{id}
    </delete>


    <!--4.修改用户信息-->
    <update id="updateAccount" parameterType="Accountbank">
        update accountbank 
        <set>
            <if test="username!=null">username=#{username}</if>
            <if test="pwd!=null">pwd=#{pwd}</if>
            <if test="adress!=null">adress=#{adress}</if>
        </set>
        where id=#{id}
    </update>

    <!--5.增加用户信息-->

    <insert id="insertAccount" parameterType="Accountbank">
        insert into accountbank(username, money, pwd, adress)  value (#{username},#{money},#{pwd},#{adress})
    </insert>
</mapper>
  • 开始写service层代码,先定义AccountbankService接口,定义逻辑处理方法:
package com.offcn.service;

import com.offcn.pojo.Accountbank;

public interface AccountbankService {
    //定义一个登录方法
    boolean login(Accountbank accountbank);

    //2.通过id获取用户信息
    Accountbank queryByid(int id);

    //3.通过id删除用户
    boolean deleteByid(int id);

    //4.修改用户信息
    boolean updateAccount(Accountbank accountbank);

    //5.增加用户信息
    boolean insertAccount(Accountbank accountbank);
}

  • 书写实现类AccountbankServiceImpl,这里使用注解来自动注入到容器中:
package com.offcn.service;

import com.offcn.mapper.AccountbankMapper;
import com.offcn.pojo.Accountbank;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class AccountbankServiceImpl implements AccountbankService {

    @Autowired
    private AccountbankMapper accountbankMapper;

    @Override
    public boolean login(Accountbank accountbank) {
        Accountbank accountbank1 = accountbankMapper.queryLogin(accountbank);
        if (accountbank!=null){
            return true;
        }
        return false;
    }

    @Override
    public Accountbank queryByid(int id) {
        return accountbankMapper.queryByid(id);
    }

    @Override
    public boolean deleteByid(int id) {
        int i = accountbankMapper.deleteByid(id);
        if (i>0){
            return true;
        }
        return false;
    }

    @Override
    public boolean updateAccount(Accountbank accountbank) {
        int i = accountbankMapper.updateAccount(accountbank);
        if (i>0){
            return true;
        }
        return false;
    }

    @Override
    public boolean insertAccount(Accountbank accountbank) {
        int i = accountbankMapper.insertAccount(accountbank);
        if (i>0){
            return true;
        }
        return false;
    }
}

第六步书写测试代码

package com.offcn;

import com.offcn.pojo.Accountbank;
import com.offcn.service.AccountbankService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class Mytest01 {

    @Autowired
    private AccountbankService accountbankService;
    @Test
    public void m1(){
        Accountbank accountbank=new Accountbank();
        accountbank.setUsername("lisi");
        accountbank.setPwd("123456");
        boolean login = accountbankService.login(accountbank);
        if (login){
            System.out.println("登录成功");
        }else {
            System.out.println("登录失败");
        }

    }

    //查询
    @Test
    public void m2(){
        Accountbank accountbank = accountbankService.queryByid(1);
        System.out.println(accountbank);

    }
    //删除
    @Test
    public void m3(){
        boolean b = accountbankService.deleteByid(3);
        if (b){
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }

    }
    //修改
    @Test
    public void m4(){
       Accountbank accountbank=new Accountbank();
       accountbank.setAdress("西藏");
       accountbank.setId(1);
        boolean b = accountbankService.updateAccount(accountbank);
        if (b){
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }

    }

    //增加
    @Test
    public void m5(){
        Accountbank accountbank=new Accountbank();
        accountbank.setAdress("西藏");
        accountbank.setPwd("1222");
        accountbank.setMoney(29999.0);
        accountbank.setUsername("程序逸");
        boolean b = accountbankService.insertAccount(accountbank);
        if (b){
            System.out.println("增加成功");
        } else {
            System.out.println("增加失败");
        }

    }
}

注意事项:

  • beans.xml的spring容器中需要配置SqlSessionFactoryBean MyBatis整合Spring核心API之一,作用是代替MyBatis核心配置文件,用来配置数据连接,别名,映射器等数据操作相关内容,也可以直接加载MyBatis核心配置文件
  • 将接口对象注入到容器中 MyBatis整合Spring核心API之一,作用是扫面接口所在包内容,按照SqlSessionFactoryBean中的相关信息,产生接口对象,Spring使用当前配置将接口所在包下的所有的接口对象注入到容器中
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值