您现在的位置是:亿华云 > 应用开发
聊聊 Spring boot 集成 Mybatis,你学会了吗?
亿华云2025-10-09 01:33:06【应用开发】6人已围观
简介引入依赖官方说明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot其实就是 Mybatis 看 Spring
官方说明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot其实就是聊聊 Mybatis 看 Spring Boot 这么火热也开发出一套解决方案来凑凑热闹,但这一凑确实解决了很多问题,集成使用起来确实顺畅了许多。聊聊
mybatis-spring-boot-starter主要有两种解决方案,集成一种是聊聊使用注解解决一切问题,一种是集成简化后的老传统。
mybatis-spring-boot-starter
mysql-connector-java
druid
有注解和xml两种开发模式,聊聊下面分别介绍两种模式。集成
新建表CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,聊聊
`name` varchar(20) NOT NULL,
`money` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `account` VALUES (1, aaa, 1000);
INSERT INTO `account` VALUES (2, bbb, 1000);
INSERT INTO `account` VALUES (3, ccc, 1000);
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键id,
`userName` varchar(32) DEFAULT NULL COMMENT 用户名,
`passWord` varchar(32) DEFAULT NULL COMMENT 密码,
`user_sex` varchar(32) DEFAULT NULL,
`nick_name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;注解方式配置文件
## 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## Mybatis 配置
mybatis.typeAliasesPackage=org.spring.springboot.domain在启动类中添加对 mapper 包扫描@MapperScan,也可以直接在 Mapper 类上面添加注解@Mapper,建议使用@MapperScan扫描。集成
@SpringBootApplication
@MapperScan("com.demo.dao")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,聊聊 args);
}
}Mapper
public interface AccountMapper {
@Insert("insert into account(name, money) values(#{ name}, #{ money})")
int add(@Param("name") String name, @Param("money") double money);
@Update("update account set name = #{ name}, money = #{ money} where id = #{ id}")
int update(@Param("name") String name, @Param("money") double money, @Param("id") int id);
@Delete("delete from account where id = #{ id}")
int delete(int id);
@Select("select id, name , money from account where id = #{ id}")
Account findAccount(@Param("id") int id);
@Select("select id, name , money from account")
List findAccountList();
}@Select 是查询类的注解,所有的集成查询均使用这个@Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,高防服务器聊聊如果实体类属性和数据库属性名保持一致,集成就不需要这个属性来修饰。聊聊@Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值@Update 负责修改,也可以直接传入对象@delete 负责删除单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTest {
@Autowired
AccountService accountService;
@Test
public void test(){
Account account = accountService.findAccount(1);
System.out.println(account);
}
}xml配置方式配置文件
## 数据源配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## Mybatis 配置
mybatis.typeAliasesPackage=com.demo.domain
mybatis.mapper-locations=classpath:mapper/*.xml配置mapper
public interface UserMapper {
List
User getOne(Long id);
void insert(User user);
void update(User user);
void delete(Long id);
}
id, userName, passWord, user_sex, nick_name
SELECT
FROM users
SELECT
FROM users
WHERE id = #{ id}
INSERT INTO
users
(userName,passWord,user_sex)
VALUES
(#{ userName}, #{ passWord}, #{ userSex})
UPDATE
users
SET
nick_name = #{ nickName}
WHERE
id = #{ id}
DELETE FROM
users
WHERE
id =#{ id}
</mapper>和使用注解方式主要区别是,把sql拆到xml文件中了。
Mybatis #与$的区别1.#是一个占位符,$是拼接符。
#是一个占位符,$是拼接符。
(1)使用#parameterName方式引用参数的时候,Mybatis会把传入的网站模板参数当成是一个字符串,自动添加双引号。
(2)使用$parameterName引用参数时,不做任何处理,直接将值拼接在sql语句中。
2.使用 # 能够防止sql注入,$不能避免注入攻击。
#的方式引用参数,mybatis会先对sql语句进行预编译,然后再引用值,能够有效防止sql注入,提高安全性。$的方式引用参数,sql语句不进行预编译。
多数据源配置配置文件
mybatis.type-aliases-package=com.demo.model
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/test1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.test1.username=root
spring.datasource.test1.password=123456
spring.datasource.test1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.test2.jdbc-url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.test2.username=root
spring.datasource.test2.password=123456
spring.datasource.test2.driver-class-name=com.mysql.cj.jdbc.Driver配置数据源
//扫描不同的包,使用不同的云服务器数据源
@Configuration
@MapperScan(basePackages = "com.demo.mapper.test1", sqlSessionTemplateRef = "test1SqlSessionTemplate")
public class DataSource1Config {
@Bean(name = "test1DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test1")
@Primary
public DataSource testDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "test1SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
return bean.getObject();
}
@Bean(name = "test1TransactionManager")
@Primary
public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test1SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}很赞哦!(766)