当前位置:首页 > 应用开发

聊聊 Spring boot 集成 Mybatis,你学会了吗?

引入依赖

官方说明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot其实就是聊聊 Mybatis 看 Spring Boot 这么火热也开发出一套解决方案来凑凑热闹,但这一凑确实解决了很多问题,集成使用起来确实顺畅了许多。聊聊

mybatis-spring-boot-starter主要有两种解决方案,集成一种是聊聊使用注解解决一切问题,一种是集成简化后的老传统。

聊聊 Spring boot 集成 Mybatis,你学会了吗?

org.mybatis.spring.boot

聊聊 Spring boot 集成 Mybatis,你学会了吗?

mybatis-spring-boot-starter

聊聊 Spring boot 集成 Mybatis,你学会了吗?

1.2.0

mysql

mysql-connector-java

5.1.39

com.alibaba

druid

1.0.29

</dependency>

有注解和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 {

ListgetAll();

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

userName = #{ userName},

passWord = #{ passWord},

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);

}

}

分享到:

滇ICP备2023006006号-16