Заметки об исследовании Spring Boot (3) Интеграция MyBatis + Druid
- Адрес источника примечаний к исследованию Spring Boot
- Заметки об исследовании Spring Boot (1) привет, мир
- Заметки об исследовании Spring Boot (2) Интеграция log4j2
- Заметки об исследовании Spring Boot (3) Интеграция MyBatis + Druid
0. Описание окружающей среды
- MyBatis Generator 1.3.6
- MySQL 5.7.17
- Драйвер: mysql-connector-java-5.1.2.jar
1. MyBatis Generator
MyBatis GeneratorЭто инструмент, который автоматически генерирует модель, дао и картограф при использовании фреймворка mybatis, что значительно сокращает время ручного кодирования бизнес-разработчиков.
Мы будем использовать этот инструмент для автоматизации того, что необходимо для создания M-уровня в среде MVC.
2. Создайте локальную базу данных
Создайте таблицу в локальной базе данных
1# 创建数据库
2CREATE DATABASE LEARNING CHARACTER SET utf8;
3
4USE LEARNING;
5
6# 创建表结构
7CREATE TABLE ACCOUNT_INFO(
8 ACCOUNT_ID INTEGER PRIMARY KEY AUTO_INCREMENT,
9 NAME VARCHAR(50),
10 PWD VARCHAR(50),
11 BALANCE INTEGER
12);
13
14# 插入一条数据
15INSERT INTO ACCOUNT_INFO VALUES(NULL,'root','root',100);
3. Использование генератора MyBatis
ссылка на скачивание:
Если вы пользователь Windows, вы можете выбрать независимую от платформы версию при загрузке mysql-connector.
Поместите загруженный пакет jar драйвера MySQL в каталог lib генератора,
убедисьmybatis-generator-core-1.3.6.jar
а такжеmysql-connector-java-5.1.2.jar
в том же каталоге.
Подготовьте файл конфигурации configuration.xml со следующим содержимым:
1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE generatorConfiguration
3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
5
6<generatorConfiguration>
7 <!-- 配置驱动jar包路径.用了相对路径 -->
8 <classPathEntry location="mysql-connector-java-5.1.2.jar" />
9
10 <context id="DB2Tables" targetRuntime="MyBatis3">
11 <!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制 -->
12 <commentGenerator>
13 <property name="suppressDate" value="true" />
14 <property name="suppressAllComments" value="true" />
15 </commentGenerator>
16 <!-- 数据库连接 -->
17 <jdbcConnection driverClass="com.mysql.jdbc.Driver"
18 connectionURL="jdbc:mysql://localhost/LEARNING" userId="root"
19 password="********">
20 <property name="remarks" value="true" />
21 </jdbcConnection>
22
23 <javaTypeResolver>
24 <property name="forceBigDecimals" value="false" />
25 </javaTypeResolver>
26 <!-- 数据表对应的model 层 -->
27 <javaModelGenerator targetPackage="com.zdran.springboot.dao"
28 targetProject="D:\bxwzh">
29 <property name="enableSubPackages" value="true" />
30 </javaModelGenerator>
31 <!-- sql mapper 隐射配置文件 -->
32 <sqlMapGenerator targetPackage="com.zdran.springboot.mapping"
33 targetProject="D:\bxwzh">
34 <property name="enableSubPackages" value="true" />
35 </sqlMapGenerator>
36 <!-- 在ibatis2 中是dao层,但在mybatis3中,其实就是mapper接口 -->
37 <javaClientGenerator type="XMLMAPPER"
38 targetPackage="com.zdran.springboot.mapper" targetProject="D:\bxwzh">
39 <property name="enableSubPackages" value="true" />
40 </javaClientGenerator>
41
42 <!-- 要对哪些数据表进行生成操作,必须要有一个. -->
43 <table tableName="ACCOUNT_INFO" domainObjectName="AccountInfo"></table>
44 </context>
45</generatorConfiguration>
Примечание. Пароль к базе данных необходимо изменить на свой. targetProject="D:\bxwzh, этот каталог должен быть как можно более пустым"
Выполните следующую команду в каталоге lib генератора:
1java -jar mybatis-generator-core-1.3.6.jar -configfile configuration.xml -overwrite
2
3出现:MyBatis Generator finished successfully. 就说明成功了。
Мы напрямую копируем каталог com в каталог проекта
В новом каталоге ресурсов mybaits, затем сопоставьте папку со следующими mybaits.
Структура нашего проекта теперь выглядит так:
Добавьте зависимость mybaits:
1<!--springBoot和mybatis继承-->
2<dependency>
3 <groupId>org.mybatis.spring.boot</groupId>
4 <artifactId>mybatis-spring-boot-starter</artifactId>
5 <version>1.3.2</version>
6 <!-- 移除 logging -->
7 <exclusions>
8 <exclusion>
9 <groupId>org.springframework.boot</groupId>
10 <artifactId>spring-boot-starter-logging</artifactId>
11 </exclusion>
12 </exclusions>
13</dependency>
14<!-- mysql 驱动-->
15<dependency>
16 <groupId>mysql</groupId>
17 <artifactId>mysql-connector-java</artifactId>
18 <version>5.1.2</version>
19</dependency>
4. Добавьте конфигурацию MyBatis
Добавьте следующую конфигурацию в файл конфигурации:
1mybatis:
2 mapperLocations: classpath:mybatis/mapping/*.xml
3 typeAliasesPackage: com.zdran.springboot.dao
4
5spring:
6 datasource:
7 name: test
8 url: jdbc:mysql://localhost:3306/LEARNING
9 username: root
10 password: ********
11 driver-class-name: com.mysql.jdbc.Driver
5. Проверьте это
Добавьте путь сканирования пакета в класс SpringbootApplication.
1
2/**
3 * 启动程序
4 * Create by zdRan on 2018/6/28
5 *
6 * @author cm.zdran@gmail.com
7 */
8@SpringBootApplication
9@MapperScan(basePackages = "com.zdran.springboot.mapper")
10public class SpringbootApplication {
11
12 public static void main(String[] args) {
13 SpringApplication.run(SpringbootApplication.class, args);
14 }
15}
16
Затем мы реализуем интерфейс для запроса информации об учетной записи на основе имени. Создайте соответствующий контроллер, сервис и т.д.
Реализация сервисного уровня:
1/**
2 * Create by ranzd on 2018/7/2
3 *
4 * @author cm.zdran@gmail.com
5 */
6@Service
7public class AccountServiceImpl implements AccountService {
8 @Autowired
9 AccountInfoMapper accountInfoMapper;
10
11 @Override
12 public AccountInfo queryByName(String name) {
13 AccountInfoExample example = new AccountInfoExample();
14 example.createCriteria().andNameEqualTo(name);
15 List<AccountInfo> accountInfoList = accountInfoMapper.selectByExample(example);
16 if (accountInfoList != null && accountInfoList.size() != 0) {
17 return accountInfoList.get(0);
18 }
19 return null;
20 }
21}
Реализация уровня контроллера:
1/**
2 * Create by ranzd on 2018/7/3
3 *
4 * @author cm.zdran@gmail.com
5 */
6@RestController
7@RequestMapping("/account")
8public class AccountController {
9 private Logger logger = LoggerFactory.getLogger(AccountController.class);
10
11 @Autowired
12 AccountService accountService;
13
14 @GetMapping("/get/{name}")
15 public AccountInfo getAccountByName(@PathVariable String name) {
16 logger.info("根据姓名获取账号信息。入参:name:{}", name);
17 AccountInfo accountInfo = accountService.queryByName(name);
18 if (accountInfo == null) {
19 logger.info("根据姓名获取账号信息。获取失败");
20 }
21 logger.info("根据姓名获取账号信息。出参:accountInfo:{}", accountInfo.22 [native code]
23}">toString());
24 return accountInfo;
25 }
26}
запустить его, посетитьhttp://localhost:9090/learning/account/get/root
Имя пользователя root в конце URL-адреса
5. Интеграция друида
Описанный выше метод настройки является самым простым методом настройки. Существует также метод настройки, который часто используется в производственных средах.
добавить зависимости друида
1<dependency>
2 <groupId>com.alibaba</groupId>
3 <artifactId>druid</artifactId>
4 <version>1.1.1</version>
5</dependency>
Добавление конфигурации друида
1
2spring:
3 datasource:
4 url: jdbc:mysql://localhost:3306/LEARNING
5 username: root
6 password: ********
7 driver-class-name: com.mysql.jdbc.Driver
8 initialSize: 5
9 minIdle: 5
10 maxActive: 10
11 maxWait: 10000
12 timeBetweenEvictionRunsMillis: 60000
13 minEvictableIdleTimeMillis: 300000
14 testOnBorrow: false
15 testOnReturn: false
16 testWhileIdle: true
17 keepAlive: true
18 removeAbandoned: true
19 removeAbandonedTimeout: 80
20 logAbandoned: true
21 poolPreparedStatements: true
22 maxPoolPreparedStatementPerConnectionSize: 20
23 filters: stat,slf4j,wall
Добавьте зависимости, чтобы упростить использование аннотаций ConfigurationProperties для чтения информации о конфигурации в yml.
1<!-- 为了方便使用@ConfigurationProperties注解 -->
2<dependency>
3 <groupId>org.springframework.boot</groupId>
4 <artifactId>spring-boot-configuration-processor</artifactId>
5 <optional>true</optional>
6</dependency>
Создать класс чтения файла конфигурации друида
1/**
2 * Create by ranzd on 2018/7/3
3 *
4 * @author cm.zdran@gmail.com
5 */
6@Configuration
7@ConfigurationProperties(prefix = "spring.datasource")
8public class DruidDataSourceProperties {
9
10 private String driverClassName;
11 private String url;
12 private String username;
13 private String password;
14
15 private int initialSize;
16 private int minIdle;
17 private int maxActive;
18 private long maxWait;
19 private long timeBetweenEvictionRunsMillis;
20 private long minEvictableIdleTimeMillis;
21 private boolean testOnBorrow;
22 private boolean testOnReturn;
23 private boolean testWhileIdle;
24 private boolean keepAlive;
25 private boolean removeAbandoned;
26 private int removeAbandonedTimeout;
27 private boolean logAbandoned;
28 private boolean poolPreparedStatements;
29 private int maxPoolPreparedStatementPerConnectionSize;
30 private String filters;
31
32 //省略了所有属性的 get 、set方法
33}
34
В приведенном выше коде отсутствуют методы get и set для всех свойств. В вашем локальном коде должны быть методы get и set.
Удалите конфигурацию mybaits в yml:
1mybatis:
2 mapperLocations: classpath:mybatis/mapping/*.xml
3 typeAliasesPackage: com.zdran.springboot.dao
4
Удалите аннотацию MapperScan в классе SpringbootApplication.
1@MapperScan(basePackages = "com.zdran.springboot.mapper")
Создайте класс конфигурации для mybaits:
1/**
2 * Create by ranzd on 2018/7/3
3 *
4 * @author cm.zdran@gmail.com
5 */
6@Configuration
7@EnableTransactionManagement
8@MapperScan(
9 basePackages = "com.zdran.springboot.mapper",
10 sqlSessionFactoryRef = "learningSqlSessionFactory")
11public class MyBatisConfig {
12 private Logger logger = LoggerFactory.getLogger(MyBatisConfig.class);
13
14 @Autowired
15 DruidDataSourceProperties druidDataSourceProperties;
16
17 @Bean(name = "learningSqlSessionFactory")
18 @Primary
19 public SqlSessionFactory learningSqlSessionFactory() throws Exception {
20 final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
21 sessionFactory.setDataSource(getDruidDataSource());
22 sessionFactory.setTypeAliasesPackage("com.zdran.springboot.dao");
23 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
24 .getResources("classpath:/mybatis/mapping/*.xml"));
25 return sessionFactory.getObject();
26 }
27
28 @Bean(name = "learningDataSource")
29 public DataSource getDruidDataSource() {
30 DruidDataSource druidDataSource = new DruidDataSource();
31 druidDataSource.setDriverClassName(druidDataSourceProperties.getDriverClassName());
32 druidDataSource.setUrl(druidDataSourceProperties.getUrl());
33 druidDataSource.setUsername(druidDataSourceProperties.getUsername());
34 druidDataSource.setPassword(druidDataSourceProperties.getPassword());
35 druidDataSource.setInitialSize(druidDataSourceProperties.getInitialSize());
36 druidDataSource.setMinIdle(druidDataSourceProperties.getMinIdle());
37 druidDataSource.setMaxActive(druidDataSourceProperties.getMaxActive());
38 druidDataSource.setMaxWait(druidDataSourceProperties.getMaxWait());
39 druidDataSource.setTimeBetweenEvictionRunsMillis(
40 druidDataSourceProperties.getTimeBetweenEvictionRunsMillis());
41 druidDataSource.setMinEvictableIdleTimeMillis(
42 druidDataSourceProperties.getMinEvictableIdleTimeMillis());
43 druidDataSource.setTestOnBorrow(druidDataSourceProperties.isTestOnBorrow());
44 druidDataSource.setTestOnReturn(druidDataSourceProperties.isTestOnReturn());
45 druidDataSource.setTestWhileIdle(druidDataSourceProperties.isTestWhileIdle());
46 druidDataSource.setKeepAlive(druidDataSourceProperties.isKeepAlive());
47 druidDataSource.setRemoveAbandoned(druidDataSourceProperties.isRemoveAbandoned());
48 druidDataSource.setRemoveAbandonedTimeout(
49 druidDataSourceProperties.getRemoveAbandonedTimeout());
50 druidDataSource.setLogAbandoned(druidDataSourceProperties.isLogAbandoned());
51
52 druidDataSource.setPoolPreparedStatements(
53 druidDataSourceProperties.isPoolPreparedStatements());
54 druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(
55 druidDataSourceProperties.getMaxPoolPreparedStatementPerConnectionSize());
56 try {
57 druidDataSource.setFilters(druidDataSourceProperties.getFilters());
58 druidDataSource.init();
59 } catch (SQLException e) {
60 logger.error("数据源初始化失败", e);
61 }
62 return druidDataSource;
63 }
64}
65
ОК! Перезапустите, чтобы протестировать интерфейс прямо сейчас.
Пожалуйста, укажите источник
Ссылка на эту статью:Этот курс.com/20180703.Контракт…