MyBatis 使用手冊(cè)
越來越多的企業(yè)已經(jīng)將 MyBatis 使用到了正式的生產(chǎn)環(huán)境,本文就使用 MyBatis 的幾種方式提供簡(jiǎn)單的示例,以及如何對(duì)數(shù)據(jù)庫密碼進(jìn)行加密,目前有以下章節(jié):
單獨(dú)使用 MyBatis 集成 Spring 框架 集成 Spring Boot 框架 Spring Boot 配置數(shù)據(jù)庫密碼加密
1.單獨(dú)使用
引入 MyBatis 依賴,單獨(dú)使用,版本是3.5.6
引入依賴
????????
????????
????????????org.mybatis
????????????mybatis
????????????3.5.6
????????
????????
????????
????????????mysql
????????????mysql-connector-java
????????????8.0.19
????????
????
添加mybatis-config.xml
"1.0"?encoding="UTF-8"??>
????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-config.dtd">
????
????
????
????????
????????"cacheEnabled"?value="false"?/>
????????
????????"multipleResultSetsEnabled"?value="true"?/>
????????
????????"mapUnderscoreToCamelCase"?value="true"?/>
????????
????????"localCacheScope"?value="STATEMENT"?/>
????
????
????
????????"tk.mybatis.simple.model"?/>
????
????
????"development">
????????"development">
????????????type="JDBC">
????????????????""?value=""/>
????????????
????????????
????????????type="UNPOOLED">
????????????????"driver"?value="com.mysql.cj.jdbc.Driver"/>
????????????????"url"?value="jdbc:mysql://localhost:3306/gsfy_user?useUnicode=true&characterEncoding=UTF-8&useSSL=false"/>
????????????????"username"?value="user"/>
????????????????"password"?value="password"/>
????????????
????????
????
?
????
????????"tk.mybatis.simple.mapper"/>
????
開始使用
Model類
tk.mybatis.simple.model.DbTest.java
package?tk.mybatis.simple.model;
public?class?DbTest?{
????public?Integer?id;
????public?String?text;
????public?Integer?getId()?{
????????return?id;
????}
????public?void?setId(Integer?id)?{
????????this.id?=?id;
????}
????public?String?getText()?{
????????return?text;
????}
????public?void?setText(String?text)?{
????????this.text?=?text;
????}
????@Override
????public?String?toString()?{
????????return?"DbTest{"?+
????????????????"id="?+?id?+
????????????????",?text='"?+?text?+?'\''?+
????????????????'}';
????}
}
Mapper接口
tk.mybatis.simple.mapper.DbTestMapper
package?tk.mybatis.simple.mapper;
import?tk.mybatis.simple.model.DbTest;
public?interface?DbTestMapper?{
????DbTest?queryById(Integer?id);
}
XML映射文件
XML映射文件請(qǐng)放于Mapper接口所在路徑下,保證名稱相同
tk/mybatis/simple/mapper/DbTestMapper.xml
"1.0"?encoding="UTF-8"?>
"-//mybatis.org//DTD?Mapper?3.0//EN"?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"tk.mybatis.simple.mapper.DbTestMapper">
????
執(zhí)行示例
package?tk.mybatis.simple;
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?tk.mybatis.simple.mapper.DbTestMapper;
import?java.io.IOException;
import?java.io.Reader;
public?class?MyBatisHelper?{
????private?static?SqlSessionFactory?sqlSessionFactory;
????static?{
????????try?{
????????????//?MyBatis的配置文件
????????????Reader?reader?=?Resources.getResourceAsReader("mybatis-config.xml");
????????????//?創(chuàng)建一個(gè)?sqlSessionFactory?工廠類
????????????sqlSessionFactory?=?new?SqlSessionFactoryBuilder().build(reader);
????????????reader.close();
????????}?catch?(IOException?e)?{
????????????e.printStackTrace();
????????}
????}
????public?static?SqlSession?getSqlSession()?{
????????return?sqlSessionFactory.openSession();
????}
????public?static?void?main(String[]?args)?{
????????//?創(chuàng)建一個(gè)?SqlSession?會(huì)話
????????SqlSession?sqlSession?=?MyBatisHelper.getSqlSession();
????????//?獲取?DbTestMapper?接口的動(dòng)態(tài)代理對(duì)象
????????DbTestMapper?dbTestMapper?=?sqlSession.getMapper(DbTestMapper.class);
????????//?執(zhí)行查詢
????????System.out.println(dbTestMapper.queryById(1).toString());
????}
}
2.集成Spring
在 Spring 項(xiàng)目中,使用 MyBatis 的模板,請(qǐng)注意 Spring 的版本為5.2.10.RELEASE
日志框架使用Log4j2(推薦),版本為2.13.3,性能高于logback和log4j
我的項(xiàng)目模板 Git 地址
工程結(jié)構(gòu)圖
其中 jquery.min.js文件可以去官網(wǎng)下載
引入依賴
"1.0"?encoding="UTF-8"?>
"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">
????4.0.0
????
????tk.mybatis.simple
????mybatis-spring
????war
????
????????
????????3.5.6
????????
????????2.11.3
????????1.8
????????UTF-8
????
????
????????
????????????
????????????????org.springframework
????????????????spring-framework-bom
????????????????5.2.10.RELEASE
????????????????<type>pomtype>
????????????????import
????????????
????????????
????????????????org.apache.logging.log4j
????????????????log4j-bom
????????????????2.13.3
????????????????import
????????????????<type>pomtype>
????????????
????????
????
????
????????
????????
????????????org.mybatis
????????????mybatis-spring
????????????1.3.2
????????
????????
????????????org.mybatis
????????????mybatis
????????????${mybatis.version}
????????
????????
????????????mysql
????????????mysql-connector-java
????????????8.0.19
????????
????????
????????
????????????com.alibaba
????????????druid
????????????1.2.3
????????
????????
????????
????????????com.github.pagehelper
????????????pagehelper
????????????5.2.0
????????
????????
????????????com.github.jsqlparser
????????????jsqlparser
????????????3.2
????????
????????
????????
????????
????????????javax.servlet
????????????servlet-api
????????????2.5
????????????provided
????????
????????
????????
????????????javax.servlet.jsp
????????????jsp-api
????????????2.1
????????????provided
????????
????????
????????
????????????javax.servlet
????????????jstl
????????????1.2
????????
????????
????????
????????????org.springframework
????????????spring-context
????????
????????
????????
????????????org.springframework
????????????spring-jdbc
????????
????????
????????
????????????org.springframework
????????????spring-tx
????????
????????
????????
????????????org.springframework
????????????spring-aop
????????
????????
????????
????????????org.aspectj
????????????aspectjweaver
????????????1.8.2
????????
????????
????????
????????????javax.annotation
????????????javax.annotation-api
????????????1.2
????????
????????
????????
????????????javax.transaction
????????????javax.transaction-api
????????????1.2
????????
????????
????????
????????????org.springframework
????????????spring-web
????????
????????
????????
????????????org.springframework
????????????spring-webmvc
????????
????????
????????
????????????com.fasterxml.jackson.core
????????????jackson-databind
????????????${jackson.version}
????????
????????
????????????com.fasterxml.jackson.core
????????????jackson-core
????????????${jackson.version}
????????
????????
????????????com.fasterxml.jackson.core
????????????jackson-annotations
????????????${jackson.version}
????????
????????
????????
????????
????????????org.apache.logging.log4j
????????????log4j-core
????????
????????
????????????org.apache.logging.log4j
????????????log4j-api
????????
????????
????????
????????????org.apache.logging.log4j
????????????log4j-web
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-slf4j-impl
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-1.2-api
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-jcl
????????
????????
????????
????????????org.slf4j
????????????slf4j-api
????????????1.7.7
????????
????????
????????
????????????com.lmax
????????????disruptor
????????????3.4.2
????????
????????
????????
????????
????????????commons-fileupload
????????????commons-fileupload
????????????1.4
????????
????????
????????????commons-io
????????????commons-io
????????????2.8.0
????????
????????
????????????commons-codec
????????????commons-codec
????????????1.15
????????
????
????
????????study-ssm
????????
????????????
????????????????maven-compiler-plugin
????????????????
????????????????????<source>1.8source>
????????????????????1.8
????????????????????UTF-8
????????????????
????????????
????????
????????
????????????
????????????????src/main/java
????????????????
????????????????????**/*.properties
????????????????????**/*.xml
????????????????
????????????????false
????????????
????????????
????????????????src/main/resources/META-INF/spring
????????????????
????????????????????spring-mybatis.xml
????????????????????spring-mvc.xml
????????????????
????????????????false
????????????
????????????
????????????????src/main/resources
????????????????
????????????????????**/*.properties
????????????????????**/*.xml
????????????????
????????????????false
????????????
????????
????
添加spring-mvc.xml
"1.0"?encoding="UTF-8"?>
"http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????xmlns:context="http://www.springframework.org/schema/context"
???????xmlns:mvc="http://www.springframework.org/schema/mvc"
???????xsi:schemaLocation="http://www.springframework.org/schema/beans
???????????????????????????http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
???????????????????????????http://www.springframework.org/schema/context
???????????????????????????http://www.springframework.org/schema/context/spring-context-3.1.xsd
???????????????????????????http://www.springframework.org/schema/mvc
???????????????????????????http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
????
????"tk.mybatis.simple"?/>
????
????"mappingJacksonHttpMessageConverter"
??????????class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
????????"supportedMediaTypes">
????????????
????????????????text/html;charset=UTF-8
????????????
????????
????
????
????"org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter?">
????????"messageConverters">
????????????
????????????????"mappingJacksonHttpMessageConverter"?/>?
????????????
????????
????
????
????"multipartResolver"?class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
????????
????????"defaultEncoding"?value="utf-8"?/>
????????
????????"maxUploadSize"?value="104857600"?/>
????????
????????"maxInMemorySize"?value="40960"?/>
????????
????????"resolveLazily"?value="true"/>
????
????
????"org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
????????"favorParameter"?value="true"?/>
????????"parameterName"?value="format"/>
????????"ignoreAcceptHeader"?value="true"?/>
????????"mediaTypes">
????????????
????????????????
????????????????json=application/json
????????????????xml=application/xml
????????????????html=text/html
????????????
????????
????????"defaultContentType"?value="text/html"?/>
????
????
????"org.springframework.web.servlet.view.InternalResourceViewResolver">
????????
????????"prefix"?value="/WEB-INF/jsp/"?/>
????????"suffix"?value=".jsp"?/>
????
????
????
????
????
????
????"static/"?mapping="/static/**"/>
添加mybatis-config.xml
"1.0"?encoding="UTF-8"??>
????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-config.dtd">
?
?
?
??
??"cacheEnabled"?value="false"?/>
??
??"localCacheScope"?value="STATEMENT"?/>
??
??
??"lazyLoadingEnabled"?value="true"?/>
??
??
??"aggressiveLazyLoading"?value="false"?/>
??
??"useColumnLabel"?value="true"?/>
??
??"useGeneratedKeys"?value="false"?/>
??
??"mapUnderscoreToCamelCase"?value="true"?/>
?
?
?
??"tk.mybatis.simple.model"?/>
?
?
??
??"com.github.pagehelper.PageInterceptor">
???
???"helperDialect"?value="mysql"/>
???
???"offsetAsPageNum"?value="true"?/>
???
???"rowBoundsWithCount"?value="true"?/>
???
???"pageSizeZero"?value="true"?/>
??
?
添加spring-mybatis.xml
"1.0"?encoding="UTF-8"?>
"http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????xmlns:tx="http://www.springframework.org/schema/tx"?xmlns:aop="http://www.springframework.org/schema/aop"
???????xsi:schemaLocation="http://www.springframework.org/schema/beans
????????????????????????http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
????????????????????????http://www.springframework.org/schema/tx
????????????????????????http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
????????????????????????http://www.springframework.org/schema/aop
????????????????????????https://www.springframework.org/schema/aop/spring-aop.xsd">
????
????"dataSource"?class="com.alibaba.druid.pool.DruidDataSource"
??????????init-method="init"?destroy-method="close">
????????"url"?value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8"/>
????????"driverClassName"?value="com.mysql.cj.jdbc.Driver"/>
????????"username"?value="root"/>
????????"password"?value="password"/>
????????"filters"?value="stat,log4j,wall"/>
????????
????????"maxActive"?value="20"/>
????????"minIdle"?value="20"/>
????????
????????"initialSize"?value="5"/>
????????
????????"maxWait"?value="10000"/>
????????
????????"timeBetweenEvictionRunsMillis"?value="3600000"/>
????????
????????"minEvictableIdleTimeMillis"?value="120000"/>
????????"testWhileIdle"?value="true"/>
????????"testOnBorrow"?value="false"/>
????
????
????"mySqlSessionFactory"?class="org.mybatis.spring.SqlSessionFactoryBean">
????????"dataSource"?ref="dataSource"/>
????????
????????"configLocation"?value="classpath:mybatis-config.xml"/>
????????
????????"mapperLocations"?value="classpath:tk/mybatis/simple/mapper/*.xml"/>
????
????
????"org.mybatis.spring.mapper.MapperScannerConfigurer">
????????
????????"basePackage"?value="tk.mybatis.simple.mapper"/>
????????
????????"sqlSessionFactoryBeanName"?value="mySqlSessionFactory"/>
????
????
????"txManager"?class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
????????
????????"dataSource"?ref="dataSource"/>
????
????
????"txManager"/>
????
????"transactionAdvice"?transaction-manager="txManager">
????????
????????????"insert*"?rollback-for="java.lang.Exception"/>
????????????"delete*"?rollback-for="java.lang.Exception"/>
????????????"update*"?rollback-for="java.lang.Exception"/>
????????????"*"?read-only="true"/>
????????
????
????
????
????????"transactionAdvice"?pointcut="execution(*?tk.mybatis.*.service..*Service*.*(..))"/>
????
????
添加log4j2.xml
"1.0"?encoding="UTF-8"?>
"INFO"?monitorInterval="30">
????
????????
????????
????????"Console"?target="SYSTEM_OUT">
????????????
????????????"INFO"?onMatch="ACCEPT"?onMismatch="DENY"/>
????????????
????????????"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
????????
????????
????????"RollingFile"?fileName="logs/trace.log"
?????????????????????append="true"?filePattern="logs/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}-%i.log.gz">
????????????
????????????"INFO"?onMatch="ACCEPT"?onMismatch="DENY"/>
???
????????????"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
????????????
????????????????
????????????????"100?MB"/>
????????????
????????
??
????????"RollingErrorFile"?fileName="logs/error.log"
?????????????????????append="true"?filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
???
????????????"WARN"?onMatch="ACCEPT"?onMismatch="DENY"/>
???
????????????"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
????????????
????????????????
????????????????"100?MB"/>
????????????
????????
????
????
????????
????????"org.springframework"?level="INFO"/>
????????"org.mybatis"?level="INFO"/>
????????"INFO"?includeLocation="true">
????????????"Console"/>
????????????"RollingFile"/>
????????????"RollingErrorFile"/>
????????
????
添加web.xml
"1.0"?encoding="UTF-8"?>
"http://www.w3.org/2001/XMLSchema-instance"
?????????xmlns="http://java.sun.com/xml/ns/javaee"
?????????xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
?????????version="3.0">
????Archetype?Created?Web?Application
????
????
????????contextConfigLocation
????????classpath:spring-mybatis.xml
????
????
????
????????encodingFilter
????????org.springframework.web.filter.CharacterEncodingFilter
????????true
????????
????????????encoding
????????????UTF-8
????????
????????
????????????forceEncoding
????????????true
????????
????
????
????????encodingFilter
????????/*
????
????
????
????
????????org.springframework.web.context.ContextLoaderListener
????
????
????
????????org.springframework.web.util.IntrospectorCleanupListener
????
????
????
????????
????????SpringMVC
????????org.springframework.web.servlet.DispatcherServlet
????????
????????
????????????contextConfigLocation
????????????classpath:spring-mvc.xml
????????
????????
????????1
????????true
????
????
????????
????????SpringMVC
????????
????????/
????
????
????????
????????index.jsp
????
開始使用
Model類
tk.mybatis.simple.model.DbTest.java
package?tk.mybatis.simple.model;
public?class?DbTest?{
????public?Integer?id;
????public?String?text;
????public?Integer?getId()?{
????????return?id;
????}
????public?void?setId(Integer?id)?{
????????this.id?=?id;
????}
????public?String?getText()?{
????????return?text;
????}
????public?void?setText(String?text)?{
????????this.text?=?text;
????}
????@Override
????public?String?toString()?{
????????return?"DbTest{"?+
????????????????"id="?+?id?+
????????????????",?text='"?+?text?+?'\''?+
????????????????'}';
????}
}
Mapper接口
tk.mybatis.simple.mapper.DbTestMapper
package?tk.mybatis.simple.mapper;
import?tk.mybatis.simple.model.DbTest;
public?interface?DbTestMapper?{
????DbTest?queryById(Integer?id);
}
XML映射文件
XML映射文件請(qǐng)放于Mapper接口所在路徑下,保證名稱相同
tk/mybatis/simple/mapper/DbTestMapper.xml
"1.0"?encoding="UTF-8"?>
"-//mybatis.org//DTD?Mapper?3.0//EN"?"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
"tk.mybatis.simple.mapper.DbTestMapper">
????
Controller類
package?tk.mybatis.simple.controller;
import?org.apache.logging.log4j.LogManager;
import?org.apache.logging.log4j.Logger;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Controller;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RequestParam;
import?org.springframework.web.servlet.ModelAndView;
import?tk.mybatis.simple.mapper.DbTestMapper;
import?tk.mybatis.simple.model.DbTest;
@Controller
@RequestMapping(value?=?"/test")
public?class?DbTestController?{
????private?static?final?Logger?logger?=?LogManager.getLogger(DbTestController.class);
????@Autowired
????private?DbTestMapper?dbTestMapper;
????@GetMapping("/")
????public?String?index()?{
????????return?"welcome";
????}
????@GetMapping("/query")
????public?ModelAndView?query(@RequestParam("id")?Integer?id)?{
????????DbTest?dbTest?=?dbTestMapper.queryById(id);
????????logger.info("入?yún)ⅲ簕},查詢結(jié)果:{}",?id,?dbTest.toString());
????????ModelAndView?mv?=?new?ModelAndView();
????????mv.setViewName("result");
????????mv.addObject("test",?dbTest);
????????return?mv;
????}
}
index.jsp
<%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>
<%@?page?contentType="text/html;charset=UTF-8"?language="java"?%>
"zh-CN">
????"utf-8">
????"X-UA-Compatible"?content="IE=edge">
????"viewport"?content="width=device-width,?initial-scale=1">
????首頁
Hello?World!
welcome.jsp
<%--
??Created?by?IntelliJ?IDEA.
??User:?jingp
??Date:?2019/6/5
??Time:?15:17
??To?change?this?template?use?File?|?Settings?|?File?Templates.
--%>
<%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>
<%@?page?contentType="text/html;charset=UTF-8"?language="java"?%>
"zh-CN">
????"utf-8">
????"X-UA-Compatible"?content="IE=edge">
????"viewport"?content="width=device-width,?initial-scale=1">
????查詢
查詢數(shù)據(jù)庫
result.jsp
<%@?taglib?prefix="c"?uri="http://java.sun.com/jsp/jstl/core"?%>
<%@?page?contentType="text/html;charset=UTF-8"?language="java"?%>
"zh-CN">
????"utf-8">
????"X-UA-Compatible"?content="IE=edge">
????"viewport"?content="width=device-width,?initial-scale=1">
????結(jié)果
查詢結(jié)果:${test.toString()}
運(yùn)行程序
配置好Tomcat,然后啟動(dòng)就可以了,進(jìn)入頁面,點(diǎn)擊開始測(cè)試,然后查詢數(shù)據(jù)庫就可以通過MyBatis操作數(shù)據(jù)庫了
3.集成SpringBoot
引入依賴
"1.0"?encoding="UTF-8"?>
"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">
????
????????org.springframework.boot
????????spring-boot-starter-parent
????????2.0.3.RELEASE
????
????4.0.0
????
????tk.mybatis.simple
????mybatis-spring-boot
????jar
????
????????1.8
????????UTF-8
????
????
????????
????????????
????????????????org.apache.logging.log4j
????????????????log4j-bom
????????????????2.13.3
????????????????import
????????????????<type>pomtype>
????????????
????????
????
????
????????
????????
????????????org.springframework.boot
????????????spring-boot-starter
????????????
????????????????
????????????????????org.springframework.boot
????????????????????spring-boot-starter-logging
????????????????
????????????
????????
????????
????????
????????????org.springframework.boot
????????????spring-boot-starter-web
????????
????????
????????
????????????org.springframework.boot
????????????spring-boot-starter-test
????????????test
????????
????????
????????
????????????org.projectlombok
????????????lombok
????????????1.16.22
????????????provided
????????
????????
????????
????????????org.mybatis.spring.boot
????????????mybatis-spring-boot-starter
????????????2.1.4
????????
????????
????????????mysql
????????????mysql-connector-java
????????????8.0.19
????????
????????
????????
????????????com.alibaba
????????????druid-spring-boot-starter
????????????1.2.3
????????
????????
????????
????????????com.github.pagehelper
????????????pagehelper-spring-boot-starter
????????????1.3.0
????????
????????
????????
????????
????????????org.apache.logging.log4j
????????????log4j-core
????????
????????
????????????org.apache.logging.log4j
????????????log4j-api
????????
????????
????????
????????????org.apache.logging.log4j
????????????log4j-web
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-slf4j-impl
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-1.2-api
????????
?????????
????????????org.apache.logging.log4j
????????????log4j-jcl
????????
????????
????????
????????????org.slf4j
????????????slf4j-api
????????????1.7.7
????????
????????
????????
????????????com.lmax
????????????disruptor
????????????3.4.2
????????
????????
????????
????????
????????????com.alibaba
????????????fastjson
????????????1.2.54
????????
????
????
????????basic
????????
????????
????????????
????????????
????????????
????????????????org.codehaus.mojo
????????????????appassembler-maven-plugin
????????????????1.10
????????????????
????????????????????
????????????????????
????????????????????????unix
????????????????????????windows
????????????????????
????????????????????
????????????????????lib
????????????????????
????????????????????flat
????????????????????
????????????????????conf
????????????????????
????????????????????true
????????????????????
????????????????????src/main/resources
????????????????????true
????????????????????
????????????????????${project.build.directory}/basic-assemble
????????????????????
????????????????????????
????????????????????????????
????????????????????????????com.fullmoon.study.Application
????????????????????????????
????????????????????????????basic
????????????????????????????
????????????????????????????
????????????????????????????????
????????????????????????????????????
????????????????????????????????????-XX:+HeapDumpOnOutOfMemoryError
????????????????????????????????????-XX:HeapDumpPath=/app/dump
????????????????????????????????????-Xmx512m
????????????????????????????????????-Xms512m
????????????????????????????????
????????????????????????????
????????????????????????
????????????????????
????????????????
????????????
????????????
????????????
????????????????org.apache.maven.plugins
????????????????maven-compiler-plugin
????????????????
????????????????????<source>1.8source>
????????????????????1.8
????????????????
????????????
????????
????????
????????
????????????
????????????????src/main/resources
????????????????
????????????????????*.properties
????????????????????*.xml
????????????????????*.yml
????????????????
????????????????false
????????????
????????????
????????????????src/main/resources/mapper
????????????????mapper/
????????????????
????????????????????*.xml
????????????????
????????????????false
????????????
????????
????
添加mybatis-config.xml
MyBatis 的配置文件
"1.0"?encoding="UTF-8"??>
????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
????????"http://mybatis.org/dtd/mybatis-3-config.dtd">
?
?
?
??
??"cacheEnabled"?value="false"?/>
??
??"localCacheScope"?value="STATEMENT"?/>
??
??
??"lazyLoadingEnabled"?value="true"?/>
??
??
??"aggressiveLazyLoading"?value="false"?/>
??
??"useColumnLabel"?value="true"?/>
??
??"useGeneratedKeys"?value="false"?/>
??
??"mapUnderscoreToCamelCase"?value="true"?/>
?
添加application.yml
Spring Boot 的配置文件
server:
??port:?9092
??servlet:
????context-path:?/mybatis-spring-boot-demo
??tomcat:
????accept-count:?200
????min-spare-threads:?200
spring:
??application:
????name:?mybatis-spring-boot-demo
??profiles:
????active:?test
??servlet:
????multipart:
??????max-file-size:?100MB
??????max-request-size:?100MB
??datasource:
????type:?com.alibaba.druid.pool.DruidDataSource
????druid:
??????driver-class-name:?com.mysql.cj.jdbc.Driver?#?不配置則會(huì)根據(jù)?url?自動(dòng)識(shí)別
??????initial-size:?5?#?初始化時(shí)建立物理連接的個(gè)數(shù)
??????min-idle:?20?#?最小連接池?cái)?shù)量
??????max-active:?20?#?最大連接池?cái)?shù)量
??????max-wait:?10000?#?獲取連接時(shí)最大等待時(shí)間,單位毫秒
??????validation-query:?SELECT?1?#?用來檢測(cè)連接是否有效的?sql
??????test-while-idle:?true?#?申請(qǐng)連接的時(shí)候檢測(cè),如果空閑時(shí)間大于?timeBetweenEvictionRunsMillis,則執(zhí)行?validationQuery?檢測(cè)連接是否有效
??????test-on-borrow:?false?#?申請(qǐng)連接時(shí)執(zhí)行?validationQuery?檢測(cè)連接是否有效
??????min-evictable-idle-time-millis:?120000?#?連接保持空閑而不被驅(qū)逐的最小時(shí)間,單位是毫秒
??????time-between-eviction-runs-millis:?3600000?#?配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒
??????filters:?stat,log4j,wall?#?配置過濾器,stat-監(jiān)控統(tǒng)計(jì),log4j-日志,wall-防御?SQL?注入
??????connection-properties:?'druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000'?#?StatFilter配置,打開合并?SQL?功能和慢?SQL?記錄
??????web-stat-filter:?#?WebStatFilter?配置
????????enabled:?true
????????url-pattern:?'/*'
????????exclusions:?'*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*'
??????stat-view-servlet:?#?StatViewServlet?配置
????????enabled:?true
????????url-pattern:?'/druid/*'
????????reset-enable:?false
????????login-username:?druid
????????login-password:?druid
??????aop-patterns:?'com.fullmoon.study.service.*'?#?Spring?監(jiān)控配置
mybatis:
??type-aliases-package:?tk.mybatis.simple.model
??mapper-locations:?classpath:mapper/*.xml
??config-location:?classpath:mybatis-config.xml
pagehelper:
??helper-dialect:?mysql
??reasonable:?true?#?分頁合理化參數(shù)
??offset-as-page-num:?true?#?將?RowBounds?中的?offset?參數(shù)當(dāng)成?pageNum?使用
??supportMethodsArguments:?true?#?支持通過?Mapper?接口參數(shù)來傳遞分頁參數(shù)
#?測(cè)試環(huán)境
---
spring:
??profiles:?test
??datasource:
????druid:
??????url:?jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
??????username:?root
??????password:?password
注意上面 mybatis 的相關(guān)配置,XML 映射文件是存放于 classpath 下的 mapper 文件夾下面的
添加log4j2.xml
"1.0"?encoding="UTF-8"?>
"INFO"?monitorInterval="30">
?
??
??
??"Console"?target="SYSTEM_OUT">
???
???"INFO"?onMatch="ACCEPT"?onMismatch="DENY"/>
???
???"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
??
??
??"RollingFile"?fileName="logs/trace.log"
??????append="true"?filePattern="logs/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}-%i.log.gz">
???
???"INFO"?onMatch="ACCEPT"?onMismatch="DENY"/>
???
???"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
???
????
????"100?MB"/>
???
??
??
??"RollingErrorFile"?fileName="logs/error.log"
??????append="true"?filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
???
???"WARN"?onMatch="ACCEPT"?onMismatch="DENY"/>
???
???"%d{yyyy-MM-dd?HH:mm:ss,SSS}:%4p?%t?(%F:%L)?-?%m%n"/>
???
????
????"100?MB"/>
???
??
?
?
??
??"org.springframework"?level="INFO"/>
??"org.mybatis"?level="INFO"/>
??"INFO"?includeLocation="true">
???"Console"/>
???"RollingFile"/>
???"RollingErrorFile"/>
??
?
開始使用
在 Spring Boot 項(xiàng)目的啟動(dòng)類上面添加 @MapperScan("tk.mybatis.simple.mapper") 注解,指定 Mapper 接口所在的包路徑,啟動(dòng)類如下:
@SpringBootApplication
@EnableTransactionManagement
@MapperScan("tk.mybatis.simple.mapper")
public?class?Application?{
????public?static?void?main(String[]?args){
????????SpringApplication.run(Application.class,?args);
????}
}
然后在 classpath 下的 mapper 文件夾(根據(jù) application.yml 配置文件中的定義)添加 XML 映射文件,即可開始使用 MyBatis了
其中 @EnableTransactionManagement 注解表示開啟事務(wù)的支持(@SpringBootApplication 注解在加載容器的時(shí)候已經(jīng)開啟事務(wù)管理的功能了,也可不需要添加該注解)
在需要事務(wù)的方法或者類上面添加 @Transactional 注解即可,引入spring-boot-starter-jdbc依賴,注入的是 DataSourceTransactionManager 事務(wù)管理器,事務(wù)的使用示例如下:
@Transactional(propagation?=?Propagation.REQUIRED,?rollbackFor?=?Exception.class)
public?int?insertFeedback(UserFeedbackInfo?requestAddParam)?{
????try?{
????????//?...?業(yè)務(wù)邏輯?
????}?catch?(Exception?e)?{
????????//?事務(wù)回滾
????????TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
????????return?0;
????}
}
4.SpringBoot配置數(shù)據(jù)庫密碼加密?
4.1 借助Druid數(shù)據(jù)源
Druid 數(shù)據(jù)源支持?jǐn)?shù)據(jù)庫密碼進(jìn)行加密,在 Spring Boot 中配置方式如下:
加密數(shù)據(jù)庫密碼,通過 Druid 的 com.alibaba.druid.filter.config.ConfigTools 工具類對(duì)數(shù)據(jù)庫密碼進(jìn)行加密(RSA 算法),如下:
public?static?void?main(String[]?args)?throws?Exception?{
????ConfigTools.main(new?String[]{"you_password"});
}
或者執(zhí)行以下命令:
java?-cp?druid-1.0.16.jar?com.alibaba.druid.filter.config.ConfigTools?you_password
輸出:
privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==
然后在 application.yml 中添加以下配置:
spring:
??datasource:
????druid:
??????password:?${password}?#?加密后的數(shù)據(jù)庫密碼
??????filters:?config?#?配置?ConfigFilter?,通過它進(jìn)行解密
??????#?提示需要對(duì)數(shù)據(jù)庫密碼進(jìn)行解密
??????connection-properties:?'config.decrypt=true;config.decrypt.key=${publickey}'
publicKey:?MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJvQUB7pExzbzTpaQCCY5qS+86MgYWvRpqPUCzjFwdMgrBjERE5X5oojSe48IGZ6UtCCeaI0PdhkFoNaJednaqMCAwEAAQ==
這樣就OK了,主要是在 ConfigFilter 過濾器中,會(huì)先對(duì)密碼進(jìn)行解密,然后再設(shè)置到 DataSource 數(shù)據(jù)源
4.2 借助Jasypt加密包
Jasypt是一個(gè) Java 庫,可以讓開發(fā)人員將基本的加密功能添加到項(xiàng)目中,而無需對(duì)加密的工作原理有深入的了解
接下來講述的在 Spring Boot 項(xiàng)目中如何使用Jasypt,其他使用方法請(qǐng)參考Jasypt Github地址
引入依賴
????com.github.ulisesbocchio
????jasypt-spring-boot-starter
????3.0.3
添加注解
在啟動(dòng)類上面添加@EnableEncryptableProperties注解,使整個(gè) Spring 環(huán)境啟用 Jasypt 加密功能,如下:
@SpringBootApplication
@EnableEncryptableProperties
public?class?Application?{
????public?static?void?main(String[]?args){
????????SpringApplication.run(Application.class,?args);
????}
}
獲取密文
需要通過 Jasypt 官方提供的 jar 包進(jìn)行加密,如下:
import?com.ulisesbocchio.jasyptspringboot.properties.JasyptEncryptorConfigurationProperties;
import?org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import?org.jasypt.encryption.pbe.config.PBEConfig;
import?org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
/**
?*?@author?jingping.liu
?*?@date?2020-11-20
?*?@description?Jasypt?安全框架加密類工具包
?*/
public?class?JasyptUtils?{
????/**
?????*?生成一個(gè)?{@link?PBEConfig}?配置對(duì)象
?????*?
?????*?注意!!!
?????*?可查看?Jasypt?全局配置對(duì)象?{@link?JasyptEncryptorConfigurationProperties}?中的默認(rèn)值
?????*?這里的配置建議與默認(rèn)值保持一致,否則需要在?application.yml?中定義這里的配置(也可以通過?JVM?參數(shù)的方法)
?????*?注意?password?和?algorithm?配置項(xiàng),如果不一致在啟動(dòng)時(shí)可能會(huì)解密失敗而報(bào)錯(cuò)
?????*
?????*?@param?salt?鹽值
?????*?@return?SimpleStringPBEConfig?加密配置
?????*/
????private?static?SimpleStringPBEConfig?generatePBEConfig(String?salt)?{
????????SimpleStringPBEConfig?config?=?new?SimpleStringPBEConfig();
????????//?設(shè)置?salt?鹽值
????????config.setPassword(salt);
????????//?設(shè)置要?jiǎng)?chuàng)建的加密程序池的大小,這里僅臨時(shí)創(chuàng)建一個(gè),設(shè)置?1?即可
????????config.setPoolSize("1");
????????//?設(shè)置加密算法,?此算法必須由?JCE?提供程序支持,默認(rèn)值?PBEWITHHMACSHA512ANDAES_256
????????config.setAlgorithm("PBEWithMD5AndDES");
????????//?設(shè)置應(yīng)用于獲取加密密鑰的哈希迭代次數(shù)
????????config.setKeyObtentionIterations("1000");
????????//?設(shè)置要請(qǐng)求加密算法的安全提供程序的名稱
????????config.setProviderName("SunJCE");
????????//?設(shè)置?salt?鹽的生成器
????????config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
????????//?設(shè)置?IV?生成器
????????config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
????????//?設(shè)置字符串輸出的編碼形式,支持?base64?和?hexadecimal
????????config.setStringOutputType("base64");
????????return?config;
????}
????/**
?????*?通過?{@link?PooledPBEStringEncryptor}?進(jìn)行加密密
?????*
?????*?@param?salt?鹽值
?????*?@param?message?需要加密的內(nèi)容
?????*?@return?加密后的內(nèi)容
?????*/
????public?static?String?encrypt(String?salt,?String?message)?{
????????PooledPBEStringEncryptor?encryptor?=?new?PooledPBEStringEncryptor();
????????SimpleStringPBEConfig?pbeConfig?=?generatePBEConfig(salt);
????????//?生成加密配置
????????encryptor.setConfig(pbeConfig);
????????System.out.println("----ARGUMENTS-------------------");
????????System.out.println("message:?"?+?message);
????????System.out.println("salt:?"?+?pbeConfig.getPassword());
????????System.out.println("algorithm:?"?+?pbeConfig.getAlgorithm());
????????System.out.println("stringOutputType:?"?+?pbeConfig.getStringOutputType());
????????//?進(jìn)行加密
????????String?cipherText?=?encryptor.encrypt(message);
????????System.out.println("----OUTPUT-------------------");
????????System.out.println(cipherText);
????????return?cipherText;
????}
????public?static?String?decrypt(String?salt,?String?message)?{
????????PooledPBEStringEncryptor?encryptor?=?new?PooledPBEStringEncryptor();
????????//?設(shè)置解密配置
????????encryptor.setConfig(generatePBEConfig(salt));
????????//?進(jìn)行解密
????????return?encryptor.decrypt(message);
????}
????public?static?void?main(String[]?args)?{
????????//?隨機(jī)生成一個(gè)?salt?鹽值
????????String?salt?=?UUID.randomUUID().toString().replace("-",?"");
????????//?進(jìn)行加密
????????encrypt(salt,?"message");
????}
}
如何使用
直接在 application.yml 配置文件中添加 Jasypt 配置和生成的密文
jasypt:
??encryptor:
????password:?salt?#?salt?鹽值,需要和加密時(shí)使用的?salt?一致
????algorithm:?PBEWithMD5AndDES?#?加密算法,需要和加密時(shí)使用的算法一致
????string-output-type:?hexadecimal?#?密文格式,,需要和加密時(shí)使用的輸出格式一致
spring:
??datasource:
????druid:
??????username:?root
??????password:?ENC(cipherText)?# Jasypt 密文格式:ENC(密文)
“salt 鹽值也可以通過 JVM 參數(shù)進(jìn)行設(shè)置,例如:-Djasypt.encryptor.password=salt
”
啟動(dòng)后,Jasypt 會(huì)先根據(jù)配置將 ENC(密文) 進(jìn)行解密,然后設(shè)置到 Spring 環(huán)境中
作者:月圓吖
www.cnblogs.com/lifullmoon/p/14014660.html
最近熬夜給大家準(zhǔn)備了515套Java代碼,有一些是業(yè)務(wù)類的小項(xiàng)目,比如Java博客項(xiàng)目,也有腳手架、也有平時(shí)用一些的工具類、21套小程序代碼,也有一些游戲類的項(xiàng)目。
掃以下二維碼并回復(fù)“828”即可獲取
或者在本公眾號(hào)對(duì)話框回復(fù)【828】馬上獲取


