<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.1.4version>
dependency>
引入 mybatis-spring-boot-starter 导入了如下:
配置模式在 —— MybatisAutoConfiguration.class 中规定
MybatisAutoConfiguration.class 为我们配置好了SqlSessionFactory、SqlSession 及 Mapper。
MybatisAutoConfiguration.class 自动配置好 SqlSessionFactory
为我们写的操作 MyBatis 的接口标注 @Mapper 注解,就会被自动扫描进来
MyBatis 配置项绑定 mybatis 前缀,修改对 MyBatis 的配置,只需要配置文件中 mybatis 下的项即可
@ConfigurationProperties(
prefix = "mybatis"
)
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
configuration>
我们需要配置的地方,在 configuration 中通过
配置
我想操作 Account 数据库表,于是创建 Account 类
package com.wanqing.admin.bean;
import lombok.Data;
/**
* @description: 账号信息类
* @author: Liuwanqing
* @date: 2022-10-23 16:11
*/
@Data
public class Account {
private long id;
private int money;
private String userId;
}
比如我想操作 Account 数据库表,需要创建 AccountMapper 接口放在 mapper 文件下用于操作此 Account 表,在 AccountMapper 接口写自己需要实现的方法
注意:一定要添加 @Mapper 注释,MyBatis 才能自动扫描到
package com.wanqing.admin.mapper;
import com.wanqing.admin.bean.Account;
@Mapper
public interface AccountMapper {
// 找到并返回当前查询的 id 的 Account
public Account getAccount(long id);
}
补充: 可通过在 SpringBoot 启动类中,使用 @MapperScan 注释添加 Mapper 查询接口所在位置的方式让 MyBatis 自动扫描,通过这种方式,可不在 Mapper 接口前加入 @Mapper 注释,但是建议还是加上 @Mapper 注释
@SpringBootApplication
@MapperScan("com.wanqing.admin.mapper") // 接口上上不需要标注 Mapper
public class DemoAdminApplication {
public static void main(String[] args) {
SpringApplication.run(DemoAdminApplication.class, args);
}
}
DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wanqing.admin.mapper.AccountMapper">
<select id="getAccount" resultType="com.wanqing.admin.bean.Account">
select * from Account where id = #{id}
select>
mapper>
mybatis:
config-location: classpath:mybatis/mybatis-config.xml # 全局配置文件位置
mapper-locations: classpath:mybatis/mapper/*.xml # SQL 映射文件位置
MyBatis 全部配置可在如下连接中查到MyBatis全部配置查询
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>
mybatis:
configuration: # 修改 MyBatis 配置项
map-underscore-to-camel-case: true # 开启驼峰命名转换
因此,我们可以直接在 configuration 下进行 MyBatis 配置,因此全局配置文件不是必要的,建议不写全局配置文件。
注意: 不能上述两个方法同时使用,只能使用一个,不相信的可以自己去试试
我们也可以在 Mapper 接口中以注释的方式写入 SQL 语句,这种方式适合于查询比较简单的情况。通过这种方式可以不用编写 SQL 映射的 xml 文件
使用方法:
示例:
@Mapper
public interface CityMapper {
@Select("select * from city where id = #{id}")
public City getCityById(Long id);
@Insert("insert into city('name', 'state', 'country') vaules(#{name}, #{state}, #{country})")
@Options(useGeneratedKeys= true, keyProperty="id")
public void insert(City city);
}
插入语句映射文件如下:
<?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.wanqing.admin.mapper.CityMapper">
<!-- public Account getAccount(long id); -->
<insert id="insert" useGeneratedKeys="true" keyProperty="id">
insert into city('name', 'state', 'country') vaules(#{name}, #{state}, #{country})
</insert>
</mapper>
package com.wanqing.admin.service;
import com.wanqing.admin.bean.Account;
import com.wanqing.admin.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @description: AccountService 类
* @author: Liuwanqing
* @date: 2022-10-23 19:39
*/
@Service
public class AccountService {
@Autowired
AccountMapper accountMapper;
public Account getAcctByid(long id){
return accountMapper.getAccount(id);
}
}
package com.wanqing.admin.controller;
import com.wanqing.admin.bean.Account;
import com.wanqing.admin.bean.City;
import com.wanqing.admin.bean.User;
import com.wanqing.admin.service.AccountService;
import com.wanqing.admin.service.CityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import javax.sql.DataSource;
@Slf4j
@Controller
public class indexController {
@Autowired
AccountService accountService;
@ResponseBody
@GetMapping("/acct")
public Account getById(@RequestParam("id") Long id){
return accountService.getAcctByid(id);
}
}
总结: 在 SpringBoot 中使用 MyBatis 时,上述两种方法可以混合使用。当查询语句较为简单时,使用注释法。当查询语句较为复杂时,使用配置法。