Spring Boot整合MyBatis
导入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
application.properties
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/studentdb?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
spring.datasource.username=root
spring.datasource.password=root
#整合mybatis
#实体类起别名
mybatis.type-aliases-package=com.yuan.pojo
#resources包下的mybatis/mapper/*.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
或者application.yaml
mybatis:
# 指定 mapper.xml 的位置
mapper-locations: classpath:mybatis/mapper/*.xml
#扫描实体类的位置,在此处指明扫描实体类的包,在 mapper.xml 中就可以不写实体类的全路径名
type-aliases-package: net.biancheng.www.bean
configuration:
#默认开启驼峰命名法,可以不用设置该属性
map-underscore-to-camel-case: true
StudentMapper
package com.yuan.mapper;
import com.yuan.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
@Mapper//这个注解表示了这是一个mybatis 的mapper类,
public interface StudentMapper {
/**
* 查询所以学生
* @return
*/
List<Student> student();
/**
* 根据编号查询学生
* @param id
* @return
*/
Student selectById(int id);
/**
* 新增学生
* @param student
* @return
*/
int insert(Student student);
/**
* 修改学生
* @param student
* @return
*/
int update(Student student);
/**
* 删除学生
* @param id
* @return
*/
int delete(int id);
}
StudentMapper.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="com.yuan.mapper.StudentMapper">
<!--查询所有学生-->
<select id="student" resultType="Student">
select * from student;
</select>
<!--根据编号查询学生-->
<select id="selectById" resultType="com.yuan.pojo.Student">
select * from student where stuId=#{stuId};
</select>
<!--新增学生信息-->
<insert id="insert" parameterType="Student">
INSERT INTO studentdb.student (stuName, stuemail, stuPhone)
VALUES(#{stuName},#{stuemail}, #{stuPhone});
</insert>
<!--修改学生信息-->
<update id="update" parameterType="Student">
update studentdb.student set
stuName=#{stuName}, stuemail=#{stuemail},
stuPhone=#{stuPhone} WHERE stuId=#{stuId};
</update>
<!--删除学生信息-->
<delete id="delete" parameterType="int">
delete from student where stuId=#{stuId};
</delete>
</mapper>
Student
package com.yuan.pojo;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@NoArgsConstructor
public class Student implements Serializable {
private long stuId;
private String stuName;
private String stuemail;
private String stuPhone;
public Student(String stuName, String stuemail, String stuPhone) {
this.stuName = stuName;
this.stuemail = stuemail;
this.stuPhone = stuPhone;
}
public Student(long stuId, String stuName, String stuemail, String stuPhone) {
this.stuId = stuId;
this.stuName = stuName;
this.stuemail = stuemail;
this.stuPhone = stuPhone;
}
}
StudentController
package com.yuan.controller;
import com.yuan.mapper.StudentMapper;
import com.yuan.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class StudentController {
@Autowired
private StudentMapper mapper;
/**
* 查询所有
* @return
*/
@GetMapping("/list")
public List<Student> List(){
List<Student> student = mapper.student();
System.out.println("学生姓名\t邮箱");
student.forEach(stu->{
System.out.println(stu.getStuName()+"\t"+stu.getStuemail());
});
return student;
}
/**
* 查根据编号查询
* @return
*/
@GetMapping("/StudentBuId")
public Student StudentBuId() {
return mapper.selectById(6);
}
/**
* 新增学生
* @return
*/
@GetMapping("/Insert")
public int Insert(){
Student sudent=new Student("hhhh","11111@qq.com","12123421432");
return mapper.insert(sudent);
}
/**
* 修改学生
* @return
*/
@GetMapping("/Update")
public int update(){
Student student = new Student(6,"HHH","20202@QQ.COM","12123123");
return mapper.update(student);
}
/**
* 删除学生
* @return
*/
@GetMapping("/delete")
public int delete(){
return mapper.delete(22);
}
}
DemoApplication
package com.yuan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
//@ManagedBean("com.yuan.mapper")//扫描mapper下所以的接口,就不要加@mapper
//@ComponentScan("xxxxx")如果包不在可以是用该注解
//@MapperScan("com.yuan.mapper") 扫描mapper下的所有文件,代替@Mapper注解
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
pom
<!--整合mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--JDBC访问数据库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--thymeleaf模板-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--web启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<导入小辣椒>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--测试-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
Spring Boot使用分页插件
导入依赖
<!-- Pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.4</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
PageConfig
package com.yuan.config;
import com.github.pagehelper.PageInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class PageConfig {
@Bean
public PageInterceptor pageHelper() {
PageInterceptor pageHelper = new PageInterceptor();
Properties p = new Properties();
p.setProperty("offsetAsPageNum", "true");
p.setProperty("rowBoundsWithCount", "true");
p.setProperty("reasonable", "true");
pageHelper.setProperties(p);
return pageHelper;
}
}
测试
@GetMapping("/select")
public PageInfo<News> selectNews(){
// pageNum:当前页,pageSize:每页的显示的数据数目
PageHelper.startPage(1,4);
List<News> list = newsService.page();
// 上面两行代码必须在一起,设置.startPage()立即查询数据
PageInfo<News> pageInfo = new PageInfo<>(list);
// 获得分页后的数据信息
return pageInfo;
}