搭建一个Spring项目并整合MyBatis

3 篇文章 0 订阅
1 篇文章 0 订阅

1. 搭建一个Spring项目(详细步骤)

  • 步骤一:

  • 步骤二:

  • 步骤三:

  • 步骤四:

  • 步骤五:

  • 步骤六:

  • 步骤七:

  • 最终目录结构

2. 整合MyBatis

2.1 导入pom依赖:

导入pom相关的依赖。看博客最后 附录pom文件

2.2 配置文件

jdbc.driver=com.mysql.jdbc.Driver
# 数据库地址
jdbc.url=jdbc:mysql://127.0.0.1:3306/springday01
# mysql账号
jdbc.username=root
# mysql密码
jdbc.password=root

2.3 创建数据库和表

create database springday01;
use springday01;
CREATE TABLE USER(
 uid VARCHAR(32) PRIMARY KEY,
 username VARCHAR(50),
 PASSWORD VARCHAR(32)
)

2.4 编写domain

  • 创建User类

  • 添加get 、set方法
package com.zqh.domain;

import javax.persistence.Table;
import java.io.Serializable;

/**
 * @author 漫路
 */
@Table(name = "user")
public class User implements Serializable {
    private String uid;
    private String username;
    private String password;

    public User() {
    }

    public User(String uid, String username, String password) {
        this.uid = uid;
        this.username = username;
        this.password = password;
    }

    public String getUid() {
        return uid;
    }

    public void setUid(String uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

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

2.5. 编写dao

package com.zqh.dao;

import com.zqh.domain.User;
import tk.mybatis.mapper.common.Mapper;

/**
 * @author 漫路
 */
public interface UserMapper extends Mapper<User> {
}

2.6. 编写service接口

package com.zqh.service;

import com.zqh.domain.User;

/**
 * @author 漫路
 */
public interface UserService {
    public User findByPrimaryKey(String uid);
    public void insertUser(User user);
}

2.6. 编写service实现类

package com.zqh.service.impl;

import com.zqh.dao.UserMapper;
import com.zqh.domain.User;
import com.zqh.service.UserService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;

/**
 * @author 漫路
 */
@Service
@Transactional //开启事务支持
public class UserServiceImpl implements UserService {
    @Resource
    private UserMapper userMapper;

    public User findByPrimaryKey(String uid) {
        return userMapper.selectByPrimaryKey(uid);
    }

    public void insertUser(User user) {
        userMapper.insert(user);
    }
}

2.7. 编写Spring配置类

1.配置注解
	1.1 扫描注解包
	1.2加载properties文件
	1.3 开启注解事务支持
2.获得properties数据(实现类、@Value)
3.配置数据源DataSource
4.配置事务管理器(DataSourceTransactionManager)

package com.zqh.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.annotation.Resource;
import javax.sql.DataSource;


/**
 * @author 漫路
 */
@Configuration
@ComponentScan(basePackages = {"com.zqh"})
@EnableTransactionManagement
@PropertySource(value = "classpath:db.properties")
public class SpringConfig {
    // 4.2.4版本 固定配置
    @Bean
    public static PropertySourcesPlaceholderConfigurer create(){
        return  new PropertySourcesPlaceholderConfigurer();
    }

    //读取数据库相关配置
    @Value("${jdbc.driver}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;


    //数据源使用德鲁伊连接池
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driverClass);
        ds.setUrl(url);
        ds.setUsername(username);
        ds.setPassword(password);
        return ds;
    }

    // 开启事务管理器
    @Bean
    @Resource
    public DataSourceTransactionManager txManager(DataSource dataSource){
        return  new DataSourceTransactionManager(dataSource);
    }

}

2.8. 编写MyBatis配置类

1.配置session工厂,spring和MyBatis整合时,通过SqlSessionFactoryBean获得SqlSessionFactory
	SqlSessionFactoryBean只能加载mapper映射文件
	注解开发需要加载Mapper类,故需要对mapper进行扫描
2.配置映射扫描器
package com.zqh.config;

import com.github.pagehelper.PageHelper;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import tk.mybatis.spring.mapper.MapperScannerConfigurer;

import javax.annotation.Resource;
import javax.sql.DataSource;
import java.util.Properties;

/**
 * Spring整合MyBatis的配置类
 * @author 漫路
 */
// 声明
@Configuration
public class MyBatisConfig {

    /**
     * 构建SessionFactory对象,SessionFactory可以创建Session对象,最后使用Session操作数据库
     *
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean
    @Resource
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        // 1.通过工厂bean创建对象,最后需要调用 getObject()获得具体的对象
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        // 1.1 设置数据源
        factoryBean.setDataSource(dataSource);
        // 1.2 设置别名包扫描
        factoryBean.setTypeAliasesPackage("com.zqh.domain");
        // 1.3 全局配置:驼峰映射
        org.apache.ibatis.session.Configuration config = new org.apache.ibatis.session.Configuration();
        config.setMapUnderscoreToCamelCase(true);
        factoryBean.setConfiguration(config);

        // 2 插件配置
        // 2.1 分页插件
        PageHelper pageHelper = new PageHelper();
        Properties pageProps = new Properties();
        pageProps.setProperty("dialect", "mysql");
        pageProps.setProperty("rowBoundsWithCount", "true");
        pageHelper.setProperties(pageProps);
        factoryBean.setPlugins(new Interceptor[]{pageHelper});

        // 3 通过工厂bean获得 sqlSessionFactory
        return factoryBean.getObject();
    }

    /**
     * 扫描Dao的包,查找各种XxxMapper接口,创建好UserMapper等对象存入到IOC的容器中
     *
     * @return
     */
    @Bean
    public MapperScannerConfigurer mapperScanner() {
        MapperScannerConfigurer configurer = new MapperScannerConfigurer();
        configurer.setBasePackage("com.zqh.dao");
        return configurer;
    }

}

2.9. 编写测试类

方式1: 整合Junit

package com.zqh;


import com.zqh.config.MyBatisConfig;
import com.zqh.config.SpringConfig;
import com.zqh.domain.User;
import com.zqh.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfig.class, MyBatisConfig.class})
public class TestA {


    @Resource
    private UserService userService;

    @Test
    public void test01(){
        User user = new User("u001","张三丰","123");
        userService.insertUser(user);
        System.out.println("添加完毕");
    }
}

  • 运行

  • 控制台打印

  • 数据库

方式2: 手动创建工厂

package com.zqh;

import com.zqh.config.MyBatisConfig;
import com.zqh.config.SpringConfig;
import com.zqh.domain.User;
import com.zqh.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class TestB {
    public static void main(String[] args) {
        //1.创建工厂,设置两个配置类
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class, MyBatisConfig.class);
        //2.从工厂获取需要的对象
        UserService userService = applicationContext.getBean(UserService.class);
        //3.执行语句
        User user = new User("u800","zhangsan","123");
        userService.insertUser(user);
        System.out.println("添加完毕");
    }
}
  • 执行main方法

附录pom文件

<properties>
        <org.springframework.version>4.2.4.RELEASE</org.springframework.version>
    </properties>

    <dependencies>
        <!--spring core start-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring core end-->

        <!--spring aop start-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spirng aop end-->

        <!--spring aspects start-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring aspects end-->

        <!--spring instrumentation start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring instrumentation end-->

        <!--spring messaging start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring messaging end-->

        <!--spring data access start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring data access end-->

        <!--spring web start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-websocket</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc-portlet</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>
        <!--spring web end -->

        <!--spring test start -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework.version}</version>
        </dependency>

        <!--spring test end -->
        <!-- spring end -->


        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>3.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>

    </dependencies>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值