开发环境: IDEA 2022.1.4+ Mybatis
目录
1. 概述
2. 单独配置mybatis-config.xml
2.1 配置内容
2.2 辅助类
2.3 调用操作
3. application.yml配置mybatis
3.1 配置内容
3.2 辅助类
3.3 调用操作
4. 结语
在之前BiliBili学习SprintBoot时候,按照视频敲代码,SpringBoot集成MyBatis,是单独写了一个mybatis-config.xml文件。配置数据连接以及mapper等信息。后来问了下从事Java得同事,告知mybatis-config.xml文件其实可以写到application.yml。当时也没弄清楚。后来摸索中,也就渐渐明白了。
当时视频学习,也写下学习得总结。
jdbc.properties内容如下:
单独写jdbc得配置,是担心以后要是部署成WAR形式,修改mybatis-config.xml内容得话,内容太多,防止修改错,就单独搞个jdbc配置。(其实我想多了)
driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
url=jdbc:sqlserver://127.0.0.1:1433;databaseName=EFMIS
username=sa
password=123qwe,.
辅助类得作用在于初始调用类得时候,实现配置加载,并创建SqlSessionFactory,方便后面进行SQL查询。
public class MybatisUtils {//SqlSessionFactory 静态单例模式private static SqlSessionFactory sqlSessionFactory;//使用Mybatis第一步 获取SqlSessionFactory对象static {try{String resource="mybatis-config.xml";InputStream inputStream= Resources.getResourceAsStream(resource);sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);} catch (Exception e){e.printStackTrace();}}//获取SqlSession实例//该实例包含了面向数据库执行sql命令所需要的所有方法public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}
此处我以登录操作为例。这样就可以连接数据库进行操作。
@PostMapping("/user/login")public Result> login(@RequestBody User user){SqlSession sqlSession= null;Map map= new HashMap<>();try{sqlSession= MybatisUtils.getSqlSession();UserMapper mapper= sqlSession.getMapper(UserMapper.class);user= mapper.login(user);if (user!= null){//生成tokenMap tokenmap= new HashMap<>();tokenmap.put("loginname", user.getLoginname());tokenmap.put("password", user.getPassword());String token= JwtUtils.getToken(tokenmap);//返回数据map.put("user", user);map.put("token", token);return Result.ok(map);} else {return Result.error(CommonConstant.SYS_ERR_CODE, "用户不存在!");}} catch (Exception e){e.printStackTrace();return Result.error("异常!"+ e.getMessage());} finally {if (sqlSession!= null){sqlSession.close();}}}
多余得内容不用管它。主要是配置数据源spring.datasource。配置数据库连接信息。
Server:port: 8090spring:# quartz定时任务配置quartz:# 数据库存储方式job-store-type: jdbcorg:quartz:jobStore:class: org.springframework.scheduling.quartz.LocalDataSourceJobStore#配置数据源datasource:url: jdbc:sqlserver://127.0.0.1:1433;SelectMethod=cursor;databaseName=EFMISusername: sapassword: 123qwe,.driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver#jsonjackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8#热部署devtools:restart:enabled: trueadditional-paths: src/main/javaexclude: static/**jta:atomikos:properties:recovery:forget-orphaned-log-entries-delay:mybatis:configuration:#开启驼峰映射map-underscore-to-camel-case: true#开启缓存cache-enabled: true#加载mapper.xml文件mapper-locations: classpath:com/ceaning/crudp/mapper/*.xml#别名扫描type-aliases-package: com.ceaning.crudp.entitylogging:config: classpath:logback-spring.xml
@Component
public class SpringUtils implements BeanFactoryPostProcessor {/*** Spring应用上下文环境*/private static ConfigurableListableBeanFactory beanFactory;@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {SpringUtils.beanFactory= configurableListableBeanFactory;}public static T getBean(String name) throws BeansException{name= lowerCaseInit(name);if(containsBean(name)){return (T) beanFactory.getBean(name);} else{return null;}}/*** 获取* @param cls* @return* @param * @throws BeansException*/public static T getBean(Class cls) throws BeansException{T result= (T) beanFactory.getBean(cls);return result;}/*** 判断 BeanFactory是否包含bean对象* @param name* @return*/public static boolean containsBean(String name){return beanFactory.containsBean(name);}/*** 判断以给定名字注册的bean定义是一个singleton还是一个prototype。* 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)* @param name* @return* @throws NoSuchBeanDefinitionException*/public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException{return beanFactory.isSingleton(name);}public static Class> getType(String name) throws NoSuchBeanDefinitionException{return beanFactory.getType(name);}public static String[] getAliases(String name) throws NoSuchBeanDefinitionException{return beanFactory.getAliases(name);}/*** 首字母小写* @param name* @return*/private static String lowerCaseInit(String name){if(name.length()>0){char c= name.charAt(0);if(c>=65 && c<=90){int i= c+ 32;return ((char)i)+ name.substring(1);} else{return name;}} else{return null;}}
}
此处还是以登录操作为例。同样可以进行数据库连接操作。
@PostMapping("/user/login")public Result> login(@RequestBody User user){Map map= new HashMap<>();try{UserMapper mapper= SpringUtils.getBean(UserMapper.class);user= mapper.login(user);if (user!= null){//生成tokenMap tokenmap= new HashMap<>();tokenmap.put("loginname", user.getLoginname());tokenmap.put("password", user.getPassword());String token= JwtUtils.getToken(tokenmap);//返回数据map.put("user", user);map.put("token", token);return Result.ok(map);} else {return Result.error(CommonConstant.SYS_ERR_CODE, "用户不存在!");}} catch (Exception e){e.printStackTrace();return Result.error("异常!"+ e.getMessage());} }
实际项目中单独配置mybatis-config.xml较少。一般都写在application.yml里。
后面继续学习druid得配置以及操作实现。