前端时间整合SSM ,发现了一个现象,在整合的时候 配置文件过于复杂.

1.建工程,建目录,导入jar包。

2.配置 数据源 映射信息 等等 。。。

3. 还有 各种 拦截器,控制器 ,头都大了。。。。。。。。。

4.于是 今天我们就来解决 SSM 的配置问题,所以我们今天就来讲讲 SpringBoot 整合MyBatis

框架的优点和缺点

mybatis的优缺点:

优点 :

  • sql写在xml文件中,便于统一管理和优化,解除sql和程序代码的耦合。
  • 提供映射标签,支持对象和和数据库orm字段关系的映射,支持对象关系映射标签,支持对象关系的组建
  • 提供xml标签,支持编写动态sql。

缺点

  • 工作量较大,特别是在表的字段多,关联表多的情况下

  • sql语句的编写依赖于数据库,移植性差。

  • 不支持级联删除,级联更新,需要自己对表进行删除。

spring的优点:

优点 :

  • 通过Spring的IOC特性,将对象之间的依赖关系交给了Spring控制,方便解耦,简化了 开发。

  • 通过Spring的AOP特性,很容易实现事务,日志,权限的控制。

  • 提供了对其他优秀开源框架的集成支持。

  • 低侵入式。

缺点

  • jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器

  • Spring不支持分布式,这也是EJB仍然在用的原因之一。

今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简

单好多。其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以 把Mybatis整合进去,不得不说,现在的框架搭建真的是方便。话不多说,进入正题。

Spring boot搭建

1、Intellij idea菜单栏File->new->project。

2、选择左侧栏中spring initializr,右侧选择jdk版本,以及默认的Service URL,点击next,大家也可以选择Custom (自定义)。



3、然后填写项目的Group(包名)、Artifact(组织名称)等信息,helloworld()阶段选默认就可以了,点击next。



4、左侧点击Web,中间一侧选择Web,然后左侧选择SQL,中间一侧选择 Mybatis、MYSQL(LZ数据库用的是mysql,大家可以选择其他DB),点击next

5、填写Project name 等信息,然后点击Finish。

至此,一个maven web项目就创建好了,目录结构如下:

这样,Spring boot就搭建好了,pom.xml里已经有了Spring boot的jar包,包括我们的

mysql数据连接的jar包。Spring boot内置了类似tomcat这样的中间件,所以,只要运行

DemoApplication中的main方法就可以启动项目了。我们测试一下。

     <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  1. 在src/main/java下新建目录com/spiritmark/boot/entity/User。 (实体类)
package com.spiritmark.boot.entity;

  public class User {

	private int id;
private String name;
private String password;
private String number;
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
} @Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", number=" + number + "]";
}
  1. 相同目录下新建com/spiritmark/boot/controller/TestBootController
package com.spiritmark.boot.controller;

import com.spiritmark.boot.entity.User;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@EnableAutoConfiguration
@RequestMapping("/testboot")
public class TestBootController {
@RequestMapping("getuser")
public User getUser() {
User user = new User();
user.setName("test");
return user;
}
}

最终的目录结构如下,

启动DemoApplication的main方法,访问http://localhost:8080/testboot/getuser即可。

mapper层的UserMapper类:

package com.spiritmark.boot.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

import com.spiritmark.boot.entity.User;
@Mapper
public interface UserMapper { List<User> findUserByName(String name); public List<User> ListUser(); public int insertUser(User user); public int delete(int id); public int Update(User user); }

service层的实现类Userservice:

package com.spiritmark.boot.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.spiritmark.boot.entity.User;
import com.example.demo.mapper.UserMapper; @Service
public class UserService {
@Autowired
private UserMapper userMapper; public List<User> findByName(String name) {
return userMapper.findUserByName(name);
} public User insertUser(User user) {
userMapper.insertUser(user);
return user;
}
public List<User> ListUser(){
return userMapper.ListUser();
} public int Update(User user){
return userMapper.Update(user);
} public int delete(int id){
return userMapper.delete(id);
}
}

