目录
(5)resources目录下创建log4j文件用来打印日志文件
(8)配置Spring核心配置类(Spring-donfig.xml)
对于mybatis执行sql语句,需要用到的对象有:
SqlSessionFactory对象,只有创建了SqlSessionFactory对象,才能调用openSession()方法得到SqlSession对象。
dao接口的代理对象,例如AccountDao接口,需要的代理对象为:SqlSeesion.getMapper(AccountDao.class)。
数据源DataSource对象,使用一个更强大、功能更多的连接池对象代替mybatis自己的PooledDataSource。
1.1环境准备
(1) 准备数据库表
数据库中创建表
create database test character set utf8;
use test;
CREATE TABLE `test`.`account` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
`name` varchar(255) NOT NULL COMMENT '用户名',
`money` double NOT NULL AUTO_INCREMENT COMMENT '账户金额',
PRIMARY KEY (`id`)
);
(2)创建Maven项目
(3)配置pom.xml文件
用到的依赖有:spring-context,druid,mybatis,mysql-connector-java,lombok,junit,log4j。
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.24</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.8</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
(4)创建mybatis核心配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<typeAliases>
<package name="com.pra.spring_mybatis.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.pra.spring_mybatis.mapper"/>
</mappers>
</configuration>
(5)创建外部属性文件(properties)
在resources目录下创建jdbc.properties用来提供连接数据库四要素
jdbc.dev.driver=com.mysql.cj.jdbc.Driver jdbc.dev.url=jdbc:mysql://localhost:3306/test jdbc.dev.username=root jdbc.dev.password=123456 |
(6)创建log4j日志文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
(5)resources目录下创建log4j文件用来打印日志文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
(7)创建数据源的配置类
这里省略了核心配置文件,使用注解开发的方式完成。
java目录的config包中创建Jdbc.config.java
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.setDriverClassName(driver);
druidDataSource.setUrl(url);
druidDataSource.setUsername(username);
druidDataSource.setPassword(password);
return druidDataSource;
}
}
(8)配置Spring核心配置类(Spring-donfig.xml)
@Configuration
@ComponentScan({"com.pra.spring_mybatis"})
@PropertySource(value = {"jdbc.properties"})
@Import({JdbcConfig.class, MybatisConfig.class,})
public class SpringConfig {
}
(9)根据表创建模型类
既我们常说的dao层pojo
* web层:MVC模型 * 模型层:entity,pojo,domain,javabean * 控制层:controller * service层:service * 数据层:mapper
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account {
private Integer id;
private String name;
private Double money;
public Account(String name, Double money) {
this.name = name;
this.money = money;
}
}
(10)创建mapper接口
public interface AccountMapper {
@Insert("insert into account(name,money)values(#{name},#{money})")
void save(Account account);
@Delete("delete from account where id = #{id} ")
void delete(Integer id);
@Update("update account set name = #{name} , money = #{money} where id = #{id} ")
void update(Account account);
@Select("select * from account")
List<Account> findAll();
@Select("select * from account where id = #{id} ")
Account findById(Integer id);
}
(11)创建Service接口实现类
AccountService接口:
public interface AccountService {
void save(Account account);
void delete(Integer id);
void update(Account account);
List<Account> findAll();
Account findById(Integer id);
}
Impl包中的实现类:AccountServiceImpl
@Service("AccountService")
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountMapper AccountMapper;
public void save(Account account) {
AccountMapper.save(account);
}
public void update(Account account){
AccountMapper.update(account);
}
public void delete(Integer id) {
AccountMapper.delete(id);
}
public Account findById(Integer id) {
return AccountMapper.findById(id);
}
public List<Account> findAll() {
return AccountMapper.findAll();
}
}
(12)junit测试
常规方法测试
public class S_MTest {
@Test
public void m_sTest2(){
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
AccountService accountService = ctx.getBean(AccountService.class);
List<Account> list = accountService.findAll();
list.forEach(System.out::println);
}
}
运行结果:成功执行方法,显示表中数据
也可使用注解测试
@ContextConfiguration(classes = {SpringConfig.class})
public class S_MTest {
@Autowired
private AccountService accountService;
@Test
public void m_sTest(){
List<Account> list = accountService.findAll();
list.forEach((System.out::println));
}
}
1.2 整合思路分析
可见测试方法中还是使用了Spring框架中的ApplicationContext接口对象执行方法,而mybatis中用到的关于SqlSessionFactory的创建均在mybatisConfig.java中有所体现,并最终被SpringConfig.java引用,可知将 MyBatis 与 Spring 进行整合,主要解决的问题。即将 SqlSessionFactory 对象交由 Spring 来管理。所以,该整合,只需要将 SqlSessionFactory 的对象生成器 SqlSessionFactoryBean 注册在 Spring 容器中,再将其注入给 Dao 的实现类即可完成整合。
使用mybatis,需要创建mybatis框架中的某些对象,使用这些对象,就可以使用mybatis提供的功能了。