SpringBoot系列—MyBatis(十一)
个人博客:haichenyi.com。感谢关注
上一篇,Druid是用于处理数据库连接池与后台监控。
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。——百度百科
添加依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
MyBatis添加依赖跟SpringBoot的其他启动器不一样,MyBatis需要写版本号,因为,SpringBoot并没有MyBatis的启动器。
用法
注解的方式
先看一下项目结构:
项目结构图.png首先,我们先在连接的数据库里面创建表,添加几条数据。
然后,创建pojo类User,对应我的表
package com.haichenyi.springbootjdbc.pojo;
import lombok.Data;
@Data
public class User {
public Long UserId;
public String Username;
public String password;
public String nickName;
public String headImg;
public Integer age;
public Integer sex;
public String address;
public String desc;
}
接着,创建mapper接口
package com.haichenyi.springbootjdbc.mapper;
import com.haichenyi.springbootjdbc.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface UserMapper {
@Select("select * from userinfo")
List<User> getUserInfo();
}
就是一个普通的接口,用 @Mapper 标识了。然后写了一个获取用户信息的方法。 @Select 里面是sql语句。
用 @Mapper 标识的接口,在运行的过程中,会帮我们生成实现类,到时候,我们直接通过这个接口的引用调用这个方法即可。我们也可以在入口的位置用 @MapperScan 标识包名,应用启动的时候,会给这个包下面的所有接口都生成实现类。如下
package com.haichenyi.springbootjdbc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.haichenyi.springbootjdbc.mapper")
@SpringBootApplication
public class SpringBootJdbcApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootJdbcApplication.class, args);
}
}
最后,就是我们的controller层了。
package com.haichenyi.springbootjdbc.controller;
import com.haichenyi.springbootjdbc.mapper.UserMapper;
import com.haichenyi.springbootjdbc.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class UserController {
@Autowired
UserMapper userMapper;
@RequestMapping("/getUserInfo")
public List<User> getUserInfo() {
return userMapper.getUserInfo();
}
}
这样,我们就可以通过 http://localhost:8080/getUserInfo 读到数据库中的数据了
只这样,我们读到的数据,如果表字段与pojo类的字段不一一对应,我们可能读到的数据为空,所以,我们要开启驼峰命名,开启之后MyBatis会帮我们一一对应好。怎么开启呢?就在我们前面的JdbcConfig中添加如下方法即可。就跟我们前面一篇Druid添加配置类似。
/**
* MyBatis自定义配置
*
* @return ConfigurationCustomizer
*/
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> {
//开启驼峰命名
configuration.setMapUnderscoreToCamelCase(true);
//开启二级缓存
configuration.setCacheEnabled(true);
};
}
这样就可以了。
xml的方式
前面和后面都是一样的,就是中间那不创建mapper接口不一样。xml中怎么创建mapper呢?
首先,还是创建一个正常的接口,定义方法。如下:注释写的很清楚了。
package com.haichenyi.springbootjdbc.mapper;
import com.haichenyi.springbootjdbc.pojo.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;
//这里如果没有@Mapper注解,那就在启动类添加@MapperScan注解,上面已经说过怎么添加了。两种方式都可以,标记mapper的接口还是需要的
public interface UserMapper {
//这里的sql语句就不需要了,sql语句在xml里面配置。
// @Select("select * from userinfo")
List<User> getUserInfo();
}
然后,添加两个xml,一个是config,一个是写sql语句的。路径需要注意,先在resources目录下创建一个mybatis目录,在mybatis目录下创建mybatis-config.xml,在mybatis目录下创建mapper目录,然后在mapper目录下创建你的mapper.xml文件,如下:
这个是写mybatis配置文件的,名字我写的是: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="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
然后就是创建mapper.xml,这里,我们以UserMapper.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">
<!--namespace要是你前面创建mapper接口的全路径,这样才能对应-->
<mapper namespace="com.haichenyi.springbootjdbc.mapper.UserMapper">
<!--id:是你前面接口里面创建的方法名-->
<!--
resultType:这里的返回类型就是你接口读取数据对应的bean类,不管你需要的是集合,还是单个对象,这里都是你bean类,
如果你读取的是多条数据,它会自动帮你封装成list,拿到这个list,你再去做你其他的处理
-->
<select id="getUserInfo" resultType="com.haichenyi.springbootjdbc.pojo.User">
select * from userinfo
</select>
</mapper>
注释写的很清楚了。
再就是配置这个两个xml路径了,你需要在你的全局配置文件中配置好,指定对应的路径:
mybatis:
#核心配置文件路径
config-location: classpath:mybatis/mybatis-config.xml
#映射配置文件路径
mapper-locations: classpath:mybatis/mapper/*.xml
为啥非要创建一个mapper目录,再创建mapper文件呢?就是这里好指定。mapper文件肯定不止一个,难道你要一个一个的配置吗?这样写只用指定一个就可以了。