controller层 的访问类CRUD:

package com.spiritmark.boot.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import com.spiritmark.boot.entity.User;
import com.example.demo.service.UserService; @RestController
@RequestMapping(value = "/CRUD", method = { RequestMethod.GET, RequestMethod.POST })
public class CRUD {
@Autowired
private UserService userservice; @RequestMapping(value = "/delete", method = RequestMethod.GET)
public String delete(int id) {
int result = userservice.delete(id);
if (result >= 1) {
return "删除成功";
} else {
return "删除失败";
}
} @RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(User user) {
int result = userservice.Update(user);
if (result >= 1) {
return "修改成功";
} else {
return "修改失败";
} } @RequestMapping(value = "/insert", method = RequestMethod.POST)
public User insert(User user) {
return userservice.insertUser(user);
} @RequestMapping("/ListUser")
@ResponseBody
public List<User> ListUser(){
return userservice.ListUser();
} @RequestMapping("/ListUserByname")
@ResponseBody
public List<User> ListUserByname(String name){
return userservice.findByName(name);
}
}

接着:

src/main/resources/mapper 下写UserMapper的映射文件xml.

UserMapper.xml

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD com.example.Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spiritmark.boot.mapper.UserMapper">
<resultMap id="result" type="User">
<result property="name" column="name" />
<result property="password" column="password" />
<result property="number" column="number"/> </resultMap> <select id="ListUser" resultMap="result">
SELECT * FROM user
</select> <select id="findUserByName" resultMap="result">
SELECT * FROM user where name=#{name}
</select> <insert id="insertUser" parameterType="User"
keyProperty="id" useGeneratedKeys="true">
INSERT INTO user
(
id,name,password,number
)
VALUES (
#{id},
#{name, jdbcType=VARCHAR},
#{password, jdbcType=VARCHAR},
#{number}
)
</insert> <delete id="delete" parameterType="int">
delete from user where id=#{id}
</delete> <update id="Update" parameterType="User">
update user set user.name=#{name},user.password=#{password},user.number=#{number} where user.id=#{id}
</update>
</mapper>

在配置文件中配置了 别名扫描的包,会自动拼接实体类

application.yml:

