springboot使用mybatis(在main中使用)

本文表述两种方式在main中进行操作数据库。

        在使用springboot中,不做web,仅启动项目在main入口去执行一些数据操作任务,完成就结束进程。因springbooot+mybatis通常都是使用容器注入的形式,所以在main中是无法调用service层。本文将以两种形式来实现上述方案。

第一种方式(注入):

DemoApplication
package com.example.demo;

import com.yanghao.config.SpringUtil;
import com.yanghao.service.UserService;
import com.yanghao.service.impl.UserServiceImpl;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@MapperScan("com.yanghao.mapper")
@ComponentScan("com.yanghao")
public class DemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(DemoApplication.class, args);

        //调用Sercice层
        ApplicationContext context = SpringUtil.getApplicationContext();
        UserService userService = context.getBean(UserService.class);// 注意是Service,不是ServiceImpl
        System.out.println(userService.getList());

        //结束进程
        System.exit(0);
    }

}

SpringUtil(重点,通过ApplicationContextAware接口来获取service的bean
package com.yanghao.config;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext applicationContext = null;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(SpringUtil.applicationContext == null){
            SpringUtil.applicationContext  = applicationContext;
        }
    }


    //获取applicationContext  
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    //通过name获取 Bean.  
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //通过class获取Bean.  
    public static <T> T getBean(Class<T> clazz){
        return getApplicationContext().getBean(clazz);
    }

    //通过name,以及Clazz返回指定的Bean  
    public static <T> T getBean(String name,Class<T> clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}  
User
package com.yanghao.doman;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String name;
    private Integer age;
}
UserMapper
package com.yanghao.mapper;

import com.yanghao.doman.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;
@Mapper
public interface UserMapper {
    public List<User> selectUser();
}
UserServiceImpl
package com.yanghao.service.impl;

import com.yanghao.doman.User;
import com.yanghao.mapper.UserMapper;
import com.yanghao.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public List<User> getList() {
        List<User> users = userMapper.selectUser();
        return users;
    }
}
UserService
package com.yanghao.service;

import com.yanghao.doman.User;

import java.util.List;

public interface UserService {
    public List<User> getList();
}

 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="com.yanghao.mapper.UserMapper">
    <select id="selectUser" resultType="com.yanghao.doman.User">
        select *
        from user;
    </select>
</mapper>

mybatis-config.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>
    <!-- 全局参数 -->
    <settings>
        <!-- 使全局的映射器启用或禁用缓存 -->
        <setting name="cacheEnabled"             value="true"   />
        <!-- 允许JDBC 支持自动生成主键 -->
        <setting name="useGeneratedKeys"         value="true"   />
        <!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
        <setting name="defaultExecutorType"      value="SIMPLE" />
		<!-- 指定 MyBatis 所用日志的具体实现 -->
        <setting name="logImpl"                  value="SLF4J"  />
        <!-- 使用驼峰命名法转换字段 -->
		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
	</settings>
	
</configuration>

 application.yml


# MyBatis
mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.yanghao.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath:mapper/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml
#数据库日志
logging:
  level:
    com.yanghao.mapper: debug
  file:
    path: logs/spring-boot.log

# Spring配置
spring:
  profiles:
    active: druid

application-druid.yml

# 数据源配置
spring:
    datasource:
        username: root
        password: root
        url: jdbc:mysql://localhost:3306/ceshi?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
        driver-class-name: com.mysql.cj.jdbc.Driver

 

第二种方式(非注入): 

YanghaoApplication
package com.example.yanghao;

import com.example.yanghao.config.MybatisConfig;
import com.example.yanghao.mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YanghaoApplication {

    public static void main(String[] args) {

        //SpringApplication.run(YanghaoApplication.class, args);

        SqlSession session = MybatisConfig.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);

        System.out.println(mapper.selectUser());
        System.out.println(mapper.selectUser());
        System.out.println(mapper.selectUser());

    }

}
MybatisConfig
package com.example.yanghao.config;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisConfig {
    public static SqlSession getSession(){
        String resource = "mybatis/mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();
        return session;
    }
}
User
package com.example.yanghao.domain;

import lombok.Data;

@Data
public class User {
    private Integer id;
    private String name;
}
UserMapper
package com.example.yanghao.mapper;

import com.example.yanghao.domain.User;

import java.util.List;
public interface UserMapper {
    public List<User> selectUser();
}

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="com.example.yanghao.mapper.UserMapper">
    <select id="selectUser" resultType="com.example.yanghao.domain.User">
        select *
        from user;
    </select>

</mapper>

 mybatis-config.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>
    <!--添加properties配置文件路径(外部配置、动态替换)-->
    <properties resource="application.properties" />

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${mybatis.driver}"/>
                <property name="url" value="${mybatis.url}"/>
                <property name="username" value="${mybatis.username}"/>
                <property name="password" value="${mybatis.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

application.properties

#mybatis
mybatis.driver = com.mysql.cj.jdbc.Driver
mybatis.url = jdbc:mysql://localhost:3306/ceshi?useUnicode=true;characterEncoding=utf8;zeroDateTimeBehavior=convertToNull;useSSL=true;serverTimezone=GMT%2B8
mybatis.username = root
mybatis.password = root

 

以上就是两种方式均可,请自行整合使用。

 第二种可直接参考mybatis官方文档。

记得三连~

感谢支持~!

海蜘蛛:只要自己足够的废物,就没有天敌!

猜你喜欢

转载自blog.csdn.net/weixin_47723549/article/details/124683759