18.springboot整合mybatis
Posted 结构化思维wz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18.springboot整合mybatis相关的知识,希望对你有一定的参考价值。
springboot整合mybatis
往日推荐:
1.springboot手撸一个mybatis代码生成器
2.springboot中的跨域问题
3.spring注解开发总结
4.小学生都能看懂的springmvc教程
1.创建工程
2.在properties中配置数据库信息
spring.datasource.url=jdbc:mysql://localhost:3306/wangze
spring.datasource.username=root
spring.datasource.password=123456
注意注意:这个username,很容易被idea自动不全误导成name.....踩坑了
3.创建实体类
package com.example.mybatis.model;
/**
* @author: 王泽
*/
public class User {
private String name;
private Integer id;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4.编写dao层
有两种方式编写dao层,一种是注解的方式,一种是以前ssm中xml文件的方式
注册mapper组件也有两种:一种在mapper上加@Mapper;一种在配置类上加@MapperScan()
-
注解方式
@Mapper public interface UserMapper { @Select("select * from user where id =#{id}") User getUserById(Integer id); //根据id操作数据库 }
测试:
@SpringBootTest class MybatisApplicationTests { @Autowired UserMapper userMapper; @Test void contextLoads() { User user = userMapper.getUserById(1); System.out.println(user); } }
分析:属性名必须一致。如果不一一对应,解决方式有两种:xml文件中可以使用resultMap,java代码中也可以用注解@Results
我们先把数据库中的字段名由原来的name改成username;在mapper中做如下改变就可以查到了!
@Mapper
public interface UserMapper {
@Results({
@Result(property = "name",column ="username" ) //property对应javabean中的属性名。column对应数据库中的字段名
})
@Select("select * from user where id =#{id}")
User getUserById(Integer id); //根据id操作数据库
}
@Select、@Insert、@Update以及@Delete四个注解分别对应XML中的select、insert、update以及delete标签,@Results注解类似于XML中的ResultMap映射文件(getUserById方法给查询结果的字段取别名主要是向小伙伴们演示下@Results
注解的用法),另外使用@SelectKey注解可以实现主键回填的功能,即当数据插入成功后,插入成功的数据id会赋值到user对象的id属性上。
UserMapper2创建好之后,还要配置mapper扫描,有两种方式,一种是直接在UserMapper2上面添加@Mapper
注解,这种方式有一个弊端就是所有的Mapper都要手动添加,要是落下一个就会报错,还有一个一劳永逸的办法就是直接在启动类上添加Mapper扫描,如下:
@SpringBootApplication
@MapperScan(basePackages = "org.sang.mybatis.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}
xml文件方式:
-
创建usermapper类
public interface UserMapper { User getUserById(Integer id); //根据id操作数据库 }
-
创建mapper.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.example.mybatis.mapper.UserMapper"> <resultMap id="UserMap" type="com.example.mybatis.model.User"> <result property="name" column="username"/> </resultMap> <select id="getUserById" resultType="com.example.mybatis.model.User"> select * from user where id = #{id}; </select> </mapper>
-
指定mapper.xml路径
在resource中的时候
mybatis.mapper-laocations=classpath:mapper/*.xml
与java代码在一个包下
<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
注意在resource中创建的时候应该用“/”作为分隔符,不能用“.” 例如com/wangze/mybatis mapper名字必须对应
注意在resource中创建的时候应该用“/”作为分隔符,不能用“.” 例如com/wangze/mybatis mapper名字必须对应
以上是关于18.springboot整合mybatis的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot整合Mybatis之Annotation