#默认使用配置
#公共配置与profiles选择无关
mybatis:
typeAliasesPackage: com.spiritmark.boot.entity # 实体的包名
mapperLocations: classpath:mapper/*.xml # mapper.xml 的地址
--- #开发配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver

启动程序的入口类:SpringbootApplication.java

我们在postmain这个工具中测试:

注解版

有人说SpringBoot XML 太麻烦了,这个时候,可以使用 注解版

我们把 XML 删除 src/main/resources/mapper/*xml 修改成下面这样

package com.spiritmark.boot.mapper;

import com.spiritmark.boot.entity.User;
import org.apache.ibatis.annotations.*; import java.util.List; @Mapper
public interface UserMapper { @Insert("insert into user(name,age) values(#{name},#{age})")
int addUser(@Param("name") String name, @Param("age") String age); @Select("select * from user where id =#{id}")
User findById(@Param("id") String id); @Update("update user set name=#{name} where id=#{id}")
void updataById(@Param("id") String id, @Param("name") String name); @Delete("delete from user where id=#{id}")
void deleteById(@Param("id") String id); @Select("select * from user")
List<User> findAllUser(); }

SpringBoot从入门到精通教程(四)的更多相关文章

  1. SpringBoot从入门到精通教程(二)

    SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...

  2. SpringBoot从入门到精通教程(八)

    本主要介绍ElasticSearch 和 SpringBoot 的整合 ,对您有帮助的话,点个关注哦 ElastSearch 介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供 ...

  3. SpringBoot从入门到精通教程(七)

    今天,我们继续讲SpringBoot整合Redis ,也就缓存,它将与我们的Springboot整合 Redis 简介 Redis 是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语 ...

  4. SpringBoot从入门到精通教程(六)

    之前学了,这么多东西 thyemeaf .MyBatis 还有 配置文件等等,今天我们就来做一个小案例 CRUD,程序员的必备 项目结构 pom.xml <!-- mybatis 相关依赖 -- ...

  5. SpringBoot从入门到精通教程(三)

    在上一篇中,我们已经讲了,SpringBoot 如何构建项目,和SpringBoot的HelloWorld, 那这一节我们继续讲 Thymeleaf Thymeleaf 官网: Thymeleaf T ...

  6. SpringBoot从入门到精通教程(一)

    写在前面的话: 在很早之前,记笔记时候,我就一直在思考一个问题,我记笔记是为了什么,我一直想不明白 ,后面发现技术跟新迭代的速度实在太快了,笔记刚纪完,技术又跟新了,于是我想了想干脆边写博客,边记笔记 ...

  7. SpringBoot从入门到精通教程(五)

    上节,我们讲了 SpringBoot 如何使用MyBatis 今天我们讲讲 Springboot Logo自定义的问题, 我们在启动 SpringBoot 时,控制台会打印 SpringBoot Lo ...

  8. 深入浅出!springboot从入门到精通,实战开发全套教程!

    前言 之前一直有粉丝想让我出一套springboot实战开发的教程,我这边总结了很久资料和经验,在最近总算把这套教程的大纲和内容初步总结完毕了,这份教程从springboot的入门到精通全部涵盖在内, ...

  9. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

随机推荐

  1. 巧妙使用MathType快速编写数学函数公式

    在我们日常的工作与学习中,你是否也会遇到过无法在电脑中编写数学函数公式的情况呢? 简单的数学函数公式或许经过我们不懈的努力也可以成功的编写,不过这会耽误我们大把的时间. 想象一下,假如你的老板急着催你 ...

  2. yii2.0 访问控制器下的方法时出现 Object Not Found! 解决办法

    yii2.0  访问控制器下的方法时出现 Object Not Found! 时 可以查看(apache)  入口文件index.php 的同级有没有 .htaccess 文件 没有.htaccess ...

  3. python连接mysql循环插入千万条数据脚本

    之前都是在mysql的存储过程中插入数据,毕竟mysql语法函数有限,很多都有限制.突然想到学了python正好可以练练手.首先需要安装pymysql模块包(模块包安装请自行百度) pip insta ...

  4. uniapp自定义picker城市多级联动组件

    uniapp自定义picker城市多级联动组件 支持多端--h5.app.微信小程序.支付宝小程序... 支持自定义配置picker插件级数 支持无限级 注意事项:插件传入数据格式为children树 ...

  5. java base64加解密

    接上篇java Base64算法. 根据之前过程使用base64加解密,所以写成了工具类. 代码示例; public class Base64Util { private static Logger ...

  6. SpringBoot打包成Docker镜像

    1. 本文环境 Maven:3.6.3(Maven配置参考) SpringBoot version:2.3.4.RELEASE Docker version: 19.03.11(Docker搭建参考) ...

  7. 基础篇:JAVA.Stream函数,优雅的数据流操作

    前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stream的概念,它可以让我们把集合数据当做一个个元素在处理,并且提供多线程模式 流的创建 流的各种数 ...

  8. 手写koa-static源码,深入理解静态服务器原理

    这篇文章继续前面的Koa源码系列,这个系列已经有两篇文章了: 第一篇讲解了Koa的核心架构和源码:手写Koa.js源码 第二篇讲解了@koa/router的架构和源码:手写@koa/router源码 ...

  9. 第八章 Python类中常用的特殊变量和方法

    上章花了近三十章节介绍类的知识,本章估计内容也比较多,讲完这些,其实还有更多.为什么这么多类有关的知识呢,这是因为在Python里面一切皆对象,就连整型.浮点数.字符串这些比较常规的类型都是作为类来实 ...

  10. 第十九章、Model/View开发:QTableView的功能及属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Designer的部件栏Item Views中提供了PyQt和Qt已经实现好的table ...