乐趣区

关于java:springbootroute八整合mybatis操作数据库

MyBatis 是一款优良的长久层框架,它反对定制化 SQL、存储过程以及高级映射。MyBatis 防止了简直所有的 JDBC 代码和手动设置参数以及获取后果集。MyBatis 能够应用简略的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object, 一般的 Java 对象)映射成数据库中的记录。

通过注解实现数据操作

第一步:引入 mysql 依赖和 mybatis 依赖

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>LATEST</version>
</dependency>

第二步:新建学生表及对应的实体类

CREATE TABLE `student` (`student_id` int(30) NOT NULL AUTO_INCREMENT,
   `age` int(1) DEFAULT NULL COMMENT '年龄',
   `name` varchar(45) DEFAULT NULL COMMENT '姓名',
   `sex` int(1) DEFAULT NULL COMMENT '性别:1:男,2:女,0:未知',
   `create_time` datetime DEFAULT NULL COMMENT '创立工夫',
   `status` int(1) DEFAULT NULL COMMENT '状态:1:失常,-1:删除',
   PRIMARY KEY (`student_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=617354 DEFAULT CHARSET=utf8mb4 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC COMMENT='学生表'
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student implements Serializable {

    private static final long serialVersionUID = 6712540741269055064L;

    private Integer studentId;
    private Integer age;
    private String name;
    private Integer sex;
    private Date createTime;
    private Integer status;
}

第三步:配置数据库连贯信息

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/simple_fast
    username: root
    password: root

增删改查

@Mapper
public interface StudentMapper {@Select("select * from student where student_id = #{studentId}")
    Student findById(@Param("studentId") Integer studentId);

    @Insert("insert into student(age,name) values(#{age},#{name})")
    int addStudent(@Param("name") String name,@Param("age") Integer age);

    @Update("update student set name = #{name} where student_id = #{studentId}")
    int updateStudent(@Param("studentId") Integer studentId,@Param("name") String name);

    @Delete("delete from student where student_id = #{studentId}")
    int deleteStudent(@Param("studentId") Integer studentId);
}

下面演示的传参形式是通过单个参数传递的,如果想通过 Map 或实体类传参数,就不须要应用 @Param 来绑定参数了,将 map 中的 key 或者实体类中的属性与 sql 中的参数值对应上就能够了

通过 XML 配置实现数据操作

@Mapper 和 @MapperScan

@Mapper 加在数据层接口上,将其注册到 ioc 容器上,@MapperScan 加在启动类上,须要指定扫描的数据层接口包。如下:

@Mapper
public interface StudentMapper {}
@SpringBootApplication
@MapperScan("com.javatrip.mybatis.mapper")
public class MybatisApplication {public static void main(String[] args) {SpringApplication.run(MybatisApplication.class, args);
    }
}

两个注解的作用一样,在开发中为了不便,通常咱们会应用 @MapperScan。

指定 mapper.xml 的地位

mybatis:
  mapper-locations: classpath:mybatis/*.xml

开启数据实体映射驼峰命名

mybatis:
  configuration:
    map-underscore-to-camel-case: true

编写 xml 和与之对应的 mapper 接口

<?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.javatrip.mybatis.mapper.StudentXMapper">
    <select id="findById" resultType="com.javatrip.mybatis.entity.Student">
        select * from student where student_id = #{studentId}
    </select>
    <insert id="addStudent" parameterType="com.javatrip.mybatis.entity.Student">
        insert into student(name,age) values(#{name},#{age})
    </insert>
    
    <update id="updateStudent" parameterType="com.javatrip.mybatis.entity.Student">
        update student set name = #{name} where  student_id = #{studentId}
    </update>

    <delete id="deleteStudent" parameterType="Integer">
        delete from student where student_id = #{studentId}
    </delete>
</mapper>
@Mapper
public interface StudentXMapper {Student findById(@Param("studentId") Integer studentId);

    int addStudent(Student student);

    int updateStudent(@Param("studentId") Integer studentId,@Param("name") String name);

    int deleteStudent(@Param("studentId") Integer studentId);
}

编写测试类

@SpringBootTest
class MybatisApplicationTests {

    @Autowired
    StudentMapper mapper;

    @Autowired
    StudentXMapper xMapper;

    @Test
    void testMapper() {Student student = mapper.findById(10);
        mapper.addStudent("Java 旅途",19);
        mapper.deleteStudent(31);
        mapper.updateStudent(10,"Java 旅途");
    }

    @Test
    void contextLoads() {Student student = xMapper.findById(10);
        Student studentDo = new Student();
        studentDo.setAge(18);
        studentDo.setName("Java 旅途呀");
        xMapper.addStudent(studentDo);
        xMapper.deleteStudent(32);
        xMapper.updateStudent(31,"Java 旅途");
    }
}

这里有几个须要留神的点:mapper 标签中 namespace 属性对应的是 mapper 接口;select 标签的 id 对应 mapper 接口中的办法名字;select 标签的 resultType 对应查问的实体类,应用全门路。

此是 spring-boot-route 系列的第八篇文章,这个系列的文章都比较简单,次要目标就是为了帮忙首次接触 Spring Boot 的同学有一个零碎的意识。本文已收录至我的 github,欢送各位小伙伴star

github:https://github.com/binzh303/s…

点关注、不迷路

如果感觉文章不错,欢送 关注 点赞 珍藏,你们的反对是我创作的能源,感激大家。

如果文章写的有问题,请不要悭吝,欢送留言指出,我会及时核查批改。

如果你还想更加深刻的理解我,能够微信搜寻「Java 旅途」进行关注。回复「1024」即可取得学习视频及精美电子书。每天 7:30 准时推送技术文章,让你的下班路不在孤单,而且每月还有送书流动,助你晋升硬实力!

退出移动版