一、SpringBoot介绍
SpringBoot是由Pivotal团队提供的框架,设计目的是简化新Spring应用的初始搭建以及开发过程,
该框架使用了特定的方式(继承starter,预定大于配置)来进行配置,其实,从根本上他就是一些库的集合,
maven或者gradle项目导入相应依赖即可使用springboot。
二、Springboot作用特性:
内置tomcat :构建的fat jar包通过java –jar就可以直接在cmd中运行 或者点击启动类main方法
全注解(MyBatis注解)
热部署 :只有导包的时候需要重新启动,其他不需要重新启动 使用可以使用spring-boot-devtools来实现!
yml替代xml配置
简化applicationContext.xml等配置 : 配置简单、部署简单、监控简单
可以集成各大框架: MyBatis 、JPA、JDBC 、Hibernate
三、如何使用SpringBoot集成Mybatis框架
3.1 创建Maven项目
3.2 在pom.xml中引入相关依赖
基本依赖、jdk版本号
Mysql驱动 、MyBatis依赖包、mysql分页PageHelper
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- Spring Boot 父文件 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<!-- 修改tomcat版本 -->
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--Spring Boot web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 热部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!--必须有才能编译jsp -->
<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>
<!-- Junilt4测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- spring-boot mybatis依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<!-- spring boot mybatis 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 打印sql语句 在这里是自己写的插件-->
<dependency>
<groupId>org.kd</groupId>
<artifactId>mybatis-tool-box</artifactId>
<version>1.0-M9</version>
</dependency>
</dependencies>
</project>
3.3 创建启动类App.java
@SpringBootApplication
@MapperScan("cn.itsource.springboot.mybatis.mapper")
public class App {
public static void main( String[] args ) {
SpringApplication.run(App.class, args);
}
}
//这里和以往不一样的地方就是MapperScan的注解,这个是会扫描该包下的接口
3.4 在application.properties或者application.yml中配置文件
两者取并集 如果都有的话以properties为基准
application.yml配置:
连接数据库信息
Mybatis信息
Spring配置
日志信息
代码如下:
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
# 上面是对jsp支持配置
# 数据库连接配置
datasource:
driverClassName: com.mysql.jdbc.Driver
url : jdbc:mysql://localhost:3306/spring-boot-demo?useUnicode=true&characterEncoding=utf-8
username : root
password : admin
# Mybatis配置
mybatis:
typeAliasesPackage: cn.itsource.model
mapperLocations: classpath:cn/itsource/dao/mapper/*.xml
configLocation: classpath:mybatisConfig.xml #引入自定义的插件
#日志
logging:
level:
cn:
itsource: DEBUG
3.5 基本的crud操作:
写一个domian : User.java
写一个dao : IuserDao接口
crud方法:
注解sql方式:
映射xml sql方式:
写一个Dao.mapper : 映射文件
Service省略………. 需要开启事务以及@service实现类
写一个test:测试是否成功
写一个controller和前台页面交互
具体代码如下:
===============================================================
user.java省略 :定义两个字段测试 :username password
IuserDao接口 :
注意:类上面的注解以及采用注解方式sql 和映射xml sql方式
注解sql方式:
@Mapper
public interface IUserDao {
@Select("select * from t_user")
List<User> getAll();
@Delete("delete from t_user where id = #{id}")
void delete(Long id);
void save(User user);
void update(User user);
@Select("select * from t_user where id = #{id}")
User getOne(Long id);
============================================================
映射xml sql方式:
<?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="cn.itsource.dao.IUserDao">
//保存
<insert id="save">
insert into t_user (username ,password) values (#{username} , #{password})
</insert>
//修改
<update id="update" parameterType="user">
update t_user set username = #{username} , password=#{password} where id =#{id}
</update>
//查询一条
<select id="getOne" parameterType="Long" resultType="user"> //因为在yml中设置了别名
select * from t_user where id = #{id}
</select>
</mapper>
============================================================
service层:
IUserService接口:定义crud方法 以及分页插件的方法
//分页查询
PageInfo<User> queryPage(Integer pageNum , Integer pageSize);
UserService实现类:
@Service
@Transactional(readOnly=true) //开启事务
public class UserServiceImpl implements IUserService{
@Autowired
IUserDao userdao;
@Override
@Transactional
public void save(User user) {
userdao.save(user);
}
@Override
@Transactional
public void delete(Long id) {
userdao.delete(id);
}
@Override
@Transactional
public void update(User user) {
userdao.update(user);
}
@Override
public User getOne(Long id) {
// TODO Auto-generated method stub
return userdao.getOne(id);
}
@Override
public List<User> getAll() {
// TODO Auto-generated method stub
return userdao.getAll();
}
//分页查询
@Override
public PageInfo<User> queryPage(Integer pageNum, Integer pageSize) {
Page<Object> startPage = PageHelper.startPage(pageNum, pageSize);
List<User> all = userdao.getAll();
//在这里,怎么把分页的数据包裹进去呢?直接New PageInfo就行了
return new PageInfo<>(all);
}
========================================================================
test层:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=StartApp.class)
public class MyBatisTest {
@Autowired
IUserService userService;
//删除
@Test
public void testDelete() throws Exception {
userService.delete(1L);
}
//保存
@Test
public void testSave() throws Exception {
User user = new User();
user.setUsername("xxx");
user.setPassword("xxx");
userService.save(user);
}
//查询单个
@Test
public void testGetOne() throws Exception {
User one = userService.getOne(4L);
System.out.println(one);
}
//修改
@Test
public void testUpdate() throws Exception {
User user2 = new User();
user2.setId(4L);
user2.setUsername("2222");
userService.update(user2);
}
//查询所有
@Test
public void testGetAll() throws Exception {
List<User> all = userService.getAll();
for (User user : all) {
System.out.println(user);
}
}
//分页查询
@Test
public void testQueryPage() throws Exception {
PageInfo<User> queryPage = userService.queryPage(0, 2);
//查询总条数
long total = queryPage.getTotal();
System.out.println(total);
//分页查询的数据
List<User> list = queryPage.getList();
for (User user : list) {
System.out.println(user);
}
}
//面试题:
@Test
public void testPage() throws Exception {
PageHelper.startPage(0,2);//因为它只能分下面的一条 使用AOP切入 使用算法 limit
List<User> all = userService.getAll();
List<User> all2 = userService.getAll(); //它其实就是查询所有的
System.out.println(all.size()); //分页条
System.out.println(all2.size()); //数据库总条数
}
}
以上测试crud基本操作成功,在实际开发项目中使用MyBatis较多,因此小编给大家使用了这种方式,其实集成其他
的框架也是如此,比如:JPA 、JDBC 、Hibernate 都是使用同样的方式,只是他们本身的操作crud方式不一样而已
}