springBoot(四)整合之MyBatis整合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/CoffeeAndIce/article/details/77595578

单独的一个springBoot好像有那么一点单调,那么现在开始玩整合,在这之前呢,先分享一个当初遇到的小问题,就是当你的启动器的与mapper使用的包路径并不为父子关系时,读取配置mapper可能会失败,我就遇到了。郁闷了老久,然后经过测试发现。

如果不同包,可以用@MapperScan("com.linge.springboot.mapper"),这个扫描器来定位mapper的包路径,就可以成功获取映射

 

 

MyBatis整合走起


第一步、加入MyBatis的启动器

 

博主不喜欢看到那个图标,所以关闭了面板,如果个人喜欢,可以直接启动的说。

@SpringBootApplication // 代表为SpringBoot应用的运行主类
public class Application {
  
   public static void main(String[] args) {
      /** 创建SpringApplication应用对象 */
      SpringApplication springApplication =
new SpringApplication(Application.class);
      /** 设置横幅模式(设置关闭) */
      springApplication.setBannerMode(Banner.Mode.OFF);
      /** 运行 */
      springApplication.run(args);
   }
}

 

第二步:添加所需依赖

<!-- 配置MyBatis启动器 -->
<dependency>
       <groupId>org.mybatis.spring.boot</groupId>
       <artifactId>mybatis-spring-boot-starter</artifactId>
       <version>1.3.0</version>
</dependency>
<!-- 配置mysql驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 配置c3p0连接池 -->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.2</version>
</dependency>

 

第三步:添加配置

我们可以参考依赖中的类来配置基本属性

参考spring-boot-autoconfigure-1.5.6.RELEASE.jar中jdbc包中属性文件类

DataSourceProperties

参考mybatis-spring-boot-autoconfigure-1.3.0.jar中属性文件类

MybatisPropertis

 

在src/main/resources 下添加application.properties 配置文件,内容如下:

application.properties

# 配置数据源
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_db
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.mchange.v2.c3p0.ComboPooledDataSource
 
# 配置MyBatis3
# 配置类型别名扫描基础包
mybatis.typeAliasesPackage=com.linge.springboot.pojo
# 配置SQL语句映射文件
mybatis.mapperLocations=classpath:mappers/**/*Mapper.xml
# 配置核心配置文件
mybatis.configLocation=classpath:mybatis-config.xml
logging.level.com.linge=debug
//注意:其中logging.level.com.你的Mapper包=日志等级

 

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 全局的设置-->
	<settings>
		<!-- 开启缓存 -->
		<setting name="cacheEnabled" value="true"/>
		<!-- 启用延迟加载功能 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 按需要延迟加载-->
		<setting name="aggressiveLazyLoading" value="false"/>
		<!-- 开启驼峰映射 (方便自动映射) -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
</configuration>

 

 

第四步:整合开发

需求理解:

l 使用Spring Boot + Spring MVC + MyBatis实现查询所有公告

l  使用Spring Boot + Spring MVC + MyBatis + EasyUI 实现公告分页查询

 

 

1、编写pojo类

public class Notice implements Serializable {
private static final long serialVersionUID = 5679176319867604937L;
private Long id;
private String title;
private String content;
/** setter and getter method */
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}

 

2、编写mapper接口

和之前的方式一样,只是多了@Mapper个注解
@Mapper:声明Mapper接口
@Mapper
public interface NoticeMapper {
    /** 查询所有公告 */
    @Select("select * from notice")
    public List<Notice> findAll();
   
    /** 统计查询 */
    public Long count();
    /** 分页查询公告 */
    public List<Notice> findByPage(@Param("page")Integer page, @Param("rows")Integer rows);
}

 

3、编写mappe.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.linge.springboot.mapper.NoticeMapper">
 
    <!-- 统计查询 -->
    <select id="count" resultType="long">
       select count(*) from notice
    </select>
 
    <!-- 分页查询公告 -->
    <select id="findByPage" resultType="notice">
       select * from notice limit #{page},#{rows}
    </select>
</mapper>

 

4、编写Service与实现类

@Service
@Transactional
public class NoticeServiceImpl implements NoticeService {
    @Autowired
    private NoticeMapper noticeMapper;
    /** 查询所有的公告 */
    public List<Notice> findAll(){
       return noticeMapper.findAll();
    }
    /** 分页查询公告 */
    public Map<String,Object> findByPage(Integer page, Integer rows){
       /** 创建Map集合封装响应数据 */
       Map<String,Object> data = new HashMap<>();
       /** 统计查询 */
       long count = noticeMapper.count();
       data.put("total", count);
       /** 分页查询 */
       List<Notice> notices = noticeMapper.findByPage(page, rows);
       data.put("rows", notices);
       return data;
    }
}

 

5、编写controller

@Controller
public class NoticeController {
    @Autowired
    private NoticeService noticeService;
    /** 查询全部公告 */
    @GetMapping("/findAll")
    @ResponseBody
    public List<Notice> findAll(){
       return noticeService.findAll();
    }
    /** 跳转分页查询公告页面 */
    @GetMapping("/show")
    public String show(){
       return "/html/notice.html";
    }
    /** 分页查询公告 */
    @PostMapping("/findByPage")
    @ResponseBody
    public Map<String,Object> findByPage(@RequestParam(value="page",
                         defaultValue="1",required=false)Integer page,
                         @RequestParam(value="rows",
                         defaultValue="15",required=false)Integer rows){
       return noticeService.findByPage((page - 1) * rows, rows);
    }
}

 

6、加入静态资源

src/main/resources/public/html/notice.html

src/main/resources/static/js

src/main/resources/static/css

src/main/resources/static/images

 

 

 

启动测试

浏览器地址栏输入:http://localhost:8080/findAll |show

 

完成,如果有什么问题,可以一起讨论一下

 

展开阅读全文

没有更多推荐了,返回首页