Spring与Mybatis整合,注解开发

 操作步骤:

1.建库建表

2.导入依赖(pom.xml)

3.编写配置类(JdbcConfig,MybatisConfig,SpringConfig)

4.创建实体类

5.创建Dao层接口,创建Dao层实现类实现Dao接口

6.创建Service层接口,创建Service层实现类实现Service接口

7.编写映射文件(UserMapper.xml)

8.编写测试类

项目建立图片

 

 

一、建表语句

create table test.user
(
    id       int auto_increment
        primary key,
    name     varchar(10) null,
    password varchar(20) null,
    money    int         null,
    notes    varchar(10) null
);

 

二、导入Maven依赖

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.leo.demos</groupId>
    <artifactId>springmybatis</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.3.23</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.23</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>

    </dependencies>

</project>

 三、编写配置类

        1.JdbcConfig代码如下:

package demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;

import javax.sql.DataSource;

public class JdbcConfig {
//Value中的值来自jdbc.properties
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

jdbc.properties文件 

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=123456

        2. MybatisConfig代码如下:

package demo.config;

import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;
import java.io.IOException;
@MapperScan("demo.dao")
public class MybatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setTypeAliasesPackage("demo.pojo");
        sqlSessionFactoryBean.setDataSource(dataSource);
        Resource[] rs = null;
        try {
            rs = new PathMatchingResourcePatternResolver().getResources("classpath:UserMapper.xml");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        sqlSessionFactoryBean.setMapperLocations(rs);
        return sqlSessionFactoryBean;
    }
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer mapperScannerConfigurer=new MapperScannerConfigurer();
        mapperScannerConfigurer.setBasePackage("demo.dao");
        return mapperScannerConfigurer;
    }
}

        3.SpringConfig代码如下:

package demo.config;

import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.sql.DataSource;

@Configuration
@ComponentScan("demo")
@PropertySource({"classpath:jdbc.properties"})
@Import({JdbcConfig.class,MybatisConfig.class})
@EnableTransactionManagement//开启事务
public class SpringConfig {
    @Bean
    public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dataSource);
        return dataSourceTransactionManager;
    }

}

 四、编写实体类

package demo.pojo;

public class User {
    private Integer id;
    private String name;
    private String password;
    private Integer money;

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getMoney() {
        return money;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", money=" + money +
                '}';
    }
}

五、Dao层

        1.UserDao代码如下:

package demo.dao;

import demo.pojo.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserDao {
    void insertUser(User user);//添加用户
    void deleteUser(String name);//删除用户
    void updateUser(User user);//更新用户信息
    List<User> userList();//查看用户姓名和余额
    void updateNotes1(User user);//用户备注
    void updateNotes2(User user);//用户备注
    void transfer(@Param("name") String name, @Param("money") int money);//用户之间转账
}

        2.UserDaoImpl代码如下:

package demo.dao;

import demo.pojo.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserDaoImpl implements UserDao{
  @Autowired
  private UserDao userDao1;
    @Override
    public void insertUser(User user) {
        userDao1.insertUser(user);
        System.out.println("insertUser ok");
    }

    @Override
    public void deleteUser(String name) {
        userDao1.deleteUser(name);
        System.out.println("deleteUser ok");
    }

    @Override
    public void updateUser(User user) {
        userDao1.updateUser(user);
    }

    @Override
    public List<User> userList() {
        List<User> users = userDao1.userList();
//        for (User user : users) {
//            System.out.println("姓名:"+user.getName());
//            System.out.println("账户余额:"+user.getMoney());
//        }
        return users;
    }

    @Override
    public void updateNotes1(User user) {
        userDao1.updateNotes1(user);
    }

    @Override
    public void updateNotes2(User user) {
        userDao1.updateNotes2(user);
    }

    @Override
    public void transfer(String name,int money) {
        userDao1.transfer(name,money);
        System.out.println("yes");
    }
}

六、Service层 

        1.UserService代码如下:

package demo.service;

import demo.pojo.User;

public interface UserService {
    public void Account();//查看账户余额
    public void Insert(User user);//添加新的用户
    public void Delete(String name);//删除用户信息
    public void ZZ(String name1,String name2,int money);//用户之间转账
    public void Update(User user);//更新用户信息
}

        2.UserServiceImpl代码如下:

package demo.service;

import demo.dao.UserDao;
import demo.dao.UserDaoImpl;
import demo.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDao userDaoImpl;
    @Override
    public void Account() {
        List<User> users = userDaoImpl.userList();
        for (User user : users) {
            if(user.getMoney()>50000){
                System.out.println(user.getName()+"  账户余额:"+user.getMoney()+"元");
                userDaoImpl.updateNotes1(user);
            }
            else
                userDaoImpl.updateNotes2(user);
        }
    }

    @Override
    public void Insert(User user) {
        userDaoImpl.insertUser(user);
        System.out.println("Insert ok");
    }

    @Override
    public void Delete(String name) {
        userDaoImpl.deleteUser(name);
        System.out.println("Delete ok");
    }
    @Transactional//添加事务
    @Override
    public void ZZ(String name1, String name2, int money) {
        userDaoImpl.transfer(name1,money);
//      int i=1/0;//用于测试事务能否正常回滚
        userDaoImpl.transfer(name2,-money);
        System.out.println("ok");
    }

    @Override
    public void Update(User user) {
        userDaoImpl.updateUser(user);
    }

}

七、编写UserMapper.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="demo.dao.UserDao">

    <insert id="insertUser" parameterType="demo.pojo.User">
        insert into user(id,name ,password,money) values (#{id},#{name},#{password},#{money})
    </insert>

    <delete id="deleteUser" parameterType="String">
        delete from user where name =#{name};
    </delete>

    <update id="updateUser" parameterType="demo.pojo.User">
        update user set money = #{money} where id = #{id}
    </update>

    <select id="userList" resultType="demo.pojo.User">
        select u.id,u.name,u.money from user u
    </select>

    <select id="updateNotes1"  parameterType="demo.pojo.User" resultType="int">
        update user set notes="大额用户" where name=#{name}
    </select>

    <select id="updateNotes2"  parameterType="demo.pojo.User" resultType="int">
        update user set notes="小额用户" where name=#{name}
    </select>

    <select id="transfer"  parameterType="demo.pojo.User">
        update user set money=money+#{money} where name=#{name}
    </select>
</mapper>

八、测试类 

package demo.test;

import demo.config.SpringConfig;
import demo.pojo.User;
import demo.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.security.Provider;

public class Test {
    public static void main(String[] args) {
        ApplicationContext context=new AnnotationConfigApplicationContext(SpringConfig.class);
        UserService userService=context.getBean("userServiceImpl",UserService.class);
        
        //添加用户
        
        //User user1 =new User();
        //user1.setName("地主");user1.setPassword("123456");user1.setMoney(999999);
        //userService.Insert(user1);
        
        
        //添加用户
        
        //User user2 =new User();
        //user2.setName("财神");user2.setPassword("888888");user2.setMoney(888888);
        //userService.Insert(user2);
        
        
        //财神给地主转账50000
        //userService.ZZ("地主","财神",50000);

        
        //查看大于50000元的用户
        //userService.Account();
        
        //更改id为1的用户的账户
        //User user = new User();
        //user.setId(1);user.setMoney(50000);
        //userService.Update(user);
        
        //删除名字叫地主的用户
        //userService.Delete("地主");
    }



}

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值