一. 获取数据库连接
1. 之前新建项目时,在Dependencies窗口下,我们只选择了web中的spring-web-starter,现在我们新建一个项目,点击SQL,并勾选以下内容
2. 数据库的连接池这次我们不再使用用阿里家的Druid,而是使用SpringBoot为我们提供的com.zaxxer:HikariCP:3.2.0
ps. 如果想使用Druid,我们还需要在主配置文件中为其配置type:
spring: datasource: type: com.alibaba.druid.pool.DruidDataSource
3. 在SSM框架中,数据源的相关配置都是在applicationContext.xml中导入jdbc.properties进行配置:
<context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <!-- OGNL--> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean>
而SpringBoot一大特点便是主动为我们提供了很多配置并能简化配置文件,我们点击项目中的External Libraries,找到Maven:org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.0,并依次按照下图的中的目录点击找到jdbc中的DataSourceAutoConfiguration
打开DataSourceAutoConfiguration,按住ctrl键,单击DataSourceProperties.class
进入DataSourceProperties.class后,可以看到前缀和相关配置项
接下来我们就可以在application.yml文件中,根据上面的前缀和配置属性对数据库信息进行配置:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/gagamall?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: root password: zhangjia # type: com.alibaba.druid.pool.DruidDataSource 这里不再采用Druid连接池,而是采用SpringBoot自带的HikariCP
4. 最后编写测试类Springboot06ApplicationTests.java将DataSource注入,即可获取到数据库链接
package io.zhangjia.springboot06; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; @RunWith(SpringRunner.class) @SpringBootTest public class Springboot06ApplicationTests { @Autowired private DataSource dataSource; @ Test //@和Test中间并无空格,为避免编辑器bug,所以添加了空格显示 public void contextLoads() throws SQLException { Connection connection = dataSource.getConnection(); System.out.println(connection); System.out.println(connection.getClass()); connection.close(); } } 输出: HikariProxyConnection@1834755909 wrapping com.mysql.jdbc.JDBC4Connection@44b29496 class com.zaxxer.hikari.pool.HikariProxyConnection
二. SpringBoot整合Mybatis
1. 首先在springboot3中新建mapper包,并编写BookMapper
package io.zhangjia.springboot06.mapper; import io.zhangjia.springboot06.entity.Book; import org.springframework.stereotype.Component; import java.util.List; @Component public interface BookMapper { int doInsert(Book book); int doDelete(Integer bookId); int doUpdate(Book book); List<Book> queryAll(); Book queryById(Integer bookId); }
2. 接下来在resources中新建mapper包,并添加BookMapper.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="io.zhangjia.springboot06.mapper.BookMapper"> <select id="queryAll" resultType="book"> select * from book; </select> <insert id="doInsert" useGeneratedKeys="true" keyProperty="bookId"> INSERT INTO book (name, author, price) VALUE (#{name}, #{author}, #{price}) </insert> <delete id="doDelete"> DELETE FROM book WHERE BOOK_ID = #{bookId} </delete> <update id="doUpdate"> UPDATE book SET price = #{price}, author =#{author}, name = #{name} WHERE book_id = #{bookId} </update> <select id="queryById" resultType="book"> select * from book WHERE book_id = #{bookId}; </select> </mapper>
3. 编写BookService
package io.zhangjia.springboot06.service; import io.zhangjia.springboot06.entity.Book; import java.util.List; public interface BookService { List<Book> books(); Book getBook(Integer bookId); Book saveOrUpdate(Book book); Book delete(Integer id); }
4. 实现BookServiceImpl,并添加@Service注解
package io.zhangjia.springboot06.service.impl; import io.zhangjia.springboot06.entity.Book; import io.zhangjia.springboot06.mapper.BookMapper; import io.zhangjia.springboot06.service.BookService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("bookService") public class BookServiceImpl implements BookService { @Autowired private BookMapper bookMapper; @Override public List<Book> books() { return bookMapper.queryAll(); } @Override public Book getBook(Integer bookId) { return bookMapper.queryById(bookId); } @Override public Book saveOrUpdate(Book book) { if (book.getBookId() == null) { //添加 bookMapper.doInsert(book); } else { //修改 bookMapper.doUpdate(book); } return book; } @Override public Book delete(Integer id) { Book book = getBook(id); bookMapper.doDelete(id); return book; } }
5. 在SSM框架中,关于Mybatis的相关配置是在applicationContext.xml文件中完成的:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> <property name="typeAliasesPackage" value="io.zhangjia.ssm.entity" /> <!--起别名--> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" > <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> <property name="basePackage" value="io.zhangjia.ssm.mapper"/> </bean>
SpringBoot也为我们提供了Mybatis的相关配置,点击项目中的External Libraries,找到Maven:org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.1.0,并依次找到jdbc中的autoconfigure中的MybatisAutoConfiguration,点击其中的{MybatisProperties.class}
@EnableConfigurationProperties({MybatisProperties.class})
即可看到Mybatis的配置前缀和相关配置信息:
@ConfigurationProperties( prefix = "mybatis" ) public class MybatisProperties { public static final String MYBATIS_PREFIX = "mybatis"; private static final ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); private String configLocation; private String[] mapperLocations; private String typeAliasesPackage; .... }
接下来在application.yml文件中,添加指定配置即可:
#添加 mybatis: mapper-locations: classpath:mapper/*.xml
注意,关于basePackage的配置,不能在主配置中完成,需要在Springboot启动类Springboot3Application中,添加@MapperScan(“io.zhangjia.springboot3.mapper”)注解。
package io.zhangjia.springboot06; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan(basePackages = "io.zhangjia.springboot06.mapper") public class SpringBoot06Application { public static void main(String[] args) { SpringApplication.run(SpringBoot06Application.class, args); } }
6. 编写BookController
package io.zhangjia.springboot06.controller; import io.zhangjia.springboot06.aspect.LoggingAspect; import io.zhangjia.springboot06.entity.Book; import io.zhangjia.springboot06.service.BookService; import io.zhangjia.springboot06.util.R; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController public class BookController { @Autowired private BookService bookService; private Logger logger = LoggerFactory.getLogger(BookController.class); @GetMapping(value = "/books", produces = "application/json;charset=utf-8") public R books() { List<Book> books = bookService.books(); return R.success(books); } @GetMapping(value = "/book/{bookId}", produces = "application/json;charset=utf-8") public R book(@PathVariable Integer bookId) { Book book = bookService.getBook(bookId); logger.info(book.toString()); return R.success(book); } @PostMapping(value = "/book", produces = "application/json;charset=utf-8") public R save(Book book) { Book book2 = bookService.saveOrUpdate(book); return R.success(book2); } @PutMapping(value = "/book", produces = "application/json;charset=utf-8") public R update(Book book) { Book book2 = bookService.saveOrUpdate(book); return R.success(book2); } @DeleteMapping(value = "/book/{bookId}", produces = "application/json;charset=utf-8") public R delete(@PathVariable Integer bookId) { Book book = bookService.delete(bookId); return R.success(book); } }
在之前的controller中,我们的方法的返回值都是String类型,如果想把从数据库查到的数据显示在页面中,需要先将查询到的数据转换成JSON字符串,然后再将其返回,但是给Controller添加@RestController注解后,SpringBoot可以直接将查询到的数据直接作为JSON字符串返回,此时访问http://localhost:8888/book,即可查看到查询的数据。关于R类,请查看本站《SpringBoot:使用JSON的工具类进行JSR303数据校验》一文。
请登录之后再进行评论