SpringBoot无废话入门04:MyBatis整合
1.parent引入及pom配置
首先,如果要支持mybatis,那么我们就应该引入mybatis的starter。同时,由于连接本身还需要用jdbc的connetor和连接池,所以一并需要引入这些依赖。如下是一个完整的的最简pom,
<?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 http://maven.apache.org/maven-v4_0_0.xsd">
<modelversion>4.0.0</modelversion>
<packaging>war</packaging>
<parent>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-parent</artifactid>
<version>2.1.3.release</version>
</parent>
<name>testboot01</name>
<groupid>com.zuikc</groupid>
<artifactid>testboot01</artifactid>
<version>1.0-snapshot</version>
<dependencies>
<!--jsp支持, servlet 依赖. -->
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>javax.servlet-api</artifactid>
<scope>provided</scope>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>jstl</artifactid>
</dependency>
<!-- tomcat 的支持.-->
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-tomcat</artifactid>
</dependency>
<dependency>
<groupid>org.apache.tomcat.embed</groupid>
<artifactid>tomcat-embed-jasper</artifactid>
<scope>provided</scope>
</dependency>
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
</dependency>
<dependency>
<groupid>org.apache.tomcat</groupid>
<artifactid>tomcat-dbcp</artifactid>
<version>7.0.47</version>
</dependency>
<dependency>
<groupid>org.apache.tomcat</groupid>
<artifactid>tomcat-dbcp</artifactid>
<version>7.0.47</version>
</dependency>
<dependency>
<groupid>org.mybatis.spring.boot</groupid>
<artifactid>mybatis-spring-boot-starter</artifactid>
<version>1.3.2</version>
</dependency>
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-web</artifactid>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-maven-plugin</artifactid>
</plugin>
</plugins>
</build>
</project>
2.配置初始化
首先我们需要将数据库连接配置到文件中,比如prop.properties,
jdbc.driver=com.mysql.jdbc.driver
jdbc.url=jdbc:mysql://localhost:3306/test01?useunicode=true&characterencoding=utf8
jdbc.username=root
jdbc.password=root
jdbc.maxactive=2335
jdbc.maxidel=120
jdbc.maxwait=100
然后,用java配置的方式将其引入到代码中,创建datasourceconfiguration,
package com.zuikc.config;
import org.apache.tomcat.dbcp.dbcp.basicdatasource;
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;
@configuration
//这个注解导入刚才增加的jdbc配置文件
@propertysource("classpath:prop.properties")
public class datasourceconfiguration {
@value("${jdbc.driver}")
private string driver;
@value("${jdbc.url}")
private string url;
@value("${jdbc.username}")
private string username;
@value("${jdbc.password}")
private string password;
@value("${jdbc.maxactive}")
private int maxactive;
@value("${jdbc.maxidel}")
private int maxidel;
@value("${jdbc.maxwait}")
private long maxwait;
@bean
public basicdatasource datasource(){
basicdatasource datasource = new basicdatasource();
datasource.setdriverclassname(driver);
datasource.seturl(url);
datasource.setusername(username);
datasource.setpassword(password);
datasource.setmaxactive(maxactive);
datasource.setmaxidle(maxidel);
datasource.setmaxwait(maxwait);
datasource.setvalidationquery("select 1");
datasource.settestonborrow(true);
return datasource;
}
}
接着,增加mybatis配置,
package com.zuikc.config;
import javax.sql.datasource;
import org.apache.ibatis.session.sqlsessionfactory;
import org.mybatis.spring.sqlsessionfactorybean;
import org.mybatis.spring.sqlsessiontemplate;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.jdbc.datasource.datasourcetransactionmanager;
import org.springframework.transaction.platformtransactionmanager;
import org.springframework.transaction.annotation.enabletransactionmanagement;
import org.springframework.transaction.annotation.transactionmanagementconfigurer;
@configuration
//加上这个注解,使得支持事务
@enabletransactionmanagement
public class mybatisconfig implements transactionmanagementconfigurer {
@autowired
private datasource datasource;
@override
public platformtransactionmanager annotationdriventransactionmanager() {
return new datasourcetransactionmanager(datasource);
}
@bean(name = "sqlsessionfactory")
public sqlsessionfactory sqlsessionfactorybean() {
sqlsessionfactorybean bean = new sqlsessionfactorybean();
bean.setdatasource(datasource);
try {
return bean.getobject();
} catch (exception e) {
e.printstacktrace();
throw new runtimeexception(e);
}
}
@bean
public sqlsessiontemplate sqlsessiontemplate(sqlsessionfactory sqlsessionfactory) {
return new sqlsessiontemplate(sqlsessionfactory);
}
}
注意上面的sqlsessionfactory这个bean。
然后需要配置mybatis配置文件的路径,这个配置需要与上面的配置分开来写,因为它们有着一个先后顺序,
package com.zuikc.config;
import org.mybatis.spring.mapper.mapperscannerconfigurer;
import org.springframework.boot.autoconfigure.autoconfigureafter;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
@configuration
// 因为这个对象的扫描,需要在mybatisconfig的后面注入,所以加上下面的注解
@autoconfigureafter(mybatisconfig.class)
public class mybatismapperscannerconfig {
@bean
public mapperscannerconfigurer mapperscannerconfigurer() {
mapperscannerconfigurer mapperscannerconfigurer = new mapperscannerconfigurer();
//获取之前注入的beanname为sqlsessionfactory的对象
mapperscannerconfigurer.setsqlsessionfactorybeanname("sqlsessionfactory");
//指定xml配置文件的路径
mapperscannerconfigurer.setbasepackage("com.zuikc.dao");
return mapperscannerconfigurer;
}
}
3.三层架构
先创建最底层的dao接口,如下:
package com.zuikc.dao;
import java.util.list;
import java.util.map;
import org.apache.ibatis.annotations.mapper;
import org.apache.ibatis.annotations.select;
@mapper
public interface testdao {
@select("select * from tbl_user;")
public list<map<string,object>> find();
}
接着创建service,
package com.zuikc.service;
import com.zuikc.dao.testdao;
import org.springframework.stereotype.service;
import javax.annotation.resource;
import java.util.list;
import java.util.map;
@service
public class testservice {
@resource
testdao dao;
public list<map<string,object>> find(){
list<map<string,object>> users = dao.find();
return users;
}
}
然后是controller,
package com.zuikc.controller;
import com.zuikc.dao.testdao;
import com.zuikc.service.testservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.controller;
import org.springframework.web.bind.annotation.requestmapping;
import javax.annotation.resource;
import java.text.simpledateformat;
import java.util.date;
import java.util.list;
import java.util.map;
@controller
public class studentcontroller {
@autowired
testservice service;
@requestmapping(value = {"test01"})
public string view(map<string, object> map) {
list<map<string,object>> users = service.find();
for (map<string, object> user : users) {
for (map.entry<string, object> entry : user.entryset()) {
system.out.println("key = " + entry.getkey() + ", value = " + entry.getvalue());
}
}
system.out.println(users.size());
map.put("name", "zuikc.com");
map.put("date", new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date()));
return "views/test01";
}
}
经过上面的创建之后,我们的代码结构是这样的,
执行之,
注意了,如果你已经忘记了如何启动mysql,那么,下面就是命令哦:
sudo bin/mysqld_safe --user=mysql &
4.事务支持
第一步,导入jdbc依赖,
<dependency>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-starter-jdbc</artifactid>
</dependency>
注意,有了这个依赖,springboot会自动注入datasourcetransactionmanager。
接着,直接在service中添加@transactional注解就能支持事务啦。本文不再赘述,大家自己尝试一下吧。
感谢关注“码农星球”。本文版权属于“码农星球”。我们提供咨询和培训服务,关于本文有任何困惑,请关注并联系我们。
推荐阅读
-
Spring Boot入门系列八(SpringBoot 整合Mybatis)
-
SpringBoot无废话入门04:MyBatis整合
-
SpringBoot无废话入门01:最简SpringBoot应用
-
springboot整合tk.mybatis入门2 通用service
-
SpringBoot无废话入门03:SpringMVC支持
-
SpringBoot无废话入门2:SpringBoot启动分析
-
Spring Boot入门系列八(SpringBoot 整合Mybatis)
-
SpringBoot入门教程07——整合mybatis-plus(三)
-
SpringBoot整合Mybatis入门一看就懂
-
自学SpringBoot--04整合持久层技术--整合SpringMVC+Mybatis