整合JDBC
修改pom文件配置信息
<!--JDBC启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--添加数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
注:如何查询需要的maven坐标
访问https://mvnrepository.com/
选择需要的语言类型,使用java
根据数据库版本选择合适的坐标文件
配置数据源
通过自定义配置文件方式配置数据源信息
通过@PropertySource注解读取配置文件
添加Druid数据源依赖
!--Druid数据源依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
创建Properties文件
创建配置类
package com.example.springbootjdbc.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.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
/**
* 数据源Jdbc的配置类
*/
//注解作用:项目启动时凡是标记为此注解的类都会被初始化出来
@Configuration
//注解作用 :加载指定的properties配置文件
@PropertySource("classpath:/jdbc.properties")
public class JdbcConfiguration {
@Value("${jdbc.driverClassName}")
private String dirverClassName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
/**
* 实例化Druid
*/
@Bean
public DataSource getDataSource(){
DruidDataSource source = new DruidDataSource();
source.setPassword(this.password);
source.setUsername(this.username);
source.setUrl(this.url);
source.setDriverClassName(this.dirverClassName);
return source;
}
}
注:添加对Druid知识的补充Druid使用
通过@ConfigurationProperties注解读取配置信息
创建配置信息实体类
package com.example.springbootjdbc.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* JDBC配置信息属性类
*/
//此注解是Spring Boot不能读取其他的配置文件,只能读取Spring Boot的Application的配置文件
//增加 prefix 指定读取配置文件中配置信息的前缀,指定只读取配置文件中的jdbc开头的配置信息
@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {
//属性的名字不能乱写,要求和配置文件中jdbc.后面的字段名称保持一致
private String driverClassName;
private String url;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
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;
}
}
修改配置类
package com.example.springbootjdbc.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* 数据源Jdbc的配置类
*/
//注解作用:项目启动时凡是标记为此注解的类都会被初始化出来
@Configuration
//此注解会指定加载需要的配置属性类
@EnableConfigurationProperties(JdbcProperties.class)
public class JdbcConfiguration {
@Autowired
private JdbcProperties jdbcProperties;
/**
* 实例化Druid
*/
@Bean
public DataSource getDataSource(){
DruidDataSource source = new DruidDataSource();
source.setPassword(this.jdbcProperties.getPassword());
source.setUsername(this.jdbcProperties.getUsername());
source.setUrl(this.jdbcProperties.getUrl());
source.setDriverClassName(this.jdbcProperties.getDriverClassName());
return source;
}
}
通过Spring Boot 配置文件配置数据源
在Spring Boot1.x版本中的spring-boot-starter-jdbc启动器中默认使用的事org.apache.tomcat.jdbc.pool.DataSource作为数据源
在Spring Boot2.x版本中的Spring-boot-starter-jdbc启动器中的默认使用的是com.zaxxer.hikariDataSource作为数据源
使用Spring Boot默认的HikariDataSource数据源
使用第三方的Druid的数据源
实现添加用户功能
创建pojo
package com.example.springbootjdbc.pojo;
public class Users {
private Integer userid;
private String username;
private String usersex;
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getUsersex() {
return usersex;
}
public void setUsersex(String usersex) {
this.usersex = usersex;
}
}
创建页面
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:th="http://www.thymeleaf.org">
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
<head>
<title>Title</title>
</head>
<body>
<form th:action="@{/user/addUser}" method="post">
<input type="text" name="username"><br/>
<input type="text" name="usersex"><br/>
<input type="submit" value="ok"><br/>
</form>
</body>
</html>
创建Controller
PageController
package com.example.springbootjdbc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 页面跳转
*/
@Controller
public class PageController {
/**
* 页面跳转方法
*/
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
}
UsersController
package com.example.springbootjdbc.controller;
import com.example.springbootjdbc.pojo.Users;
import com.example.springbootjdbc.service.UsersService;
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.Mapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.sql.DataSource;
@Controller
@RequestMapping("/user")
public class UsersController {
@Autowired
private UsersService usersService;
@PostMapping("/addUser")
public String showInfo(Users users ){
try {
this.usersService.addUser(users);
}catch (Exception e){
e.printStackTrace();
return "error";
}
//重定向页面
return "redirect:/ok";
}
}
创建Service
package com.example.springbootjdbc.service.impl;
import com.example.springbootjdbc.dao.UsersDao;
import com.example.springbootjdbc.pojo.Users;
import com.example.springbootjdbc.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* 用户管理业务层
*/
@Service
public class UsersServiceImpl implements UsersService {
@Autowired
private UsersDao usersDao;
/**
* 添加用户
* @param users
*/
@Override
@Transactional
public void addUser(Users users) {
this.usersDao.insertUsers(users);
}
}
创建Dao
package com.example.springbootjdbc.dao.impl;
import com.example.springbootjdbc.config.JdbcProperties;
import com.example.springbootjdbc.dao.UsersDao;
import com.example.springbootjdbc.pojo.Users;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
* 持久层
*/
@Repository
public class UsersDaoImpl implements UsersDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 添加用户
* @param users
*/
@Override
public void insertUsers(Users users) {
String sql = "insert into users(username,usersex) value (?,?)";
this.jdbcTemplate.update(sql,users.getUsername(),users.getUsersex());
}
}
解决favicon.ico解析问题
<link rel="shortcut icon" href="../resources/favicon.ico" th:href="@{/static/favicon.ico}"/>
项目整体结构
spring Boot整合mybatis
搭建项目
引入mybatis启动器
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mingming</groupId>
<artifactId>spirngbootmybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spirngbootmybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--添加数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--Druid数据源依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置数据源
配置Maven的generator插件
添加generator插件坐标
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--配置Generator插件-->
<plugin>
<groupId>org.mytatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
</dependencies>
<!--指定配置文件的路径-->
<configuration>
<configurationFile>${project.basedir}/src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
</plugin>
</plugins>
</build>
添加generator配置文件
添加generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/test" userId="root"
password="root">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
userId="yycg"
password="yycg">
</jdbcConnection> -->
<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和
NUMERIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.mingming.springbootmybatis.pojo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.mingming.springbootmybatis.mapper"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.mingming.springbootmybatis.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="users"></table>
<!-- 有些表的字段需要指定java类型
<table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration>