• SpringBoot整合mybatis


    这两天学习了一下SpringBoot的相关内容,记录一下

    1.创建一个SpringBoot项目后,引入依赖(其中lombok插件需要自己安装)

    <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>
       <groupId>com.jt.1902</groupId>
       <artifactId>springboot-mybatis</artifactId>
       <version>0.0.1-SNAPSHOT</version>
    
       <properties>
          <java.version>1.8</java.version>
       </properties>
    
       <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-parent</artifactId>
          <version>2.1.3.RELEASE</version>
          <relativePath />
       </parent>
    
       <dependencies>
    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
          </dependency>
    
          <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
          </dependency>
    
    <!--添加属性注入依赖 -->
    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
             <optional>true</optional>
          </dependency>
    
    <!--引入插件lombok 自动的set/get/构造方法插件 -->
    <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
          </dependency>
    
    <!--支持热部署 -->
    <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>springloaded</artifactId>
             <version>1.2.8.RELEASE</version>
          </dependency>
    
    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-devtools</artifactId>
          </dependency>
    
    <!--引入数据库驱动 -->
    <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <scope>runtime</scope>
          </dependency>
    
    <!--引入druid数据源 -->
    <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>druid</artifactId>
             <version>1.1.12</version>
          </dependency>
    
    
          <!--spring整合mybatis-plus -->
    <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.0.6</version>
          </dependency>
       </dependencies>
    
       <build>
          <plugins>
             <plugin>
                <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
          </plugins>
       </build>
    </project>

    2.创建如下结构文件

    (1)表的结构:

    DROP TABLE IF EXISTS `user`;
    CREATE TABLE `user`  (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      `age` int(11) NULL DEFAULT NULL,
      `sex` char(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE,
      INDEX `cc`(`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
    
    SET FOREIGN_KEY_CHECKS = 1;
    View Code

     (2)编写实体类com.jt.pojo.User

    @Accessors 注解用来配置lombok如何产生和显示getters和setters的方法。

    chain表示生成的方法名是setxx() getxx()的样子

    @Data //set/get/toString
    @Accessors(chain = true) //链式加载
    @NoArgsConstructor //无参构造
    @AllArgsConstructor //有参构造
    @TableName("user") //对象与数据表完成映射
    public class User implements Serializable{
    @TableId(type=IdType.AUTO) //主键自动
    private Integer id;
    //@TableField("name")
    private String name;
    //@TableId("age")
    private Integer age;
    private String sex;
    }

    (3)编写接口com.jt.mapper.UserMapper

    该接口继承自mybatisplus的BaseMapper接口

    public interface UserMapper 
    extends BaseMapper<User>{
       
    //查询全部的user表中的数据
    List<User> findAll();
    
    /**
        * 规定: Mybatis中要求数据传参必须是单值
    * 方案:
        *     0.本身就是单值               id
        *     1.利用对象将数据封装    id age name
        *     2.将数据封装为map集合.  @Param("key")int id
        *     3.将数据封装为array/list
        * @param user
    * @return
    */
    @Insert("insert into user values(null,#{name},#{age},#{sex})")
    int insertUser(User user);
       
    //实现用户修改 age=18的 名称改为xxx
    @Update("update user set name=#{name} where age=#{age}")
    int updateUser(User user);
    
    }
     

    (4)编写在resources文件中创建mybatis/mapper/UserMapper.xml文件

    namespace与接口对应,id与方法名对应

    
    
    <?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.jt.mapper.UserMapper">
    
    <select id="findAll" resultType="com.jt.pojo.User">
    select * from user
    </select>
       
    <!-- <insert id="insertUser">
          insert into user values(null,#{name},#{age},#{sex})
       </insert> -->
       
       <!-- <update id="updateUser">
          update user set name=#{name} where age=#{age}
       </update> --> 
    </mapper>

    (5)编写接口com,jt.service.UserService

    public interface UserService {
    
    List<User> findAll();
    
    int insertUser(User user);
       
    int updateUser(User user);
    }

    (6)编写实现类com.jt.service.UserServiceImpl

    在实现类里利用@AutoWired注解进行自动装配,而不是在接口上

    @Service
    public class UserServiceImpl implements UserService{
    
    @Autowired
    private UserMapper userMapper;
    
    @Override
    public List<User> findAll() {
          
    return userMapper.findAll();
       }
    
    @Override
    public int insertUser(User user) {
          
    return userMapper.insertUser(user);
       }
    
    @Override
    public int updateUser(User user) {
          
    return userMapper.updateUser(user);
       }
    }
     

    (7)编写API接口com.jt.Controller.UserController

    @RestController注解相当于@ResponseBody + @Controller合在一起的作用

    @RestController
    public class UserController {
       
    @Autowired
    private UserService userService;
    //用户通过localhost:8090/findAll获取用户数据
    @RequestMapping("/findAll")
    public List<User> findAll(){
          
    return userService.findAll();
       }
    //用户新增
    public int insertUser(User user) {
          
    return userService.insertUser(user);
       }
       
       
    public int updateUser(User user) {
          
    return userService.updateUser(user);
       }
     

    (8)在启动类中加入对接口的扫描

    @SpringBootApplication
    //为mapper接口创建代理对象
    @MapperScan("com.jt.mapper")
    public class SpringBootRun {
       
    public static void main(String[] args) {
          
    SpringApplication.run(SpringBootRun.class, args);
       }
    }

    3.配置文件

    在resources中创建application.yml文件,并编写配置

    
    
    server:
    port: 8090
    servlet:
    context-path: /
    
    #引入数据源配置
    spring:
    datasource:
    #引入druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
        username: root
        password: root
    
    #mybatis-plush配置
    mybatis-plus:
    #配置别名包
    type-aliases-package: com.jt.pojo
      #配置mapper映射
    mapper-locations: classpath:/mybatis/mappers/*.xml
      #开启驼峰映射
    configuration:
    map-underscore-to-camel-case: true
        
    #添加日志输出
    logging:
    level:
    com.jt.mapper: debug 
    
    
    
     

    4.启动并测试

    (1)测试UserMapper接口

    
    
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class TestCRUD {
       
    @Autowired    //从容器中取值
    private UserController userController;
       
    @Test
    public void insertUser() {
    User user = new User();
    user.setName("小橘子").setSex("女").setAge(18);
    userController.insertUser(user);
    System.out.println("入库成功!!!!!");
       }
       
    //测试修改
    @Test
    public void testUpdate() {
    User user = new User();
    user.setAge(18).setName("哈利波特!!!");
    userController.updateUser(user);
       }
    }
    
    
    
     

     (2测试MybatisPlus

    
    
    @SpringBootTest
    @RunWith(SpringRunner.class)
    public class TestMybatisPlus {
    @Resource
    private UserMapper userMapper;
       
    @Test
    public void insert() {
    User user = new User();
    user.setName("mybatisplus");
    user.setAge(19);
    user.setSex("男");
    int rows = userMapper.insert(user);
    System.out.println("影响行数:"+rows);
       }
       
    /**查询用户列表信息
          将对象中不为null的属性当做where条件
          条件:age=18 
    关键字说明:
          = eq,> gt,< lt,ge >=,le <=  
       */
    @Test
    public void testFind() {
    //1.方式1.使用对象封装
    //User user = new User();
          //user.setAge(18);
          
          //2.直接使用字段赋值
    QueryWrapper<User> queryWrapper 
    = new QueryWrapper<User>();
    //测试等于
    //queryWrapper.eq("age",18);
          //测试大于
    queryWrapper.ge("age",18);
    List<User> userList = 
    userMapper.selectList(queryWrapper);
    System.out.println(userList);
       }
       
    /**
        * 3.数据更新 将年龄为18岁的用户改19岁
    * entity:需要修改数据的值
    * updateWrapper 条件构造器 充当where条件
    */
    @Test
    public void testUpdate() {
    User user = new User();
    user.setAge(19);
    UpdateWrapper<User> updateWrapper = 
    new UpdateWrapper<>();
    updateWrapper.eq("age", 18);
    userMapper.update(user, updateWrapper);
       }
       
    //删除name字段为null的数据
    @Test
    public void deleteUser() {
    QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
    queryWrapper.isNull("name");
    userMapper.delete(queryWrapper);
       }
    }
    
    
    
     

    @Data //set/get/toString
    @Accessors(chain = true) //链式加载
    @NoArgsConstructor    //无参构造
    @AllArgsConstructor //有参构造
    @TableName("user")    //对象与数据表完成映射
    public class User implements Serializable{
        @TableId(type=IdType.AUTO)    //主键自动
        private Integer id;
        //@TableField("name")
        private String name;
        //@TableId("age")
        private Integer age;
        private String sex;
    }
  • 相关阅读:
    POJ 3713 Transferring Sylla【Tarjan求割点】
    Tarjan算法【强连通分量】
    POJ 1273 Drainage Ditches【最大流模版】
    CDOJ 1960 构造哈密顿路径
    HDU 1384 Intervals【差分约束-SPFA】
    POJ 1364 / HDU 3666 【差分约束-SPFA】
    【SPFA与Dijkstra的对比】CDOJ 1961 咸鱼睡觉觉【差分约束-负权最短路径SPFA】
    CDOJ 1965 连通域统计【DFS】
    CDOJ 1964 命运石之门【最短路径Dijkstra/BFS】
    最小生成树模板【kruskal & prim】
  • 原文地址:https://www.cnblogs.com/ywqtro/p/12508968.html
Copyright © 2020-2023  润新知